结合DSP的SCI章节,详细讲解SCI通信原理。

参考资料:

TMS320F28xx 技术参考手册:Serial Communications Interface (SCI)

SCI模块总览

说明:

  • SCI模块有两路时钟输入(图中红色箭头)。一路是工作时钟(SYSCLK),另一路是位时钟,用于产生波特率时钟。位时钟来源于系统低速外设时钟(LSPCLK),并由外设时钟控制寄存器控制(PCLKCR7)。工作时钟频率比位时钟要高得多,要不然怎么能够对每一个bit通信位进行多次检测呢? (有些单片机里为了滤波,对接收到的数据位进行3次检测,以2次或以上的检测结果决定最终是高电平还是低电平)
  • SCI模块对外只有一对管脚接口,即RXD和TXD
  • SCI模块有两个中断信号送至PIE模块:接收中断RXINT和发送中断TXINT

SCI模块架构

分为以下几个部分。

波特率发生器

相关寄存器:PCLKCR7、SCIHBAUD、SCILBAUD。

功能:低速外设时钟LSPCLK通过BAUD寄存器的配置,产生合适的波特率。分别送给接收模块和发送模块。

帧格式

用于确定通信帧的格式:是否校验。如果是,是奇校验还是偶校验。

注:这里的“帧Frame”指的是一个字节完整的接收(或者发送)的过程,包括:起始位、数据位、地址位、校验位、停止位。

串行发送

说明:

  • 最上面的TXSHF是串行移位器,即把一个字节的N个位通过移位的方式,把它从TXD上发送发去。
  • 发送数据是由发送使能(TXENA = SCICTL1.1)决定的
  • 要发送的数据先写入到SCITXBUF中
  • FIFO使能位SCIFFENA决定TXBUF中的数据是直接写入TXSHF还是先保存到FIFO中
  • 发送中断源有3个:
  1. TXEMPTY:所有数据都已经移位输出,TXSHF为空
  2. TXRDY:TXBUF为空,可以往里面放数据。由发送中断使能位TXINTENA控制。
  3. 发送FIFO中断:由FFTX寄存器中的TXFFIENA和TXFFIL控制。TXFFIENA是中断使能,TXFFIL是中断级别。当TXFIFO中的数据数量小于或者等于TXFFIL的值时产生中断,表示现在TXFIFO有空余,可以继续往里面写数据了。

串行接收

说明:

自动波特率检测

接收使能

控制是否从RXD管脚上接收数据,并送入到RXBUF。

接收FIFO

也是由FFENA使能位控制。不使能时,收到的数据直接送给RXBUF;使能后,先送到FIFO中缓存。

错误检测和中断逻辑

检测以下错误和状态:

  • 帧错误FE:未检测到停止位
  • OVERRUN错误OE:RXFIFO已满又接收到数据。此时,RXBUF中的数据被覆盖。
  • 校验错误PE:校验位不对
  • 检测到break信号。

关于串口通信中的break信号:

uart协议中有break 规定:
A Break character is interpreted on receiving “0”s for a frame period. At the end of the
break frame the transmitter inserts either 1 or 2 stop bits (logic “1” bit) to acknowledge the
start bit.

串口有一个 break 信号:正常情况下,安静的 UART 信号应该是高电平;如果连续低电平超过一个字符长度,这就叫做一个 break 信号。

接收中断源有以下4个:

  1. 收到数据RXRDY:表示RXBUF中已经有数据了
  2. 接收错误中断RXERROR:上述3种错误以及break状态,“或”的结果送给RXERROR,再经过使能位RXERRINTENA送给中断逻辑;
  3. 接收FIFO中断:当RXFIFO中的数据大于或者等于RXFFIL的数值时,表示已经收到部分数据,可以通知CPU去读取。
  4. 接收FIFO溢出RXFFOVF。

发送唤醒

多机通信时用到。

数据帧格式

有两种典型的数据帧:

  • 空闲线模式:以通信线上一段时间的空闲为标志,区分不同的数据块。
  • 地址位模式:数据帧中多了一个位:数据/地址位。0代表是数据字节,1表示是寻址字节。

其他的都相同:一个完整的数据帧包括1个起始位,N个数据位(最低有效位在前,最高有效位在后),0个或者1个校验位,1个停止位。

平时没有数据通信的时候,通信线为高电平(逻辑1),起始位为低电平,停止位为高电平。

多机通信

寻址字节

多机通信中,第1个字节为寻址字节。只有被寻址的设备才需要继续接收余下的数据字节。未被寻址的设备不需要被余下的数据所打断,直到下一个寻址字节。

Sleep位

串行链路上的所有处理器都将 SCI SLEEP 位(SCICTL1 的第 2 位)设置为 1,以便仅在检测到地址字节时才中断它们。 当处理器读取与应用软件设置的 CPU 设备地址相对应的块地址时,程序必须清除 SLEEP 位以启用 SCI 以在接收到每个数据字节时产生中断。

虽然接收器在 SLEEP 位为 1 时仍然工作,但它不会将 RXRDY、RXINT 或任何接收器错误状态位设置为 1,除非检测到地址字节并且接收帧中的地址位为 1(适用于地址 -位模式)。 SCI 不会改变 SLEEP 位; 需要软件更改它。

控制RX和TX

多处理器模式可通过 ADDR/IDLE MODE 位(SCICCR,位 3)通过软件进行选择。 两种模式都使用 TXWAKE 标志位(SCICTL1,bit 3)、RXWAKE 标志位(SCIRXST,bit1)和 SLEEP 标志位(SCICTL1,bit 2)来控制这些模式的 SCI 发送器和接收器功能。

接收顺序

在两种多处理器模式下,接收顺序如下:
1. 在收到地址块时,SCI 端口唤醒并请求中断(必须使能 SCICTL2 的位号 1 RX/BK INT ENA-才能请求中断)。 它读取块的第一帧,其中包含目标地址。
2. 通过中断进入一个中断服务程序并检查输入地址。 该地址字节根据其存储在存储器中的设备地址字节进行检查。
3. 如果检查显示块寻址到设备 CPU,则 CPU 清除 SLEEP 位并读取块的其余部分。 如果不是,则软件例程退出,SLEEP 位仍然设置,并且在下一个块开始之前不接收中断。

空闲线多机通信模式

说明:

  • 总线上以空闲时间来区分不同的数据块(应用层协议)
  • 数据块内部,每个字节帧的帧间间隔小于10个“位时间”。位时间的长短与波特率相关。
  • 数据块与数据块之间,每个字节帧的帧间间隔为10个“位时间”或者更多。
  • 通常,数据块的第一个字节为地址字节,用于设备之间寻址。

空闲线通信模式的步骤

  1. SCI在接收到数据块起始信号后唤醒
  2. 处理器识别下一个SCI中断
  3. 中断服务程序中比较地址,看接收到的地址是否与本机匹配
  4. 如果匹配,则清除SLEEP位,接收数据块中的其他数据
  5. 如果不匹配,则继续保持SLEEP位。这将让CPU继续执行主循环的程序,而不被串口中断,直到再检测到下一个数据块的开始。

数据块起始信号

  • 发送完一个数据块后,特意等待一段时间,再发送下一个数据块的寻址字节
  • 在写入TXBUF前,将TXWAKE置1.这将发送11个位的空闲状态。
  1. 写1到TXWAKE位
  2. 写一个字的数据到TXBUF。这个字的内容无所谓,只是用于产生空闲状态,启动下一个数据块。
  3. 往TXBUF中写入地址值。

地址位多机通信模式

说明:

  • 数据块以数据帧中的地址位来区分
  • 数据块中第一个字节帧的地址位为1,表示寻址命令;其他字节帧的地址位为0,表示数据。
  • 字节帧之间的间隔时间没有要求。

通信方法:

  1. SCICCR寄存器中的ADDRIDLE_MODE位(bit3)设置为1,表示选择“地址位模式协议”
  2. 设置SCICTL1.TXWAKE位为1,再往TXBUF中写入地址值。则此时TXD上发送的字节帧中的地址位就是1。TXWAKE位会在传输给WUT位后由硬件清零。
  3. 保持TXWAKE位为0,继续发送其他数据字节。

SCI通信格式

说明:

  • 数据帧中的每个位(比如起始位、数据位等)对应8个SCI模块时钟。
  • 有效的起始位(start bit)需要连续检测到4个低电平。
  • 其他位的检测:在数据位的中间检测3次,然后“投票”确定当前数据位是0还是1

串行通信接口SCI图解相关推荐

  1. DSP—2812、28335串行通信接口SCI

    文章来自:http://blog.csdn.net/wu159632/article/details/7996886 SCI(Serial Communication Interface),即串行通信 ...

  2. DSP TMF320F2803x 串行通信接口SCI

    一.概述 SCI 是两线异步串行端口,通常称为 UART. SCI 模块支持 CPU 与其他使用标准非归零(NRZ)格式的异步外围设备之间的数字通信. SCI 接收器和发送器均具有 4 级深度 FIF ...

  3. tms320lf240x 的串行通信接口

    首先需要注意,串行通信模块的寄存器是8位的. 一.串行通信接口的物理结构 1.两个IO引脚 SCIRXD    SCI接收数据引脚 SCITXD    SCI发送数据引脚 2.一个16位的可编程的波特 ...

  4. 串行通信(SCI模块)

    目录 一. 串口通信基础知识 1.数据的传输方式 2.数据的通信方式 3.串行通信接口 4.奇偶校验 二.AW60串行通信 1.串行通信接口概述 2.八大寄存器 (1)波特率寄存器 (2)数据寄存器( ...

  5. 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例

    基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院  欧浩源 1.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况. ...

  6. rs232 距离_串行通信接口之一RS232接口

    RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调器厂家及计算机终端生产厂家共同制定的用于串行通迅的标准.它的命名是"数据终端设备(DTE)和数据通讯设备(DCE) ...

  7. html 串行通信接口,一种串行通信接口的级联方法与流程

    本发明属于自动控制 技术领域: ,具体为一种基于RS232串行通信接口的级联方法. 背景技术: :RS-232是美国电子工业协会EIA(ElectronicIndustryAssociation)制定 ...

  8. SSI(Synchronous Serial Interface)串行通信接口

    SSI接口是一种串行通信接口,用于实现芯片内部的空间地址访问,SSI接口不需要片内CPU的配合,可以独立工作,在芯片解复位后即可工作.在系统中,SSI由一个Master和一个Slave,一对一配对使用 ...

  9. html 串行通信接口,接口类型怎么区分串口和并口?

    怎样判别硬盘是串口还是并口 我有一台旧电脑,硬盘坏了,无法启动.想买一个硬盘,但不知道是并口还串口硬盘使用的是SATA接口,并口硬盘使用的是IDE接口. 电脑硬盘串口与并口的区别在那里/? 串口好在那 ...

最新文章

  1. 一文尽览5G全产业链及新机遇
  2. swoole php配置文件,easyswoole自义命令加载自定义配置文件
  3. 我是一只IT小小鸟读书笔记
  4. 微型计算机中abcd是指,一级笔试模拟试题二(答案)
  5. [攻防世界 pwn]——level0
  6. 学霸真的比学渣更讨女孩子欢心吗?
  7. Struts2 POI 导入导出Excel数据
  8. Android之蓝牙开发浅析
  9. spss假设检验_SPSS进行组间差异比较及其两两比较——「杏花开生物医药统计」...
  10. 阿里中间件seata源码剖析七:saga模式实现
  11. PRD:腾讯会议APP产品需求文档
  12. PS画直线虚线及图形虚线
  13. 启动Maven项目 死活报404 配置文件都没问题
  14. 增量式编码器工作原理超详细图解
  15. 虚拟pc服务器 翻译,单机服务器配置文件;ServerSettings.ini【翻译】
  16. iphone相册储存空间已满_iPhone 总提示“iCloud储存空间将满”,如何解决?
  17. 斐波纳契数列 python123
  18. Karl Guttag:谈MicroLED AR光学难点,Mojo Vision还有很多问题
  19. c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf() 1 - phpStudy...
  20. elasticsearch forcemerge

热门文章

  1. Python全栈开发课堂笔记_day03
  2. 注册表修改时间时区自动更新状态
  3. 【计算机网络复习之路】网络层(谢希仁第八版)万字详解 主打基础
  4. USB工作学习笔记(一)
  5. UCGUI编程三:背景窗口重绘
  6. Acrel-2000Z电力监控系统在某区块页岩气地面集输工程中的应用-Susie 周
  7. 使用QGIS分区统计工具实现栅格分类数据的分区计算面积——GlobeLand30地表覆盖数据为例
  8. 【渝粤教育】广东开放大学 新闻写作 形成性考核 (23)
  9. SpringMVC之ModelAndView的用法
  10. 二值线形图像 识别 matlab,用MATLAB检测二值图像中的线间隙