I2C协议与EEPROM


I2C协议与EEPROM

文章插图
 
来源:百问网_嵌入式linux wiki_jz2440 新1期视频维基教程 (视频文字版)
作者:韦东山
本文字数:1856,阅读时长:3.5分钟
I2C协议I2C在硬件上的接法如下(图19-1)所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说) 。
I2C协议与EEPROM

文章插图
 
我们怎么传输数据,我们需要发数据从主设备发送到从设备上去,也需要把数据从从设备传送到主设备上去,数据涉及到双向传输 。
举个例子:
I2C协议与EEPROM

文章插图
 
体育老师:可以把球发给学生,也可以把球从学生中接过来 。
1.发球:a.老师说:注意了(start) b.老师对A学生说我要球发给你(地址) 。
  • c.老师就把球发出去了(传输) 。
  • d.A收到球之后,应该告诉老师一声(回应) 。
  • e.老师说下课(停止)
2.接球:
  • a.老师说注意了(start),
  • b.老师说:B把球发给我(地址)
  • c.B就把球发给老师(传输)
  • d.老师收到球之后,给B说一声,表示收到球了(回应) 。
  • e.老师说下课(停止)
我们就使用这个简单的例子,来解释一下IIC的传输协议 。
  • 老师说注意了,表示开始信号(start)
  • 老师告诉某个学生,表示发送地址(address)
  • 老师发球/接球,表示数据的传输
  • 老师/学生收到球,回应表示:回应信号(ACK)
  • 老师说下课,表示IIC传输接受(P)
 
IIC传输数据的格式1.写操作:
刚开始主芯片要发出一个start信号,然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读) 。
回应(用来确定这个设备是否存在),然后就可以传输数据,传输数据之后,要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据 。
每传输一个数据,接受方都会有一个回应信号,数据发送完之后,主芯片就会发送一个停止信号 。
白色背景:主→从
灰色背景:从→主
I2C协议与EEPROM

文章插图
 
2.读操作:
刚开始主芯片要发出一个start信号,然后发出一个设备地址(用来确定是从哪一个芯片读取数据),方向(读/写,0表示写,1表示读) 。
回应(用来确定这个设备是否存在),然后就可以传输数据,传输数据之后,要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据 。
每传输一个数据,接受方都会有一个回应信号,数据发送完之后,主芯片就会发送一个停止信号 。
白色背景:主→从
灰色背景:从→主
I2C协议与EEPROM

文章插图
 
传输是以8位为单元数据传输的,先传输最高位(MSB),主芯片发出start信号之后,然后发出9个时钟传输数据 。
(1)开始信号(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据 。
(2)结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据 。
(3)响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA
SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化 。如图
I2C协议与EEPROM

文章插图
 
1.问题:如何在SDA上实现双向传输?
答:主芯片通过一根SDA线既可以把数据发给从设备,也可以从SDA上读取数据,连接SDA线的引脚里面必然有两个引脚(发送引脚/接受引脚) 。
2.问题:主设备(从设备)发送数据时,从设备(主设备)的发送引脚,不影响数据的发送,怎么做到呢?
答:里面放一个三极管,使用开极(极电集开发出去作为输出)电路,如下图
I2C协议与EEPROM

文章插图
 
下面画一个真值表:
I2C协议与EEPROM

文章插图