文 / 杜洋 洋桃电子
到洋桃电子全部文章:http://www.doyoung.net/YT/index.html
这篇文章PDF百度云下载:https://pan.baidu.com/s/1hsqyVZI
上一期我们介绍了单片机的内部重要功能,重要功能是可以让单片机高效完成工作任务。但是重要功能所能做的只是通过GPIO读取逻辑电平,用ADC采集模拟电压。所做的工作都是些采集、控制之类。可是随着单片机系统的功能越来越多,有一些功能的实现是通过专用的芯片和模块来完成的。如果芯片和模块与单片机之间需要交换的数据太多,那么通过GPIO端口简单的高低电平是不够用的。这时就需要在芯片和单片机之间做专门用于通信的接口,虽然通信接口也是输入输出逻辑电平,但是它们都按照一个固定的格式规范来通信。这种通信的格式规范叫“通信协议”,针对不同的场合和应用需要,很多行业协会或大公司都会做出自己的通信协议,每一种协议都会有自己的名字。比如飞利浦公司做出了“I2C总线协议”,英特尔公司联合多家同行发布了“USB接口协议”。这些公司不仅设计出通信协议,还会把它们用在自己生产的芯片上。比如飞利浦旗下的NXP公司生产的LM75温度传感器,就使用了自家的I2C总线做为通信接口。由于行业巨头的引领,很多芯片厂商都用各种通信协议来生产芯片,很多单片机公司(包括ST公司)都会把最常用的通信协议加入到单片机内部。单片机用户想外接芯片时就能很方便地完成通信的开发。单片机与电脑的通信,其本质也是用某种通信协议来完成的。
每一种通信功能都包括硬件和软件两个层面。在硬件上的是通信接口,即通信需要几条连接线,单片机与芯片之间怎样连接。在软件上的是协议规范,也就是以什么样的逻辑电平方式通信。比如发送高电平代表什么,连发3个高电平代表什么,只有收发双方使用相同的规范,通信都能进行。接下来我们只从硬件层面介绍各通信功能的特性和电路连接,待讲到编程开发的时候再讲协议规范的部分。各通信功能没有高低贵贱之分,它们是依不同的场合和应用而设计的,各有各的优势。本篇只要先了解它们即可,今后会着重学习它们的使用。本篇的最后还要讲CRC校验、芯片ID两个功能,它们与通信功能无关,只是顺便一讲。CRC校验和芯片ID比较少用,学习起来也非常简单。
【图1】数据手册第1页中的通信功能描述
【I2C总线】
I2C总线(读做“I方C”或“I2C”)是飞利浦公司发布了一款通信总线标准。所谓总线是指在一线数据线上同时并联多个设备,设备是指连接在通信线上的芯片或模块。在I2C总线上的设备分为主设备和从设备,每一组I2C总线上只能有1个主设备,主设备是主导通信的,它能主动读取各从设备上的数据。而从设备只能等待主设备对自己读写,如果主设备无操作,从设备自已不能操作总线。I2C总线理论上可挂接几百个从设备,每个从设备都有一个固定的7位或10位从设备地址,相当于身份证号码。主机想读写哪个从设备就向所有从设备发送一个从设备地址,只有号码一致的从设备才会回应主设备。
如【图2】所示,STM32单片机在I2C总线上是主设备,3个I2C设备即是从设备。I2C总线由SCL和SDA两条数据线构成,SCL是总线的时钟线,用于主设备与从设备之间的计数同步。S