基于I2C的AHT20温湿度传感器数据采集
一、I²C总线通信
I²C(Inter-Integrated Circuit):集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司于1980年代提出,为了让主板、嵌入式系统或手机用以连接低速周边外部设备而发展。
在CPU与被控I²C之间、I²C与I²C之间进行双向传送,高速IC总线一般可400kbps以上。 I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。其中,起始信号是必需的,结束信号和应答信号都可以不要。
I²C 总线的一些特征:
• 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL
• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地
址 主机可以作为主机发送器或主机接收器
• 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁
防止数据被破坏
• 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速
模式下可达 3.4Mbit/s
• 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整
• 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
1、起始位和结束位:I²C总线通讯由起始位开始通讯,由结束位停止通讯,并释放I2C总线。
起始位(S):在SCL为高电平时,SDA由高电平变为低电平
结束位(P):在SCL为高电平时,SDA由低电平变为高电平
————————————————————————————————
2、数据格式与应答:I²C数据以字节(即8bits)为单位传输,每个字节传输完后都会有一个ACK应答信号。应答信号的时钟是由主设备产生的。
应答(ACK):拉低SDA线,并在SCL为高电平期间保持SDA线为低电平
非应答(NOACK):不要拉低SDA线(此时SDA线为高电平),并在SCL为高电平期间保持SDA线为高电平。
在传输期间,如果从设备来不及处理主设备发送的数据,从设备会保持SCL线为低电平,强迫主设备等待从设备释放SCL线,直到从设备处理完后,释放SCL线,接着进行数据传输。
————————————————————————————————
3、数据传输通讯:开始数据传输后,先发送一个起始位(S),主设备发送一个地址数据(由7bit的从设备地址,和最低位的读/写标志位组成的8bit字节数据,该读写标志位决定数据的传输方向),然后,主设备释放SDA线,并等待从设备的应答信号(ACK)。每一个字节数据的传输都要跟一个应答信号位。数据传输以停止位(P)结束,并且释放I2C总线。
主设备可以不发送停止位(P),重复发送一个起始位(Sr)。
二、“软件I²C”和“硬件I²C”
I²C 总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。
I²C 总线传输数据时只需两根信号线。
一根是双向数据线 SDA,另一根是双向时钟线 SCL。
I²C 总线可以通过芯片上板载的I²C 外设实现,
也可以通过 GPIO 引脚模拟I²C 总线协议来实现。
1、硬件 I²C
对应芯片上的I²C 外设,由相应的 I2C 控制器和驱动电路组成,其所使用的引脚也是专用的。它直接调用内部寄存器进行配置。
2、软件 I²C
使用普通的 GPIO 引脚,用软件控制 GPIO 管脚状态来模拟 I2C 通信波形。所以软件 I2C 不受管脚限制,接口也比较灵活。
硬件 I²C 的效率>>于软件,