本帖最后由 mintspring 于 2017-2-22 19:03 编辑
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组从机地址带屏蔽选项)
|