![](https://csdnimg.cn/release/download_crawler_static/86625382/bg1.jpg)
1 概述:
I2C 总线使用两根信号线来进行数据传输,串行数据线 SDA 和串行时钟线 SCL。I2C 总线
理论上允许的最大设备数,是以总线上所有器件的电容总和不超过 400pF 为限(其中包括连
线本身的电容和与它连接端的引出电容),总线上所有器件要依靠 SDA 发送的地址信号寻址,
不需要片选线。任何时刻总线只能由一个主器件控制,各从器件在总线空闲时启动数据传送,
由 I2C 总线仲裁来决定哪个主器件控制总线。
2 协议
I2C 总线规范规定:在传输的开始,有一个开始事务,在传输的结束,有一个结束事务。
总线空闲:SCL 和 SDA 都保持高电平
开始信号:SCL 高,SDA 高->低,开始信号以后,总线被认为“忙”
结束信号:SCL 高,SDA 低->高,停止信号以后,总线被认为“空闲”
总线忙: 在数据传送开始以后,SCL 为高电平的时候,SDA 的数据必须保持稳定,只有
当 SCL 为低电平的时候才允许 SDA 上的数据改变。
在 PXA270 上,I2C controller 是作为主器件来配置的,其他可能的外围设备如 camera,touch
panel 和 keypad 作为从设备来配置。
(1)主设备写操作到从设备:
在主设备发送开始条件后
发送 7 位 slave 地址和 1 位读写模式(高电平表示读从器件,低电平代表写从器件);
发送一个选择从器件片内地址的字节,来决定开始读写数据的起始地址;
发送数据字节,能是单字节数据,也能是一组数据,由主器件根据从器件的需求来决定;
每 8 位发送完毕后,主设备会释放 SDA 线(为高),改为在下一个 clock 周期则监测 SDA
线是否被从设备拉低,从器件每接收到一个字节以后,都要返回一个应答信号(ACK=0)。从
器件在这个时钟周期的高电平期间必须拉低 SDA 线,并使之为稳定的低电平,作为有效的
应答信号。
(2)主设备读操作到从设备
在开始信号以后,主器件向从器件发送控制字节。如果从器件接收到主器件发送来的控制字
节中的从地址片选信号与该器件相对应,并且方向位为高电平(R/W=1),就表示从器件将要发
送数据。从器件先发送一个应答信号(ASK=0)回应主器件,接着由从器件发送数据到主器件。
如果,在这个过程之前,主器件发给从器件一个片内地址选择信号,那么从器件发送的数据
就从该地址开始发送;如果在从器件接收到请求发送的控制信号以前,没有收到这个地址选
择信号,从器件就从最后一次发送数据的地址开始发送数据。发送数据过程中,主器件每接
收到一个字节都要返回一个应答信号 ACK。若 ACK=0(有效应答信号),那么从器件继续发
送;若 ACK=1(停止应答信号),停止发送。主器件能控制从器件从什么地址开始发送,发
送多少字节。
3 注意