UART串行通信协议

首先个人理解的一个概念:
SCI意为串行通信接口,是串行通信技术的总称;UART是通用异步收发器,是串行通信的协议之一。
所以可以理解为UART是一种具体的SCI实现。

1、UART原理

发送端的CPU将并行数据写入UART,UART按照一定格式在一根电线上串行发出;接收方检测到UART另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取缓冲区获得这些数据。UART的连线方法一般有3根电线:TxD用于发送数据,RxD用于接收数据,Gnd用于给双发提供参考电平,如下所示:
UART串行通信协议

2、UART数据的传输格式

Tx、Rx数据线以bit为最小单位传输数据。一个完整的数据帧包含开始位、数据位、校验位(需要的话)和停止位。发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用校验位、是奇校验还是偶校验、有多少个停止位)。
UART串行通信协议
空闲位:无数据时数据线处于空闲状态(高电平);
起始位:开始发送数据时,UART将数据线拉低维持1bit的时间,表明数据开始;
数据位:可以占用4、5、6、7或者8个bit,每一个bit可取值为0或1;
校验位:可选,根据实际配置来决定是否需要。若确定了需要校验功能,数据传输中增加1bit的校验位,包括奇校验和偶校验两种方式;
停止位:表明一个字符数据的结束,可以占据1bit、1.5bit或者2bit,根据实际配置来确定。
实际数据传输时,还要考虑到传输方向的问题,包括MSB和LSB两种,协议中定义的是LSB。如传输字母A,MSB的传输方向就是01000001,LSB的传输方向就是10000010。

3、相关寄存器设置(MC9S12G96)

1)波特率
波特率的设置与寄存器SCIBD相关,SCIBD包括2byte,
UART串行通信协议
波特率的计算公式:
IREN = 0,baud = SCI BusClock/(16 * SBR[12:0]);
IREN = 1,baud = SCI BusClock/(32 * SBR[12:1]);
举例:
UART串行通信协议
如上图所示配置Clock,SCI BusClock为24Mhz,如果SCIBD取值为0x9C,那么baud=24M/(160x9C)=24000000/(16156)=9615.384,故此时的波特率为9615.384bit/s。
2)其他配置
UART的配置如下:
UART串行通信协议
如上图所示,各个模块的配置意义如下:
Interrupt service/event:Rx/Tx缓冲区的大小;
Settings:设置UART的传输格式,如是否需要校验位,数据位的位数(宽度),停止位占几个bit;
SCI Output Mode:不理解
Receiver/Transmitter:对应芯片的pin脚;
Baudrate:波特率设置;
Stop in wait mode:不理解;
Idle line mode:不理解;
SCI Transmit 3/16 narrow pules:知道对应波特率设置那个寄存器,但含义不明;