一文解读SCI通信的相关内容

电子说

1.3w人已加入

描述

前言

本次总结主要是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波特率

SCI的时钟由LSPCLK和波特率选择寄存器决定,波特率选择寄存器为16位。波特率的设置分两种情况:

  1. BRR = 0,波特率 = LSPCLK / ((BRR + 1)*8)
  2. BRR在1-65535之间,波特率 = LSPCLK / 16

串行通信

2、SCI数据通信

2.1 数据格式

典型数据帧格式如图Figure1-3所示:

  1. 1位起始位
  2. 1-8位数据位(LSB低位先行)
  3. 1个奇/偶校验位
  4. 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可知发送和接收数据流。

  1. 一个发送器(TX)的相关寄存器:发送数据缓冲寄存器(SCITXBUF)和发送移位寄存器(TXSHF)
    数据流向为:发送数据–>SCITXBUF–>TXSHF—>SCITXD发送出去;
  2. 一个接收器(RX)的相关寄存器:接收数据缓冲寄存器(SCIRXBUF)和发送移位寄存器(RXSHF)
    数据流向为:接收数据—>SCIRXD–>RXSHF–>SCITXBUF存取缓冲器;
    接收数据直接通过接收数据缓冲器给变量即可。

以上的数据流都是在非FIFO模式下的,FIFO模式简单来说是设置了一个缓冲机制,设置一个数据的缓冲深度,当发送或接受数据存到设置的深度时,再进行发送或接收。具体流向见图4-15。

2.3、信号接收时序

信号接收时序如Figure1-8所示,具体时序为:

  1. 1-RXENA使能,接收数据;
  2. 2- 数据到SCIRXD,检测起始位;
  3. 3-数据从移位寄存器RXSHF到缓冲寄存器SCIRXBUF,产生中断申请,RXRDY变高(1),已接收到一个新字符;
  4. 4-程序读缓冲寄存器,RXRDY=0;
  5. 5-下一次字节到达SCIRXD,检测启动位,清除;
  6. 6-RXENA变为低(0);
  7. 继续想移位寄存器转载数据,但不移入缓冲寄存器。

以上是中断接收,我们一般都是用中断接收,中断直接获取缓冲寄存器的中的数据即可;而查询接收则是通过查询RXRDY标志位来进行接收,为高则接收到新字符,读之后为0.

串行通信

2.4 信号的发送时序

  1. 1-TXENA使能,发送数据,初始时缓冲寄存器SCITXBUF为空,TXRDY为高(1),TX EMPTY为高(1);
  2. 2-写数据到缓缓冲寄存器,不为空,TXRDY为低(0),EMPTY为低(0);
  3. 发送数据到移位寄存器TXSHF,缓冲寄存器为空,准备传送第二个字符到缓冲寄存器,3-TXRDY为高(1),中断请求;
  4. 3-TXRDY为高(1)时,程序写第二个字符到缓冲寄存器,这时SCITXD开始发送第一个字符;写入缓冲寄存器后,4-TXRDY为低(0);
  5. 发送完第一个字符,开始将第二个字符移入移位寄存器,移完5-TXRDY为高(1),开始发送第二个字符;
  6. 6-TXENA位变低,禁止发送数据,,结束当前字符的发送;
  7. 7-第二个字符发送完成,缓冲寄存器为空,准备发送下一个字符。

以上为中断发送,一般我们发送可以直接赋值给缓冲寄存器SCITXBUF即可。

串行通信

3 通信协议

一般使用SCI通信(RS232通信)可以是MCU–上位机,MCU–MCU等,这里主要说这两种,其实方法都一致。
1、如果传输的数据量不大的话,直接传输即可,也不需要进行精心的设计,规定好先后顺序即可,然后发送和接收都按照顺序进行即可;
2、如果传输的数据量的大的话,同时是全双工进行的话,这时候就需要进行设计相关的传输准则了。如:

  1. 确定传输的对象;
  2. 确定双方的通信地址;
  3. 确定传输数据的命令,不同命令对应传输不同的数据;
  4. 确定校验的方法,每次指令传输的数据都进行校验,验证传输的和接收的是否一致,不一致则重新接收;
  5. 全部确定以后,即可按照地址、传输指令和校验方法编写程序进行验证。

总结

此次的重点在于波特率的设置以及数据传输的时序,至于通信协议只是写了最基本的思路,需要根据具体的实际情况进行编写相关的通信标准,然后设计程序。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分