《2022年IIC知识点总结 .pdf》由会员分享,可在线阅读,更多相关《2022年IIC知识点总结 .pdf(3页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、IIC 知识点总结 对IIC 这块我花的时间也蛮长的,在51和STM32 中用的都是模拟IIC,在AVR 中用的是硬件的,我下面主要说的是模拟IIC,多机通信我还没做过,这里只说两机通信。以AT24C02 来说:1.IIC总线空闲的时候,SDA 和SCL 都为高电平,所以硬件电路中一般在 IIC 两根总线上各接一个电阻后再接VCC,2.开始,终止信号就注意里面的几个时间就可以了,看AT24C02数据手册中提到的几个时间,下图中就有标示。通过软件延迟去满足。如果是IIC 跟其余的芯片进行通信时也需要看看给的这个时间是否满足要求,一般都应该差不多。3.名师资料总结-精品资料欢迎下载-名师精心整理-
2、第 1 页,共 3 页 -总线中的时序需要满足,比如SCL 中提到的 T_low,T_high。IIC总线速度在 400KHZ 以下,如果不给这个时间的话就可能超过400KHz 了,也可以通过调整这几个时间去调整IIC 通信的速度。SDA一般只有在 SCL 位低电平的时候才能变化,因为起始,停止信号是在 SCL 为高的时候 SDA 发生变化,为了区别,所以一般在写入/读出数据时只能在 SCL 为低时SDA 发生变化。这点在编程的时候要特备注意。4.在用IIC 总线向AT24C02 写入一字节或读取一字节数据时需要知道什么时候在 SDA 总线上写入一个位或者什么时候从SDA 总线上去读取一个位,
3、有资料说是在 SCL 的上升沿才能将数据写入 AT24C02 中,在SCL的下降沿才能从 AT24C02 中读出数据。那就是在写入数据时就是要先改变SDA 的值再去制造一个 SCL 的上升沿,需要在 SCL 的下降沿后从 SDA 总线上去读取数据。先后顺序必须把握好。5.重点想说的就是应答信号和非应答信号。在这块我吃过很多亏。应答信号分为主机应答 和从机应答 ,这两者有着很大的区别。主机应答是在主机从从机中读取数据时每次读取完一个字节的数据后主机给从机的一个应答信号,表示主机已收到数据了。而从机应答是指主机给从机发送数据时从机给主机的应答,给一个应答就代表从机已经收到了数据,为主机接下来的工作
4、做个判断。主机在核查从机的应答信号的时候,必须先将 SDA 总线拉高,释放总线。非应答信号是主机给从机的,当读取完一字节数据以后,主机不再去读取数据就给从机一个非应答信号,接着一个停止信号,直接给停止信号也是可以结束此次读操作,但是会对后面的操作带来影响。我在操作 RDA5820 的时候就深受其害,所以还是不套图省事,养成好的习惯,非应答信号在需要的时候必须给。看到群里面好多问 iic 的问题我来解释一下下面这个代码的意思if(EE_TYPEAT24C16)IIC_Send_Byte(0XA0);/发送写命令IIC_Wait_Ack();IIC_Send_Byte(ReadAddr8);/发送
5、高地址IIC_Wait_Ack();名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 3 页 -else IIC_Send_Byte(0XA0+(ReadAddr/256)8);/发送高地址IIC_Send_Byte(ReadAddr%8);/发送低地址else IIC_Send_Byte(0XA0+(ReadAddr/256)1);这个是考虑到at24c04/08/16 的a8,a9,a10 的ReadAddr/256得到的对应的 a8,a9,a10的值,左移 1位就跑到了对应的 1010 xxxR/W(X 可能为a8,a9,a10,A0,A1,A3 的任意一个)xxx,具体大家看那个对应芯片的器件地址)然后在和 0 xa0进行相加得到的就是 1010 xxxR/W(X 可能为a8,a9,a10,A0,A1,A3 的任意一个)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 3 页 -