UART
UART 简介
Universal Asynchronous Receiver Transmitter 即通用异步收发器,是一种通用的串行、异步通信总线该总线有两条数据线,可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信。
串口的时钟线不是同一条,有累计误差,不可以发送任意多的数据。
硬件连接
UART 控制器
一般情况下处理器中都会集成 UART 控制器,我们使用 UART 进行通信时候只需对其内部的相关寄存器进行设置即可
RS232 、RS485 协议原理及应用
不是单独的像 UART 协议和 IIC 协议单独的总线通信协议,RS232 、RS485 本身也是**串口协议(数据发送的格式)** ,只是电气层面的优化,可以实现一对多,但是是在编程意义上实现的。
帧格式和硬件连接和串口协议相同,只是在电气层面上做了一个标准化。
UART 存在的问题
电气接口不统一
- UART 只是对**信号的时序(先发什么后发什么)**进行了定义,而未定义接口的电气特性,(并没有规定高电平是多少 V,低电平是多少 V);
- UART 通信时一般直接使用处理器使用的电平,即 TTL 电平,但不同的处理器使用的电平存在差异(51 可能 3.3V 和 0V 和 stm32 可能是 5V 和 0V,损伤器件),所以不同的处理器使用 UART 通信时一般不能直接相连;
- UART 没有规定不同器件连接时连接器的标准(就像插头插座一样国家标准),所以不同器件之间通过 UART 通信时连接很不方便;
抗干扰能力差
UART 一般直接使用 TTL 信号来表示 0 和 1,但 TTL 信号的抗干扰能力较差,数据在传输过程中很容易出错
通信距离极短
因为 TTL 信号的抗干扰能力较差,所以其通信距离也很短,一般只能用于一个电路板上的两个不芯片之间的通信。
……
所以做项目一般很少使用串口直接通信。
RS232 协议
RS232 协议是在 1970 年由美国电子工业协会 (EIA) 联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通讯的标准:
该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定;
接口
该标准规定采用一个 25 引脚的 DB-25 连接器,标准中对连接器的每个引脚的信号内容加以规定) 还对各种信号的电平加以规定; 后来 IBM 的 PC 机将 RS232 简化成了 DB-9 连接器,后来成为事实标准; 现在工业控制的 RS-232 接口一般只使用 RXD、TXD、GND 三条线;
信号
该标准规定逻辑 “1” 的电平为 - 5v 到 - 15v,逻辑 “0” 的电平为 + 5v 到 + 15v,选用该电气标准的目的在于提高抗干扰能力,增大通信距离其传送距离一般可达 15m;
电平转换
虽然很多处理器中都会集成 UART 控制器,但处理器产生的信号一般都是 TTL 信号并不是符合 RS232 标准的信号,所以一般我们还需要在处理器外部去添加电路对信号的电平进行转换;
RS232 存在的问题
- 接口的信号电平值较高,易损坏接口电路的芯片,又因为与 TTL 电平不兼容,所以需要使用电平转换芯片才能与 TTL 电路连接
- 通信速度较低,高速场合用不了
- 易产生**共模干扰**,抗噪声干扰性弱
- 传输距离较短 (15m),虽然增强了信号强度
RS485 协议
该标准由电信行业协会和电子工业联盟定义: 使用该标准的通信网络能在远距离条件(可以到 1500m)下以及电子噪声大的环境下有效传输信号; 该标准允许连接多个收发器,即具有多站能力,这样可以利用单一的 RS485 接口方便地建立起一个设备网络。
串口和 RS232 只能是点对点通信。
信号
RS485 标准规定采用差分信号进行数据传输,两线间的电压差为 + 2v 到 + 6v 表示逻辑 “1”,两线间的电压差为 - 2v 到 - 6v 表示逻辑 “0”; 使用差分信号能有效地减少噪声信号的干扰,延长通信距离,RS485 的通信距离可以达到 1500m;RS485 接口信号的电平比 RS232 降低了,所以不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便地与 TTL 电路连接。
网线也是两根两根绞在一起的,双绞线。
接口
RS485 采用两线制,这种接线方式为**总线式拓扑结构**,在同一总线上可以同时存在多个节点。
因为采用两线制,数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用**半双工**的方式工作,编程时也需要加以处理。
电平转换
虽然很多处理器中都会集成 UART 控制器,但处理器产生的信号一般都是 TTL 信号并不是符合 RS485 标准的信号,所以一般我们还需要在处理器外部去添加电路将 TTL 信号转换成差分信号;
RS485 的优势
- 接口的信号电平值较低,不易损坏接口电路的芯片,且与 TTL 电平兼容,可方便地与 TTL 电路连接
- 通信速度快
- 抗噪声干扰性强
- 传输距离较远 (1500m)
- 可实现多节点组网
(注意编程时候注意发的时候不能收,收的时候不能发,还有就是一个主从机制)
IIC 总线协议
简介
IIC 总线是 Philips 公司在八十年代初推出的一种串行、半双工总线主要用于近距离、低速的芯片之间的通信: IIC 总线有两根双向的信号线: 一根数据线 SDA 用于收发数据,一根时钟线 SCL 用于通信双方时钟的同步.IIC 总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用.
IIC 总线是一种多主机总线,连接在 IIC 总线上的器件分为主机和从机, 主机有权发起和结束一次通信,而从机只能被主机呼叫: 当总线上有多个主机同时启用总线时,IIC 也具备冲突检测和仲裁的功能来防止错误产生; 每个连接到 IIC 总线上的器件都有一个唯一的地址 (7bit),且每个器件都可以作为主机也可以作为从机 (同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作: IIC 总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;
IIC 总线通信过程
- 主机发送起始信号启用总线
- 主机发送一个字节数据指明从机地址和后续字节的传送方向
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送应答信号回应发送器
… … (循环步骤 4、5)
n. 通信完成后主机发送停止信号释放总线
IIC 总线寻址方式
- IIC 总线上传送的数据是广义的,既包括地址,又包括真正的数据
- 主机在发送起始信号后必须先发送一个字节的数据,该数据的高 7 位为从机地址,最低位表示后续字节的传送方向,'0’表示主机发送数据,'1’表示主机接收数据: 总线上所有的从机接收到该字节数据后都将这 7 位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第 8 位将自己定为发送器或接收器
起始信号和停止信号
- SCL 为高电平时,!SDA 由高变低表示起始信号
- SCL 为高电平时,SDA 由低变高表示停止信号
- 起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态;停止信号产生后总线处于空闲状态
字节传送与应答
IIC 总线通信时每个字节为 8 位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送 1 位应答位来回应发送器, 即一帧共有 9 位
同步信号
IIC 总线在进行数据传送时,时钟线 SCL 为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线 SCL 为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定.
典型 IIC 时序
- 主机向从机发送数据
- 从机向主机发送数据
- 主机先向从机发送数据,然后从机再向主机发送数据
(这样不发送停止信号可以占据占据总线的优先权)
注: 阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送: A 表示应答,A 非表示非应答,S 表示起始信号,P 表示终止信号
MPU6050 原理
MPU6050
MPU6050 是一个运动处理传感器,其内部集成了 3 轴加速度传感器和 3 轴陀螺仪 (角速度传感器),以及一个可扩展数字运动处理器。
MPU6050 主要参数
- MPU6050 可测量 X、Y、Z 轴三个方向的角速度
- 可编程设置角速度测量范围为士 250、士 500、士 1000、土 2000°/sec
- 可测量 X、Y、Z 轴三个方向的加速度
- 可编程设置加速度测量范围为土 28、土 4g、土 8g、土 16g 可
- 编程设置低功耗模式
- 可编程设置采样频率、
MPU6050 通信接口
MPU6050 可以使用 110 总线和其他器件进行数据交互,我们可以使用 IIC 总线向 MPU6050 中的控制寄存器写入数据来设置. MPU6050 的工作参数也可以使用 IIC 总线从 MPU6050 中的数据寄存器读取数据来获取加速度、角速度等信息.
SPI 总线
SPI 简介
SPl(Serial Peripheral Interface) 是**串行外设接口的缩写,SPI 是一种高速的、全双工、同步的串行通信总线::SPI 采用主从方式工作,一般有一个主设备和一个或多个从设备; SPI 需要至少 4 根线,分别是 MIS0(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、0S(片选)SPI 使用引脚较少且布线方便**,所以越来越多的芯片集成了这种通信协议:
寻址方式
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号 (高电平或者低电平,根据从机而定) 表示选中该从设备。
通信过程
SPI 总线在进行数据传送时,先传送高位,后传送低位: 数据线为高电平表示逻辑’1’,低电平表示逻辑’0’,一个字节传送完成后无需应答即可开始下一个字节的传送: SPI 总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;
注意:SPI 总线没有开始信号和结束信号,没有应答信号 所以只管发 不管接收器能不能接收到。第八位发完之后直接进行下一个字节的发送即可。
极性和相位
SPI 总线有四种不同的工作模式,取决于极性 (CPOL) 和相位 (CPHL) 这两个因素
CPOL 表示 SCLK 空闲时的状态
CPOL=0,空闲时 SCLK 为低电平
CPOL=1,空闲时 SCLK 为高电平
CPHA 表示采样时刻
CPHA=0,每个周期的第一个时钟沿采样
CPHA=1,每个周期的第二个时钟沿采样
需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式: 我们在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则是无法进行通信的; 所以一般我们需要对主设备的 CPOL 和 CPHA 进行配置: (一般根据外围芯片的设定)
IIC 和 SPl 的异同
相同点
-
均采用串行、同步的方式
-
均采用 TTL 电平,传输距离和应用场景类似 一般不适用长距离的传输 (一般用于板子内部 芯片和摄像头这样几厘米的距离)
-
均采用主从方式工作
不同点
- IIC 为半双工,SPl 为全双工;
- IIC 有应答机制,SPI 无应答机制;
- IIC 通过向总线广播从机地址来寻址,SPl 通过向对应冲击发送使能信号来寻址 (IIC 节省引脚,节省硬件资源;SPI 节省时间,不需要地址和应答信号,但是每一个从机都有一个片选线,浪费硬件资源);
- IIC 的时钟极性和时钟相位固定,SPI 的时钟极性和相位可调.
参考资料
- 视频学习地址(创客学院):DAY5 SPI 总线_哔哩哔哩_bilibili