文章目录[隐藏]
1、I2C
I2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接
2、硬件连接
I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向开漏线,配合上拉电阻进行连接,上拉电阻阻值大小有最大值和最小值的限制。
3、硬件拉低(Open-Drain Pulling Low)
下图代表了总线电平拉低过程,当总线要传输低电平0时,Logic会控制FET使其导通VBUS总线连接到地,将总线拉低,注意在快速模式下最大的灌电流不超过3mA,这限制了上拉电阻的最小值。
4、硬件拉高(Open-Drain Releasing Bus)
下图代表了总线电平高电平过程,当总线要传输高电平1时,Logic会控制FET使其关断VBUS总线上拉到电源,将总线拉高。
5、软件通讯协议
I2C是串行传输总线,按照下面格式进行一位一位传输
6、总线速度
双向传输总线:
- 标准模式(Standard-mode):速率高达100kbit/s
- 快速模式(Fast-mode):速率高达400kbit/s
- 快速模式+(Fast-mode Plus):速率高达1Mbit/s。
- 高速模式(High-speed mode):速率高达3.4Mbit/s
单向传输总线:
- 超快速模式(Ultra Fast-mode):速率高达5Mbit/s
7、起始和停止条件及重复起始条件
起始和终止条件都是由主机(master)发起产生。总线在起始条件之后处于忙碌状态,在停止条件之后又处于空闲状态。
- 起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。
- 停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。
- 重复起始条件:和起始条件相似,重复起始条件发生在停止条件之前。主机想继续给从机发送消息时,一个字节传输完成后可以发送重复起始条件,而不是产生停止条件。
8、字节格式
SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。
9、响应ACK和非响应NACK
每个字节传输必须带响应位,相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。以上图传输101010101为例,SCL第9位时钟高电平信号期间,SDA拉低其代表了有ACK响应位。
当在SCL第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生STOP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:
- 接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机
- 由于接收机正在忙碌处理实时程序导致接无法接收或者发送
- 传输过程中,接收机识别不了发送机的数据或命令
- 接收机无法接收
- 主机接收完成读取数据后,要发送NACK结束告知从机
10、7-bit地址格式和读写位
一个7-bit的地址是从最高位(MSB)开始发送的,这个地址后面会紧跟1-bit(R/W)的操作符,1表示读操作,0表示写操作。接下来的一个bit是NACK/ACK,当这个帧中前面8 bit发送完后,接收端的设备获得SDA控制权,此时接收设备应该在第9个时钟脉冲之前回复一个ACK(将SDA拉低)以表示接收正常,如果接收设备没有将SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由master来决定如何处理(stop或repeated start condition)。
版权声明:本文为CSDN博主「会写bug的程序猿_goon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chbgoon/article/details/122846555
1、I2C
I2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接。
2、硬件连接
I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向开漏线,配合上拉电阻进行连接,上拉电阻阻值大小有最大值和最小值的限制。
3、硬件拉低(Open-Drain Pulling Low)
下图代表了总线电平拉低过程,当总线要传输低电平0时,Logic会控制FET使其导通VBUS总线连接到地,将总线拉低,注意在快速模式下最大的灌电流不超过3mA,这限制了上拉电阻的最小值。
4、硬件拉高(Open-Drain Releasing Bus)
下图代表了总线电平高电平过程,当总线要传输高电平1时,Logic会控制FET使其关断VBUS总线上拉到电源,将总线拉高。
5、软件通讯协议
I2C是串行传输总线,按照下面格式进行一位一位传输,协议传输如下:
6、总线速度
双向传输总线:
- 标准模式(Standard-mode):速率高达100kbit/s
- 快速模式(Fast-mode):速率高达400kbit/s
- 快速模式+(Fast-mode Plus):速率高达1Mbit/s。
- 高速模式(High-speed mode):速率高达3.4Mbit/s
单向传输总线:
- 超快速模式(Ultra Fast-mode):速率高达5Mbit/s
7、起始和停止条件及重复起始条件
起始和终止条件都是由主机(master)发起产生。总线在起始条件之后处于忙碌状态,在停止条件之后又处于空闲状态。
- 起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。
- 停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。
- 重复起始条件:和起始条件相似,重复起始条件发生在停止条件之前。主机想继续给从机发送消息时,一个字节传输完成后可以发送重复起始条件,而不是产生停止条件。
8、字节格式
SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。
9、响应ACK和非响应NACK
每个字节传输必须带响应位,相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。以上图传输101010101为例,SCL第9位时钟高电平信号期间,SDA拉低其代表了有ACK响应位。
当在SCL第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生STOP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:
- 接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机
- 由于接收机正在忙碌处理实时程序导致接无法接收或者发送
- 传输过程中,接收机识别不了发送机的数据或命令
- 接收机无法接收
- 主机接收完成读取数据后,要发送NACK结束告知从机
10、7-bit地址格式和读写位
一个7-bit的地址是从最高位(MSB)开始发送的,这个地址后面会紧跟1-bit(R/W)的操作符,1表示读操作,0表示写操作。接下来的一个bit是NACK/ACK,当这个帧中前面8 bit发送完后,接收端的设备获得SDA控制权,此时接收设备应该在第9个时钟脉冲之前回复一个ACK(将SDA拉低)以表示接收正常,如果接收设备没有将SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由master来决定如何处理(stop或repeated start condition)。
版权声明:本文为CSDN博主「会写bug的程序猿_goon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chbgoon/article/details/122846555
暂无评论