1. I2C总线
1. I2C 总线I2CInter-Integrated Circuit总线是一种由Philips现NXP开发的简单、**双向二线制同步串行总线**。它仅需**SDA数据线和SCL时钟线**两根线即可在微控制器与传感器、存储器等低速外围设备之间实现主从通信。半双工读写不可以同时进行。I2C 属于同步、串行同步即有时钟线uart属于异步、串行异步即没有时钟线1.1 属于什么标准它是【数据链路层】标准。它规定了“传输时的信号时序”和“数据包的格式”。它规定了“什么时候拉低 SDA 线算发送数据”、“主机怎么叫号找到从机设备地址”、“传输完怎么发停止信号”。1.2 信号线SDA (Serial Data Line) 串行数据线双向用于传输数据。SCL (Serial Clock Line) 串行时钟线由主器件控制用于同步数据传输。基本信号单元1.3 工作原理起始与停止 SCL为高时SDA由高变低表示起始STARTSCL为高时SDA由低变高表示停止STOP。数据传输 每一个字节8位后必须跟着一个应答位ACK/NACK。主从机制 主设备产生时钟并启动通信寻址从设备以进行数据交换。优缺点优点 只需要两根信号线连接简单支持设备扩展。缺点 通信速率相对较慢传输距离受总线电容限制通常在短距离、板内应用。物理层需要上拉电阻将总线空闲状态拉至高电平。速率 标准模式为100 kbps快速模式为400 kbps高速模式可达3.4 Mbps。寻址 采用7位地址标准理论上允许在同一总线上连接112个从设备。1.4 使用场景I2C常用于传感器配置、EEPROM读写、LCD显示控制器、系统管理总线SMBus等应用1.5 IIC总线通信过程_各阶段详解1.5.1 写数据流程主机 → 从机1 主设备的动作[START]-[从机地址R/W]-[ACK]-[寄存器地址 0x05]-[ACK]-[真正的数据帧]-[ACK]-[STOP][START]-[从机地址R/W]-[ACK]-[寄存器地址 0x05]-[ACK]-[真正的数据帧]-[ACK]-[STOP]《1》主设备发送一个起始信号start; 《2》主机发送一个字节数据数据里包含从机地址7bit、后续字节的传送方向(读or 写)从机地址指的是 在I2C 总线上的从设备地址《3》被寻址的从机发送应答信号ACK 回应主机《4》主机发送寄存器地址寄存器地址从设备内部比如 EEPROM、传感器的寄存器被寻址的从机发送应答信号ACK 回应主机《5》主机发送数据帧数据帧读操作中主机不需要填写数据帧内容。被寻址的从机发送应答信号ACK 回应主机《6》主机发送停止信号释放总线2 从设备的动作–》监听总线等待 START 条件–》比对地址主机发完 7 位地址后检查是不是自己的地址–》如果地址匹配在第 9 个时钟周期拉低 SDA 发 ACK不匹配就不动作保持高即 NACK继续等下一次 START–》接收 8 位数据存到内部寄存器/缓冲区–》在第 9 位发 ACK表示收到了可以继续–》收到 STOP → 结束本次通信1起始条件START流程SCL 为高电平时SDA 由高变低。这是唯一在 SCL 高电平期间允许 SDA 跳变的情况除停止外。表示一次通信的开始。2数据位传输SCL 低电平期间SDA 可以改变准备数据。SCL 高电平期间SDA 必须稳定采样数据。每个时钟脉冲传 1 bitMSB 先传3应答位ACK / NACK每传输 8 bit 后第 9 个时钟周期为应答位。接收方拉低 SDA ACK应答。接收方释放 SDA保持高 NACK非应答。主机读数据时最后一个字节由主机发 NACK然后发 STOP4停止条件STOPSCL 为高电平时SDA 由低变高。表示通信结束。1.5.2 读数据流程主机 → 从机1 主设备的动作[START]-[从机地址R/W]-[ACK]-[寄存器地址 0x05]-[ACK]--[STOP]2 从设备的动作–》监听总线等待 START 条件–》比对地址主机发完 7 位地址后检查是不是自己的地址–》如果地址匹配在第 9 个时钟周期拉低 SDA 发 ACK–》发送 8 位数据在 SCL 低时改变 SDA高时保持–》在第 9 位释放 SDA等主机给应答–》主机拉低 SDA ACK → 从机继续发下一个字节–》主机释放 SDA NACK → 从机停止发送释放 SDA–》收到 STOP → 结束通信释放总线读操作中从机主动驱动 SDA 发数据并在第 9 位读主机的应答来决定是否继续。