如图,了解了起止条件后,我们来看看这个过程中数据传输是如何进行的。4.参考资料用于通过接口实现温湿度采集的软硬件差异。
Stm32通过I2C接口采集温湿度(AHT20)。一、I2C总线协议详解。(一)I2C总线的物理拓扑。㈡I2C总线协议。(III)硬件I2C和模拟I2C1。硬件I2C2。模拟I2C3。区别二。AHT20采集程序的实现。(一)了解AHT20芯片的相关信息。(二)具体的代码添加过程。㈢主要
一、I2C总线协议详解(一)I2C总线的物理拓扑I2C总线的物理连接非常简单,分别由SDA(串行数据线)、SCL(串行时钟线)和上拉电阻组成。通信的原理是控制SCL和SDA线的高低电平产生I2C总线协议所需的信号进行数据传输。总线空闲时,这两根线一般由上面连接的上拉电阻上拉,保持高电平。
(二)I2C总线协议I2C协议规定,总线上的数据传输必须以开始信号开始,以结束信号结束。起始和结束信号总是由主器件产生。当总线空闲时,SCL和SDA都保持高电平。当SCL为高电平,SDA由高到低跳变时,表示产生了初始条件。当SCL为高电平且SDA从低电平跳到高电平时,产生停止条件。初始条件产生后,总线处于繁忙状态,被本次数据传输的主从设备独占,其他I2C设备无法访问总线;产生停止条件后,该数据传输的主设备和从设备将释放总线,总线将再次空闲。如图:了解了起止条件后,我们来看看这个过程中数据传输是如何进行的。数据传输以字节为单位。当主机在SCL线上产生每个时钟脉冲时,它将在SDA线上发送一个数据位。当一个字节按从高位到低位的顺序发送时,从机将拉低SDA线,并将其与应答位一起发送回主机。这时,就认为一个字节真正被传输了。当然,并不是所有的字节传输都必须有一个响应位。例如,当从设备无法再接收主设备发送的数据时,从设备将返回一个否定响应位。数据传输的过程如图所示:I2C总线上的每个设备都对应一个唯一的地址,主从设备之间的数据传输都是基于地址的,即主设备必须指定从设备的地址才能传输有效数据。地址指定的过程和上面的数据传输过程一样,只是大部分从设备都是7位地址,然后协议规定地址加最低位表示下一个数据传输方向,0表示主设备向从设备写数据。如图所示:
(3)硬件I2C和模拟I2C 1。硬件I2C所谓的硬件I2C,对应的是芯片上的I2C外设,有对应的I2C驱动电路,其使用的I2C管脚也是专用的;软件I2C一般使用GPIO引脚,通过软件控制引脚的状态来模拟I2C通信波形。
2.模拟I2C模拟I2C通过GPIO模拟寄存器的工作模式,而硬件(固件)I2C通过直接调用内部寄存器进行配置。如果想看具体的硬件,可以看芯片说明书。因为固件I2C的端口是固定的,所以会有所不同。
3.区分硬件I2C的效率远高于软件I2C,而软件I2C由于不受管脚限制,接口灵活。可以看看底层配置,比如IO口配置。如果配置了IO口功能(IIC功能),就是固件IIC;否则就是模拟。看看里面有没有调用现成函数或者给寄存器赋值的木头。如果有,那一定是固件IIC函数。如果没有,那就必须一点一点地模拟数据。如果有循环,那就是模拟。从代码量来看,模拟代码量肯定大于固件。(1)硬件IIC的用法比较复杂,模拟IIC的过程比较清晰。
(2)硬件IIC比模拟快,可以用DMA
(3)模拟IIC可以在任何管脚上,而硬件只能在一个固定管脚上。
软件i2c是程序员用程序控制SCL和SDA线的输出来模拟i2c协议的时序。一般比硬件i2c稳定,但程序复杂但不难。
硬件编程器只需要调用i2c控制函数,而不是直接控制SCL和SDA的输出。但部分单片机的硬件i2c不稳定,调试问题较多。
二。AHT20采集程序的实现(一)关于AHT20芯片的信息,请到官网下载相应的产品介绍文档。信息链接如下:http://www.aosong.com/class-36.html.
(二)具体代码添加过程在Wildfire提供的示例代码中,打开一个只包含固件库的空项目。向项目中添加相关代码。详情请参考以下链接:https://blog.csdn.net/hhhh277523/article/details/11397514.
(三)主要代码分析1。1的使用过程。AHT20芯片
void read _ aht 20 _ once(void){ delay _ ms(10);reset _ aht 20();//复位AHT20芯片的delay _ ms(10);init _ aht 20();//初始化AHT20芯片的delay _ ms(10);start measure _ aht 20();//开始测试AHT20芯片delay _ ms(80);read _ aht 20();//读取AHT20采集的数据delay _ ms(5);} 2.AHT20芯片读取数据
void read _ aht 20(void){ uint 8 _ t I;for(I = 0;我
评论前必须登录!
注册