ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ARM I2C

ARM I2C 一、I2CI2CInter-Integrated Circuit集成电路总线由飞利浦现NXP提出的两线制同步串行通信总线用于主机与从机通常是MCU与外围芯片之间的短距离板级通信。1. 两根线信号线全称作用SCLSerial Clock时钟线主机发出同步整个通信节拍SDASerial Data数据线双向传输数据半双工两线均为开漏输出 上拉电阻结构空闲时总线为高电平线与特性。2. 主要特性特性说明同步方式同步通信有时钟线SCL数据方向半双工SDA一根数据线分时双向位传输顺序高位先行MSB first寻址方式起始信号后第一个字节 设备地址高7位 数据流向位低1位可挂127个从机2⁷128保留全0地址实际可用127个通信速率100kHz标准、400kHz快速、1.xM、3.xM高速拓扑一主多从 / 多主多从每个从机有唯一7位地址3. 地址与读写位讲义原例起始信号后的第一个字节高7位设备地址 最低1位读写位0x100001 0000→ 设备地址0x100写主机发送数据给从机0001 0001即0x11→ 设备地址0x101读从机发送数据给主机即写字节 设备地址1 | 0读字节 设备地址1 | 1。 讲义另一例0xAC 1010 1100 0x59写、0x5D读高位先行传输1010 110 方向位。二、I2C时序I2C所有操作都由起始、数据传输、应答、结束四种信号组成1. 起始信号StartSCL时钟线为高电平时SDA数据线由高变低下降沿SDA ────┐ └──────── ← SCL高电平期间SDA下降沿 起始 SCL ──────────────由主机发出表示一次传输开始。2. 数据传输有效性规则SCL为高电平时SDA必须保持稳定此时接收方采样数据SCL为低电平时SDA可以改变此时发送方发送更新数据1 0 1 0 1 1 0 0 ← 高位先行 SDA ─┐ ┌─┐ ┌─────┐ └─┘ └───┘ └── SCL ──┐ ┌─┐ ┌─┐ ┌─┐ ┌── └─┘ └─┘ └─┘ └─┘ ↑每个SCL高电平采样一位记忆高采样、低换数——SCL高电平锁数据低电平换数据。只有起始/结束信号例外故意在SCL高电平期间改变SDA来产生特殊标志。3. 应答信号ACK / NACK每传输8位数据后的第9个时钟周期接收方需向发送方回复应答信号ACK低电平应答收到了NACK高电平非应答发送方第9个时钟释放SDA靠上拉变高由接收方拉低ACK或保持高NACK。4. 结束信号StopSCL时钟线为高电平时SDA数据线由低变高上升沿SDA ┌──────── ───────────┘ ← SCL高电平期间SDA上升沿 结束 SCL ──────────────────由主机发出表示一次传输结束。三、I2C写时序与读时序1. i2c写时序主机→从机写寄存器S 设备地址W → ACK → 寄存器地址 → ACK → 数据 → ACK → P步骤操作1主机发送起始信号 设备地址 写位(0)等待从机ACK2主机发送寄存器地址等待从机ACK3主机发送数据写入该寄存器等待从机ACK4主机发送停止信号2. i2c读时序主机←从机读寄存器★i2c_read函数对应步骤操作1主机发送起始信号 设备地址 写位(0)等待从机ACK2主机发送寄存器地址等待从机ACK3主机重发起始信号Repeated Start 设备地址 读位(1)等待从机ACK4主机接收从机数据主机回复ACK应答5接收最后一个字节后主机回复NACK告诉从机不要再发6主机发送停止信号为什么要写转读Dummy Write读之前主机必须先用写操作告诉从机要读哪个寄存器步骤1~2再通过Repeated Start切换为读方向步骤3从机才知道从哪个寄存器把数据吐出来。为什么最后是NACK主机回NACK表示我收够了从机释放SDA主机才能发出停止信号。
返回列表