导图社区 iic基础知识
自己学习总结的,思维导图内容主要介绍了IIC(也叫I2C)总线的基本知识、数据通信方式及其相关细节。仅供参考❤️❤️❤️
编辑于2025-03-31 08:16:24iic基础知识
所有iic设备的scl连接咋一起,sda连在一起,设备的scl和sda均要求配置成开漏输出模式,scl和sda各添加一个上拉电阻,阻值一般在4.7kΩ左右
上拉电阻的作用
我们可以把I2C通信中的线路想象成一个特殊的杠杆系统,用杠杆的操作来形象比喻上拉电阻的作用: 默认状态维持——杠杆的初始位置:将上拉电阻比作一个始终给杠杆一端施加向上拉力的力量。在这个比喻中,杠杆的一端连接着I2C总线(SDA或SCL线),另一端连接着电源(就像杠杆的支点连接着一个有固定力量的源头)。当没有其他外力作用于杠杆时,也就是I2C总线上没有设备主动控制时,上拉电阻施加的拉力会让杠杆保持在一个较高的位置,对应着总线处于高电平状态。这就好比杠杆在没有其他干扰时,始终被拉到高处,确保了总线在空闲状态下有一个稳定的初始电平。 数据“0”的传输——向下压杠杆:当设备要发送数据“0”时,就如同有人用力向下压杠杆连接总线的那一端。尽管上拉电阻一直在施加向上的拉力,但只要这个向下压的力足够大,就能够克服上拉电阻的拉力,使杠杆的这一端下降,对应着总线被拉低到低电平。就像在实际I2C通信中,设备有足够的驱动能力将SDA线拉低来表示逻辑“0”,此时上拉电阻的存在并不影响设备拉低总线的操作。 数据“1”的传输——松手后杠杆复位:当设备要发送数据“1”时,不再对杠杆施加向下的压力,就如同松手放开杠杆。这时,上拉电阻施加的向上拉力就会立刻发挥作用,迅速将杠杆拉回到较高的位置,对应着总线被拉高到高电平。在I2C通信里,设备释放对SDA线的控制后,上拉电阻会快速把SDA线拉高,确保在SCL为高电平期间,SDA线上的信号稳定为高电平,以便被接收方准确识别。 多设备竞争协调——多个力量对杠杆的作用:I2C总线上连接多个设备,就好像有多个可以对杠杆施加力量的人。当多个设备同时释放对总线的控制,就如同所有人都同时松开了拉杠杆的手。此时,上拉电阻的拉力会让杠杆回到高处,保证总线维持高电平,避免了因为不同设备的操作不一致而导致杠杆位置混乱(即总线电平冲突)。而当某个设备想要拉低总线发送数据时,只要它施加的向下压力足够大,能够克服上拉电阻的拉力,就可以成功将杠杆拉低,实现数据传输。这样就保证了在多设备环境下,总线能够有序地进行数据传输。 通过这个杠杆的比喻,希望能让你更直观地理解上拉电阻在I2C通信中维持电平状态、协助数据传输以及协调多设备竞争等方面的作用。
数据的接收和发送
在 I2C 通信中提到的 “释放 SDA 线”,指的是主机将 SDA(串行数据线)引脚的控制权从输出模式切换为输入模式 ,让 SDA 线处于高阻态。 在 I2C 通信里,主机在发送数据时,会将 SDA 引脚设置为输出模式,通过控制该引脚输出高电平或低电平,来传输数据。而当主机接收数据时,需要从从机获取数据,此时就需要 “释放 SDA 线”。将 SDA 引脚设置为输入模式后,主机不再主动驱动 SDA 线的电平,SDA 线的电平状态由从机来控制,从机可以通过拉高或拉低 SDA 线来发送数据或应答信号。这样,主机就可以通过读取 SDA 引脚的电平状态,来获取从机发送的数据或应答信息。 例如,主机发送完从机地址和读写位后,要等待从机的应答信号,此时就会释放 SDA 线。从机如果成功接收到数据,就会拉低 SDA 线发送应答信号,主机在 SCL 上升沿读取 SDA 线状态,判断是否接收到应答。这种释放 SDA 线的操作,是为了在 I2C 通信中实现主机和从机之间的双向数据传输。 拉低:指的是设备主动将sda线或scl线的电平设置为低电平 释放:的意思是设备将对sda或scl线的控制权放弃,一般是将对应的gpio引脚从输出模式换位输入模式
发送:主机在scl低电平期,主机将数据位依次放到sda线上(高位先行),然后释放scl,在这个释放期间也就是从低电平到高电平期间,从机读取数据位,所以scl高电平期间sda不允许有数据变化,依次循环八次,即可发送一个字节
主机接收:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
两者共同点都是在scl低电平期间允许改写sda数据线上的数据,都是scl由低电平转变为高电平期间也就是在上升沿的这一瞬间读取数据
都是用开漏输出
scl(时钟线)
sda(数据线)
数据通信
应答信号的发送规则 - 主机接收数据时发送ACK信号:当主机向从机发送读取数据的指令(在发送从机地址时,读写位设置为1)后,从机开始向主机发送数据。从机每发送完一个字节的数据,会等待主机的回应。此时,主机根据自身情况决定是否继续接收后续数据。若主机准备好接收下一个字节,就会在第9个时钟周期拉低SDA(串行数据线)线,向从机发送ACK信号,告知从机可以继续发送下一个字节的数据。 - 从机接收数据时发送ACK信号:当主机向从机发送数据(发送从机地址时,读写位设置为0),每发送完一个字节的数据后,主机释放SDA线,将其设置为输入模式。从机如果成功接收到该字节数据,会在第9个时钟周期拉低SDA线,向主机发送ACK信号,表明自己已成功接收数据,主机可继续发送后续字节。 都是接受方发送ACK信号,主机发送从机接受时主机要释放sda线
起始位(scl高电压时,向sda发送下降沿)
寻址(发送从机地址7位)
R(读)1
W(写)0
#低电压有效
寻址成功从机发送ACK(应答)
寻址失败从机发送NAk(不应答)
地址填错
从机正在忙
从机故障
数据通信
读
每写完一个字节主机发送一个ACK
写
每写完一个字节从机发送一个ACK
停止位
scl电点压的时候向sda发送一个上升沿
子主题
模式
标准
快速
可设置时钟信号和占空比
快速增强模式
高速模式
超快模式
编程接口