15 I2C总线控制器
15.1 概述
I2C为双线,双向串行总线,为设备之间的数据通讯提供了简单有效的方法。标准I2C是多主机总线,包括冲突检测和仲裁机制以防止在两个或多个主机试图同时控制总线时发生的数据冲突。
数据在主机与从机间同步于SCL时钟线在SDA数据线上一字节一字节的传输,每个字节为8位长度,一个SCL时钟脉冲传输一个数据位,数据由最高位MSB首先传输,每个传输字节后跟随一个应答位,每个位在SCL为高时采样;因此,SDA线只有在SCL为低时才可以改变,在SCL为高时SDA必须保持稳定。当SCL为高时,SDA线上的跳变视为一个命令(START 或 STOP), 更多详细的I2C总线时序请参考图15.1-1。
图15.1-1 I2C 总线时序
该设备的片上I2C提供符合I2C总线标准模式规范的串行接口,I2C端口自动处理字节传输,将I2CON的ENS1位设置为1,可以使能该端口。 I2C H/W 接口通过两个引脚连接到I2C总线:SDA (Px.y,串行数据线) 与 SCL (Px.y, 串行时钟线)。引脚Px.y 与 Px.y 用于 I2C操作需要上拉电阻,因为这两个引脚为开漏脚。在作为 I2C 端口使用时, 用户必须先将这两个引脚设置为I2C功能。
15.2 特征
I2C总线通过SDA 及 SCL在连接在总线上的设备间传输数据,总线的主要特征:
l 支持主机和从机模式
l 主从机之间双向数据传输
l 多主机总线支持 (无中心主机)
l 多主机间同时发送数据仲裁,总线上串行数据不会被损坏
l 串行时钟同步使得不同比特率的器件可以通过一条串行总线传输数据
l 串行时钟同步可用作握手方式来暂停和恢复串行传输
l 内建一个14位超时计数器,当I2C总线挂起并且计数器溢出时,该计数器将请求I2C中断
l 需要外部上拉用于高电平输出
l 可编程的时钟适用于不同速率控制
l 支持7位寻址模式
l I2C总线控制器支持多地址识别 (4组从机地址带屏蔽选项)
15.3 功能描述
l I2C协议
通常标准I2C传输协议包含四个部分:
1) 起始信号或重复起始信号的产生
2) 从机地址和R/W位传输
3) 数据传输
4) 停止信号的产生
注:
S 起始信号
W/R 读/写控制位
ACK 应答
DATA 数据
P 停止信号
图 15.3-1 I2C 协议
l I2C总线上的数据传输
I2C总线上的通信过程都是由主机发起的,以主机控制总线,发出起始信号作为开始。在发送起始信号后,主机将发送一个用于选择从机设备的地址字节,以寻址总线中的某一个从机设备,通知其参与同主机之间的数据通信,地址格式如下图15.3-2。
MSB LSB
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
R/W(----) |
7位从机地址 |
读/写 |
图15.3-2 地址格式
地址字节的高7位数据是主机呼叫的从机地址,第8位用于标示紧接下来的数据传输方向:“0”表示主机将要向从机发送数据(主机发送/从机接收);而“1”则表示主机将要向从机读取数据(主机接收/从机发送)。
………………………………
书籍下载地址(复制到下载工具进行下载):
https://files.cnblogs.com/wenziqi/ARMCortex-M0原理与应用实践.part1.rar
https://files.cnblogs.com/wenziqi/ARMCortex-M0原理与应用实践.part2.rar
注:书籍内容会不定期进行更新!