菜鸟课程实验,谨慎参考
任务要求
1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C–读写EEPROM”原理章节)。
2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)。
一、I2C
1.软件I2C
将芯片的两个GPIO引脚分别用作SCL及SDA,按照I2C的时序要求,直接控制引脚的输出信号(若是接收数据时则读取 SDA 电平),就可以实现I2C通讯。由于是直接控制GPIO引脚的高低电平产生通讯时序,需要由CPU控制每个时刻的引脚状态,所以称为“软件模拟协议”方式即软件I2C方式。
2.硬件I2C
硬件I2C对应芯片上的I2C外设,具有相应的I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C,但是程序较为繁琐。硬件I2C是直接调用内部寄存器进行配置。
对于硬件I2C来说,它需要I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生I2C的通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作负担,并且使软件开发更简单。
3.软硬I2C的比较
(1)通信速度
相对来说,即使两者的通信速率设置成相等时,硬件I2C的通信速度要比软件I2C的速度要快。因为硬件I2C是通过片上外设实现的通信,CPU只需要去读写寄存器数据就可以进行I2C通信,程序较为简单并且占用的资源少。而软件I2C则需要程序模拟I2C时序,程序较为复杂且占用资源较多。
(2)可移植性
对于硬件I2C来说,由于芯片I2C外设的IO口已经确定,无法随意更改其他IO口,因而可移植性较差;但是由于软件I2C是通过IO口模拟I2C通信时序实现的通信,因而可移植性比较好,在任何单片机上都可以使用,只需要修改一下通信时间以及配置好IO口就可以实现I2C通信。
(3)稳定性
一般来说,软件模拟I2C稳定性要比硬件I2C更加稳定,硬件I2C不稳定,容易卡死,想要写得稳定程序就非常复杂;但是软件I2C可能会因为中断的影响造成数据读取不准确。
二、温湿度数据采集
1.主要代码
#include "led.h"
#