原创 IIC通讯协议详解

2019-4-28 11:03 5173 15 11 分类: MCU/ 嵌入式 文集: 存储记忆
IIC,两根线,SCL时钟线,SDA数据线。
一个主机master,一个或多个从机slave。
主机通常就是MCU,从机会有一个地址,这个地址通常前4位是器件本身固定的,5-7位可以硬件选择,最后一位通常是WP位,一般此位低电平表示正常读写,此位高电平表示读保护,只能读。如常用的EEPROM 24C02,地址高四位是1010,5-7位硬件连接决定,即是将其A0-A2引脚接地为000,这样设备地址是0xA0或者0xA1(读)。
IIC的指令:
默认下(无数据传输):SCL=1,SDA=1;
Start:当SCL=1时,SDA由1向0跳变;
Stop:当SCL=1时,SDA由0向1跳变;
数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可改变SDA;当SCL保持为0时,SDA上的数据可改变。也就是说,不管是主机发从机,还是从机发主机,只要想发送或者读取数据,必须有一个scl上升的过程,此时SDA数据有效,数据来自于发送方。
地址位:定义同数据位,但只由Master发给Slave;
应答位(ACK):发送SDA=0,可以是主机主动发送,也可以是从机发送主机接收。
否应答位(NACK):发送SDA=1,可以是主机主动发送,也可以是从机发送主机接收
注意:
1,SCL一直由Master控制。
2,Start和Stop,只能由Master发出。
3,地址的8位传送完毕后,成功配置地址的Slave设备必须发送“ACK”。否则否则一定时间之后Master视为超时,将放弃数据传送,发送“Stop”。
4,当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时,此时Master放弃数据传送,发送“Stop”。
5,当读数据的时候,Slave设备每发送完8个数据位,如果Master希望继续读下一个字节,Master应该回答“ACK”以提示Slave准备下一个数据,如果Master不希望读取更多字节,Master应该回答“NACK”以提示Slave设备准备接收Stop信号。
6,当Master速度过快Slave端来不及处理时,Slave设备可以拉低SCL不放(SCL=0将发生“线与”)以阻止Master发送更多的数据。此时Master将视情况减慢或结束数据传送。
在实际应用中,并没有强制规定数据接收方必须对于发送的8位数据做出回应,尤其是在Master和Slave端都是用GPIO软件模拟的方法来实现的情况下,编程者可以事先约定数据传送的长度,slave不检查NACK,有时可以起到减少系统开销的效果。但是如果slave方是硬件i2c要求一定要标准的NACK,master方是GPIO软件模拟i2c并没有正确的发送NACK,就会出现“slave收不到stop”导致i2c挂死。


文章评论8条评论)

登录后参与讨论

curton 2019-5-22 08:14

学习

何文龙 2019-5-15 09:13

好资源,学习了

curton 2019-5-8 12:23

好资源 学习了

wjx943_536273043 2019-5-6 20:54

好资源  学习了

Kevin_pan 2019-4-30 15:32

好资源  学习了

curton 2019-4-29 18:45

好资源  学习了

测量无处不在 2019-4-29 08:40

I2C总线,汽车上用的挺多的?线少,接口简单

北风 2019-4-28 20:59

刚好用到这个芯片,操作简单。
相关推荐阅读
狂野的牛哥 2020-06-12 10:24
DC是怎样综合RTL级设计的?
学习书籍《数字IC设计-方法、技巧与实践》笔记对于软件DC(Design Compiler)而言,综合=翻译+优化+映射。翻译:是将RTL级描述转换成DC常用的布尔表达,优化是根据设计目标优化电路结构...
狂野的牛哥 2019-10-29 11:08
秋招整理
签订三方结束秋招已经快一周了,想着回忆整理一下自己的秋招经历,留作纪念,也希望能帮助需要的人。坐标hf,目的城市hf或者wh,所以找工作的重点其实还是放在wh,hf和长三角区域,诸如北京,珠三角以及其...
狂野的牛哥 2019-08-16 20:55
步进电机驱动芯片TMC260使用经验
项目需要使用步进电机的驱动芯片,几经比较,选用了德国的TMC260,非常好用,工作起来稳健。芯片有两个完整的H桥,所以可用来控制两个直流电机或者一个二相四线步进电机。具体参数查看datasheet,大...
狂野的牛哥 2019-07-25 10:53
时序约束之偏移(OFFSET)约束
笔记本上整理记载了时序约束中的偏移约束,上传图片保存,以备日后查阅使用。...
狂野的牛哥 2019-06-20 16:34
ZYNQ学习笔记之First Project
做了第一个Project该工程功能:PS内部定时器开启定时,PL端GPIO连接按键和LED,通过按键按下产生从PL到PS的中断,中断服务程序是控制LED灯做流水灯闪烁,间隔时间为来自于定时器的1s。同...
狂野的牛哥 2019-06-20 15:30
ZYNQ学习笔记之时钟相关
通常模式下,锁相环PLL是启动的,PS-CLK提供时钟信号,经过三路PLL,分别是:ARM PLL,产生时钟用于CPU和互联;IO PLL,产生时钟用于IO外围设备;DDR PLL,产生时钟用于DDR...
我要评论
8
15
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /1 下一条