前言
本次总结主要是SCI通信的相关内容。具体如下:
1、通信波特率的设置;
2、SCI通信时序:数据格式,信号的接收与发送时序;
3、SCI接收、发送的相关原理,包括查询和中断,FIFO等;
4、如何设计通信协议:MCU–上位机,MCU–MCU。
基础知识
SCI:串行通信接口,串行通信技术的一种总称;
UART:通用异步收发器,串行通信的一种协议;
RS232:串行通信的一种物理接口电气标准。
1、串行通信:同步通信和异步通信
- 同步通信:发送、接收端共用一个时钟用来同步,如I2C、SPI;
- 异步通信:时钟独立,使用同一标称频率(波特率)。如SCI(UART)。
2、传输方式:单工、半双工、全双工
- 单工:单向传输,只需一根数据线;
- 半双工:双向传输,任一时刻只能发送或者接收,不能同时进行;
- 全双工:双向传输,可同时收发数据。
3、DSP中的SCI接口可以看做UART,输出电平为TTL,一般和RS232接口连接,RS232电平不同于TTL,需要进行电平转换,常用芯片如MAX232。
232电平:逻辑1:-3~15V;逻辑0:3 ~15V
标准TTL:逻辑1:2~5V;逻辑0:0 ~0.8V
1、时钟
1.1 时钟使能
时钟使能为外设时钟控制寄存器PCLKCR0的第10位(SCIA)或第11(位SCIB)或第5位(SCIC)。
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A
SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-B
SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1; // SCI-C
1.2波特率
由F28335学习之时钟的2.1和图4-15可知,SCI的时钟由LSPCLK和波特率选择寄存器决定,波特率选择寄存器为16位。波特率的设置分两种情况:
- BRR = 0,波特率 = LSPCLK / ((BRR + 1)*8)
- BRR在1-65535之间,波特率 = LSPCLK / 16
2、SCI数据通信
2.1数据格式
典型数据帧格式如图Figure1-3所示:
- 1位起始位
- 1-8位数据位(LSB低位先行)
- 1个奇/偶校验位
- 1位或2位停止位
所谓低位先行就是一个数据的地位在前 ,如0xAA,数据位则为:0101 0101
在这里说一下奇偶校验,奇偶校验检查称为垂直冗余检查,具体指在每个发送字符中增加一个额外为使字符中的“1”的数目是奇数或偶数。
奇校验:字符数据位中“1”的数目是偶数,校验位应为“1”,使数目为偶数;反之为“0”,如:1100 0011,数目为偶数,校验位则为1,即1100 0011 1;
偶校验:字符数据位中“1”的数目是偶数,校验位应为“0”,使数目为偶数;反之为“1”,如:1100 0011,数目为偶数,校验位则为1,即1100 0011 0。
2.2 SCI数据流
由图4-15可知发送和接收数据流。
- 一个发送器(TX)的相关寄存器:发送数据缓冲寄存器(SCITXBUF)和发送移位寄存器(TXSHF)
数据流向为:发送数据–>SCITXBUF–>TXSHF—>SCITXD发送出去; - 一个接收器(RX)的相关寄存器:接收数据缓冲寄存器(SCIRXBUF)和发送移位寄存器(RXSHF)
数据流向为:接收数据—>SCIRXD–>RXSHF–>SCITXBUF存取缓冲器;
接收数据直接通过接收数据缓冲器给变量即可。
以上的数据流都是在非FIFO模式下的,FIFO模式简单来说是设置了一个缓冲机制,设置一个数据的缓冲深度,当发送或接受数据存到设置的深度时,再进行发送或接收。具体流向见图4-15。
2.3、信号接收时序
信号接收时序如Figure1-8所示,具体时序为:
- 1-RXENA使能,接收数据;
- 2- 数据到SCIRXD,检测起始位;
- 3-数据从移位寄存器RXSHF到缓冲寄存器SCIRXBUF,产生中断申请,RXRDY变高(1),已接收到一个新字符;
- 4-程序读缓冲寄存器,RXRDY=0;
- 5-下一次字节到达SCIRXD,检测启动位,清除;
- 6-RXENA变为低(0);
- 继续想移位寄存器转载数据,但不移入缓冲寄存器。
以上是中断接收,我们一般都是用中断接收,中断直接获取缓冲寄存器的中的数据即可;而查询接收则是通过查询RXRDY标志位来进行接收,为高则接收到新字符,读之后为0.
2.4 信号的发送时序
- 1-TXENA使能,发送数据,初始时缓冲寄存器SCITXBUF为空,TXRDY为高(1),TX EMPTY为高(1);
- 2-写数据到缓缓冲寄存器,不为空,TXRDY为低(0),EMPTY为低(0);
- 发送数据到移位寄存器TXSHF,缓冲寄存器为空,准备传送第二个字符到缓冲寄存器,3-TXRDY为高(1),中断请求;
- 3-TXRDY为高(1)时,程序写第二个字符到缓冲寄存器,这时SCITXD开始发送第一个字符;写入缓冲寄存器后,4-TXRDY为低(0);
- 发送完第一个字符,开始将第二个字符移入移位寄存器,移完5-TXRDY为高(1),开始发送第二个字符;
- 6-TXENA位变低,禁止发送数据,,结束当前字符的发送;
- 7-第二个字符发送完成,缓冲寄存器为空,准备发送下一个字符。
以上为中断发送,一般我们发送可以直接赋值给缓冲寄存器SCITXBUF即可。
3 通信协议
一般使用SCI通信(RS232通信)可以是MCU–上位机,MCU–MCU等,这里主要说这两种,其实方法都一致。
1、如果传输的数据量不大的话,直接传输即可,也不需要进行精心的设计,规定好先后顺序即可,然后发送和接收都按照顺序进行即可;
2、如果传输的数据量的大的话,同时是全双工进行的话,这时候就需要进行设计相关的传输准则了。如:
- 确定传输的对象;
- 确定双方的通信地址;
- 确定传输数据的命令,不同命令对应传输不同的数据;
- 确定校验的方法,每次指令传输的数据都进行校验,验证传输的和接收的是否一致,不一致则重新接收;
- 全部确定以后,即可按照地址、传输指令和校验方法编写程序进行验证。
总结
此次的重点在于波特率的设置以及数据传输的时序,至于通信协议只是写了最基本的思路,需要根据具体的实际情况进行编写相关的通信标准,然后设计程序。