基于I2C硬件协议完成AHT20温湿度传感器的数据采集

一、什么是I2C硬件协议

1. I2C协议简介、

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

2. 工作原理、

SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路.在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

3. 特征、

I2C总线特点可以概括如下:
(1)在硬件上,I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为I2C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。
(2)I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。
(3)I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时间。
(4)连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。
(5)总线具有极低的电流消耗.抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。

4. 数据传输、

4.1 字节格式

发送到SDA 线上的每个字节必须为8
位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL
保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。

4.2 应答相应

数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA 线(高)。 在响应的时钟脉冲期间,接收器必须将SDA
线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。 I2C总线数据传输和应答 I2C总线数据传输和应答
通常被寻址的接收器在接收到的每个字节后,除了用CBUS
地址开头的数据,必须产生一个响应。当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。
如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。
如果传输中有主机接收器,它必须通过在从机发出的最后一个字节时产生一个响应,向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。

4.3 时钟同步

所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文。数据只在时钟的高电平周期有效,因此需要一个确定的时钟进行逐位仲裁。
时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL
线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL
线保持这种状态直到到达时钟的高电平。但是如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL 线的状态。因此SCL
线被有最长低电平周期的器件保持低电平。此时低电平周期短的器件会进入高电平的等待状态。
当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后,器件时钟和SCL线的状态没有差别,而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。
这样产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。

5. 模式、

5.1 标准模式

标准模式 I2C 总线规范在 80 年代的初期已经存在 它规定数据传输速率可高达 100kbit/s 而且 7 位寻 址这个概念在普及中迅速成长今天它已经作为一个标准被全世界接受 而PhilipsSemiconductors 和其他供应商提供了几百种不同的兼容 IC 为了符合更高速度的要求以及制造更多可使用的从机地址给数 量不断增长的新器件 标准模式 I2C总线规范不断升级 到今天它提供了以下的扩展
• 快速模式 位速率高达 400kbit/s 。
• 高速模式 Hs 模式 位速率高达3.4Mbit/s 。
• 10 位寻址允许使用高达 1024 个额外的从机地址。

扩展 I2C 总线规范主要有两个原因:
• 现在很多应用需要传输大量的串行数据 要求的位速率远远超过 100kbit/s 标准模式 或者甚400kbit/s 快速模式 半导体技术持续改进的结果使 I2C 总线器件现在可以使用高达3.4Mbit/s Hs 模式 的位速率而且接口电路的生产成本没有任何明显的提高。
• 由于使用 7 位寻址策略的大多数 112 地址能被立即分配很显然要求更多地址结合来防止为新器件分配从机地址的问题 这个问题可以用新的 10 位寻址策略解决 它允许可使用的地址成 10 倍增长。

带有快速或 Hs 模式 I2C 总线接口的新从机器件可以有 7 位或 10 位的从机地址 如果可能的话 首选7 位地址因为它是最便宜的硬件解决方案 而且报文长度最短 有 7 位和 10 位地址的器件可以的I2C 总线系统中混合使用 不需要考虑它F/S 模式还是 Hs 模式的系统 现有的和未来的主机都能产生 7位或10 位的地址。

5.2 快速模式

快速模式器件可以在400kbit/s 下接收和发送。最小要求是:它们可以和400kbit/s 传输同步,可以延长SCL信号的低电平周期来减慢传输。快速模式器件都向下兼容,可以和标准模式器件在0~100kbit/s 的I2C 总线系统通讯。但是,由于标准模式器件不向上兼容,所以不能在快速模式I2C 总线系统中工作。快速模式I2C 总线规范与标准模式相比有以下特征:
1、最大位速率增加到400kbit/s; 2、调整了串行数据(SDA) 和串行时钟(SCL )信号的时序;
3、快速模式器件的输入有抑制毛刺的功能,SDA 和SCL输入有施密特触发器; 4、快速模式器件的输出缓冲器对SDA 和SCL
信号的下降沿有斜率控制功能; 5、如果快速模式器件的电源电压被关断,SDA 和SCL 的I/O 管脚必须悬空,不能阻塞总线;
6、连接到总线的外部上拉器件必须调整以适应快速模式I2C 总线更短的最大允许上升时间。对于负载最大是200pF
的总线,每条总线的上拉器件可以是一个电阻,对于负载在200pF~400pF 之间的总线,上拉器件可以是一个电流源(最大值3mA
)或者是一个开关电阻电路。

5.3 Hs模式

高速模式 Hs 模式 器件对 I2C 总线的传输速度有具大的突破 Hs 模式器件可以在高达 3.4Mbit/s 的位速率下传输信息
而且保持完全向下兼容快速模式或标准模式 F/S 模式 器件 也就是说它们可以在一个速度混合的总线系统中双向通讯 Hs
模式传输除了不执行仲裁和时钟同步外 与 F/S 模式系统有相同的串行总线协议和数据格式 虽然 Hs 模式件是首选的器件
它们可以在大量的应用中使用 但是新器件有没有快速或 Hs 模式 I2C 总线接口由应用决定

5.3.1 高速传输

要获得位速率高达 3.4Mbit/s 的传输 对正常的 I2C 总线规范要作出以下的改进

  • Hs 模式主机器件有一个 SDAH 信号的开漏输出缓冲器和一个在 SCLH 输出的开漏极下拉和电流源上拉电路1 这个电流源电路缩短了 SCLH 信号的上升时间 任何时侯在 Hs 模式 只有一个主机的电流源有效。
  • 在多主机系统的 Hs 模式中 不执行仲裁和时钟同步 以加速位处理能力 仲裁过程一般在前面用 F/S 模式传输主机码后结束。
  • Hs 模式主机器件以高电平和低电平是 1:2 的比率产生一个串行时钟信号 解除了建立和保持时间的时序要求。
  • 还可以选择 Hs 模式器件有内建的电桥1 在 Hs 模式传输中 Hs 模式器件的高速数据 SDAH和高速串行时钟 SCLH 线通过这个电桥与 F/S 模式器的 SDA 和 SCL 线分隔开来 减轻了SDAH 和 SCLH 线的电容负载 使上升和下降时间更快。
  • Hs 模式从机器件与 F/S 从机器件的唯一差别是它们工作的速度 Hs 模式从机在SCLH 和 SDAH输出有开漏输出的缓冲器 SCLH 管脚可选的下拉晶体管可以用于拉长SCLH 信号的低电平但只允许在 Hs 模式传输的响应位后进行。
  • Hs 模式器件的输出可以抑制毛刺而且SDAH 和 SCLH 输出有一个 Schmitt 触发器。
  • Hs 模式器件的输出缓冲器对 SDAH 和 SCLH 信号的下降沿有斜率控制功能。

6.关于硬件I2C和软件I2C

6.1 硬件I2C

1). 所谓硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,其效率远高于软件I2C。 2).
硬件I2C一般也较为稳定,但是程序更繁琐,硬件I2C是直接调用寄存器的。

6.2软件I2C

软件I2C一般是使用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形,模拟I2C协议的时序。

二、完成AHT20温湿度数据采集

关于AHT20温湿度传感器不做多的介绍,百度上面都有
主要是源码和作品演示以及接线处理

1.实验准备

野火stm32开发板、AHT20温湿度传感器(已焊接好)、接线若干。
在这里插入图片描述

2.源码展示

源码套用的I2C硬件源码。

#include "stm32f10x.h"
#include "bsp_usart.h"
#include "delay.h"
#include "bsp_aht20.h"
#include "bsp_led.h"


int main(void)
{

	u32 CT_data[2]={0};
    volatile float  hum=0,temp=0;     
     
	USART_Config();			//USART1初始化
	LED_GPIO_Config();		//LED端口初始化
    delay_init();	    	//延时函数初始化	  
    temphum_init();         //初始化温湿度传感器
	
	while(1)
	{
        AHT20_Read_CTdata(CT_data);       //不经过CRC校验,直接读取AHT20的温度和湿度数据 

        hum = CT_data[0]*100*10/1024/1024;  //计算得到湿度值(放大了10倍)
        temp = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍)

        printf("湿度:%.1f%%\r\n",(hum/10));
        printf("温度:%.1f度\r\n",(temp/10));
        printf("\r\n");
        
        /*绿灯闪烁提示串口发送状态*/
        green_led_on;
        delay_ms(1000);
		green_led_off;
        delay_ms(1000);
	 }
}
3.效果演示

在这里插入图片描述
在这里插入图片描述

4.接线以及注意事项

AHT20有四根针脚,分别为SCL、SOA、GND、VCC
GND和VCC不做过多的解释
SCL是传输线对应开发板C6,SOA时钟线对应开发板C7(这些都是我做实验的接法,具体实验还得自己根据自己使用的工具找对应接线脚)。
如图所示
在这里插入图片描述

三、小结

学一项线路接法就得去研究接线针脚,有点麻烦。

四、资料

实验源码
提取码:3ibg

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值