iic理解修改

今天看了小梅哥的视频,对于iic的协议的重新认识,
对于iic协议,在以前就是用在电视机上。可以通过调节,控制电子扫描范围等等一系列的。
首先,对于协议来说,就是两个芯片相互交互的规则,无法修改,约定俗成。一个主控芯片,一个是从控芯片。需要定位好。对于昨天写的iic协议中,仅仅只有一个协议,自己连器件交流中,都没有区分开,昨天写的是一个对于eefrom,输入的scl,对于从机是输入,而对主机就是输出,需要好好理解,昨天写的从机的协议。
对于传输协议,一定要最先理解,谁是发送,谁是接收,如何发送,发送的标记,如何接收,接收的结束。例如uart,是一个单向的传输。开始就是一个低电平,结束拉低。有具体的波形长度,随波特率的改变而改变,uart很固定,对于数据传输都是,计数器一个一个的计。而iic,对于传输中有交互有应答,能读能写,但是对于信息的传递,都是需要有应答。起始位是在scl高电平时候,sda从高电平拉低到低电平,结束则是,scl高电平,sda从低电平拉高到高电平。数据采集,scl低电平,改变数据,scl高电平,采集数据。
数据每次结束发送时候都有会有应答信号。
对于有应答信号,就是在sda输出或者输入数据,就会有ack或者noack。就是将sda数据输出变成输入。输入变成输出。
于是对于sda的信号定义时,就是


inout sda;
assign sda = flag ? sda_buffer:1'bz:
assign sda = flag ?(sda_buffer?1'b1:1'b0):1'bz;

当flag为1时,则代表就是输出,否则,会是取到输入的sda。
这里面利用的就是三态门的原理,对于输出的时候,三态门打开,回取到输出的值,而输入端口也会取到输出值,但是在输出时刻,对于不影响输出不影响。而在输入的时候,三态门关闭,输入只会取到sda值,输出部分已被关闭。
第三行代码,对于输出时高电平,在芯片中无法输出高电平,所以通过上拉电阻来做。并在在你输出高电平时,在别的从机时候,会影响到别的从机在scl高电平时候,出现高电平致使协议结束。
仿真中解决上拉电阻。

pullup(sda)

今天学习还有就是,对于许多许多的程序,我们可以将它拆成很多小小的模块,让其有很多的泛用性。对于以后代码扩展很有用。
总结一些状态跳变的规律,也可以将其模块化。
今天没有python的学习。
明天将iic解决。

你可能感兴趣的:(FPGA,单片机,stm32,嵌入式硬件)