I2C总线是两线式双向串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。
特点:
接口简单
只有俩条位宽为1的连接线:
SDA -1bit数据线
SCL -1bit时钟线
双向总线
SDA 和SCL均为双向线路
多种模式
支持三种传输模式:
标准模式:传输速度可达100Kbit/s
快速模式:传输速度可达400Kbit/s
高速模式:传输速度可达3.4MKbit/s
多主机自动仲裁
术语
术语 | 描述 |
---|---|
发送器 | 发送数据到总线的器件 |
接受器 | 从总线接受数据的器件 |
主机 | 初始化总线 ,发送起始和终止条件,发送数据和时钟的器件 |
从机 | 被主机寻址的器件 |
多主机 | 同时有多于一个主机尝试控制总线,但不破坏报文 |
仲裁 | 是一个在多个主机同时尝试控制总线,但允许其中一个控制总线并使报文不破坏的过程 |
同步 | 俩个或者多个主机同步时钟信号的过程 |
接口结构
当总线空闲时 这两条线路都是高电平
接口采用线与的方式,因此,任何一个端口输出为低电平,在总线上即表现为低电平
通信格式
当SCL 线是高电平时, SDA 线从高电平向低电平切换, 这个情况表示起始条件
当 SCL 是高电平时 SDA 线由低电平向高电平切换表示停止条件
数据有效性SDA 线上的数据必须在SCL的高电平周期保持稳定, 数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变.
数据位发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位
在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在SCL的高电平期间保持稳定的低
电平数据传输必须带响应
从机寻址
7 位寻址
起始条件后的第一个字节
头7位 ——从机地址
第8位 ——报文方向
0-主机向从机写入数据
1-主机从从机读入数据
第一字节中位的定义:(特殊格式)
从机地址 | R/ W 位 | 描述 |
---|---|---|
0000 000 | 0 | 广播呼叫地址 |
0000 000 | X | CBUS 地址 2 |
0000 010 | X | 保留给不同的总线格式 3 |
0000 011 | 0 | 保留到将来使用 |
0000 1XX | X | Hs 模式主机码 |
1111 1XX | X | 保留到将来使用 |
1111 0XX | X | 10 位从机寻址 |
从机在接收到第一个字节数据之后:
如果头7位不是特殊的格式
系统中的每个期间都在起始条件后将7位与它自己的地址比较,如果一样,器件会认为他被主机寻址
是特殊的格式
根据不同的格式做出不同的反应
10 位寻址
从机在接收到第一个字节数据之后:
如果头 7 位 是11110XX 特殊格式
从机意识到主机正在进行10位寻址,如果从机支持10位寻址,那么会将XX与自己10位地址的高2位进行对比,如果相同,则在第9拍给出响应,并且会接收接下来的第二个字节;如果不同,则不响应,不接收接下来的第二字节
其他格式
根据不同的格式做出不同的反应
接收器发送响应的俩种情况:
主机发送器-从机接收器
这种情况其实就是主机向从机发送数据。这时候响应位处的响应需要由从机发送,主机在响应位期间将自己的SDA拉高。当主机的寻址地址发送完毕后,如果主机收到响应,主机就认为已经寻址到了目标从机,就开始发下一组8位数据,如何主机收到此次数据的响应,则主机可继续发下一组数据;如果主机未收到响应,主机需要终止本次操作。
主机接受器-从机发送器
这种情况其实就是主机从从机读取数据。这时候响应位处的响应需要由主机自己发出,从机在响应位期间将自己的SDA拉高。在主机接收到从机的数据之后,应该给出响应,这样从机才会发送下一组数据,否则从机会因为主机无响应而停止发送数据。
由此看来,主机在读取数据的时候,停止本次操作的条件是:当主机接收到最后一个字节的数据时,在响应位应不在给响应。以通知从机主机已经不再需要数据,在响应位后主机依然需要在总线上发起停止条件以结束本次读操作。