串口协议基础

1 串口概述

串口由收发器组成。发送器是通过TxD引脚发送串行数据,接收器是通过RxD引脚接收串行数据。发送器和接收器都利用了一个移位寄存器,这个移位寄存器可以将数据进行“并转串”和“串转并”。虽然一个UART接口通常都包含了发送器和接收器,而实际上一个全双工串口UART控制器需要独立的发送和接收通道。这是因为每个控制通道只控制了一个pin(一个通道要么配置成发送器,要么配置成接收器,不能同时配置成接收器和发送器)。没有严格规定哪个通道可以是发送器、哪个通道可以使接收器。

UART协议(串口协议)允许选择一个校验位来检测简单的通信错误(transmission errors)。校验位可以通过两种不同的方式进行产生和检测(generated and checked):奇校验和偶校验(odd and even parity)。UART协议功能支持所有的校验方式。

串口协议对每个字节数据的bit数并不是固定不变的。尽管8-bit的字节是经常用到的,但是一些应用也用到7-bit、9-bit、或者更多bit的字节数据。串口功能可以使用每个字节长达1~23bit长度的字节数据。另外,串口协议还需要1个开始位(1 start bit)(发送一个从“高到低”动作,低电平需要保持1 bit的时间)和1个停止位(1 stop bit)(发送一个从“底到高”动作,高电平需要保持1 bit的时间)来封装数据。

串口功能是双缓冲的。不论是发送器还是接收器,它们都包含有一个移位寄存器和一个数据寄存器。Host CPU可以在数据正在发送时,将新数据写入到发送器的数据寄存器;也可以在数据被接收时,从接收器的数据寄存器读取数据。

串口发送器通过对通道的“中断标志位”和数据发送器“需求标志位”置位来指示数据已经从“发送数据寄存器”传送到“发送移位寄存器”了。发送器的CIS标志位和DTRS被置位时,标志着发送数据寄存器已经准备就绪可以接收新数据了。假如中断标志位将被用于轮询环境(polling environment),CIS标志位就必须在新数据被写入发送器前被清零。同样的,如果一个DMA通道被用于UART通道服务,那么DTRS标志位就应被DMA通道描述符清零(should be cleared by theDMA channel descriptor)。当数据别写入到数据发送寄存器时,这24-bit的数据发送寄存器MSB必须写为0。这个是iTPU串口的一个握手信号,这个握手信号表明了新的发送数据进行串行移位输出已经写好。

同样的,串口接收器通过对CIS和DTRS标志位进行置位,来表明新数据已经到了。当数据从接收移位寄存器传送到接收数据寄存器后,CIS和DTRS标志位就被置位了。假如中断标志位将被用于轮询环境(polling environment),接收器的CIS标志位就必须在新数据被读取后被清零。如果一个DMA通道被用于UART通道服务,那么DTRS标志位就应被DMA通道描述符清零(should be cleared by theDMA channel descriptor)。为了避免数据丢失或者重复读取同样的数据,所以必须在接收后续的数据前完成 检测新接收到的数据、读取数据、和清除接收CIS标志位和DRTS标志位。同样的,在随后数据接收前,与每个已接收到的数据位相关的“错误条件”(error condition)必须被检测或者保存好,否则errorcondition将会丢失。

串口功能可以进行连续的传输(back-to-back transfer)。如果数据及时,发送器不会产生空闲信号(idle line signal),而是在一个stop位后,紧跟着下一帧数据的star位。空闲信号只有在传送数据已经被串行移位输出,发送数据寄存器为空时才会产生。发送器的空闲信号时间都是1 bit时间的整数倍。接收器可以处理任何长度的空闲信号。

每个数据都是由1个start位开始的,开始位始终是逻辑0。跟随在开始位后面的是特定长度的数据,数据是LSB模式发送的;如果校验位被使能,那么1个校验位也将产生,并被发送。数据的最后一位由1个stop位标志,结束位始终是逻辑1。一个空闲line就是由连续多个的stop位组成的,这也就意味着空闲信号其实就是信号线一直保持在逻辑1。

例子:一个ASCII字符“A”(8-bit,hex码为0x41)一直都是以如下的方式进行传送的。注意:数据是LSB first发送方式。

如图2更多详细内容:(注意:时序图显示0x41数据串行输出时序,LSB first。)

文中用到的“bittime”位时间,指的是传送或接受1bit数据所需要的时间。位时间是由波特率决定的,如下公式:

Bittime = 1/Baud Rate

接收器通过感知start位的下降沿,来检测数据。因为UART功能总是把服务请求初始化后的第一个下降沿作为有效的起始条件,此时若line是空闲的,就必须使能接收器。接收位只采样一次,大约半个bit time。在每次start bit时,接收器都将出现同步。

2 基本时序

如图2展示了TX和RX数据,以及串行数据的时序。任何写入到tx数据寄存器的数据,必须将msb位置为0(其实就是开始位,startbit)。这表明UART的新数据已经准备好,可以进行移位输出了。所有接收的数据通过API接收函数fs_etpu_uart_read _receive _data()进行右对齐。传送的数据总是由1开始位(1 bittime low)和1停止位(1 bit time high)封装。数据总是LSB FIRST移位输出。当所有数据被传送出去后,根据校验位是否被使能,校验位也将被选择性的输出。数据宽度被限制在23bits以内。这就意味着最大的数据大小、加上校验位,以及开始位、结束位,一帧数据最长将达到26bits。接收到的数据MSB总是0。

版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/kaly_liu/article/details/
 

串口协议基础

1 串口概述

串口由收发器组成。发送器是通过TxD引脚发送串行数据,接收器是通过RxD引脚接收串行数据。发送器和接收器都利用了一个移位寄存器,这个移位寄存器可以将数据进行“并转串”和“串转并”。虽然一个UART接口通常都包含了发送器和接收器,而实际上一个全双工串口UART控制器需要独立的发送和接收通道。这是因为每个控制通道只控制了一个pin(一个通道要么配置成发送器,要么配置成接收器,不能同时配置成接收器和发送器)。没有严格规定哪个通道可以是发送器、哪个通道可以使接收器。

UART协议(串口协议)允许选择一个校验位来检测简单的通信错误(transmission errors)。校验位可以通过两种不同的方式进行产生和检测(generated and checked):奇校验和偶校验(odd and even parity)。UART协议功能支持所有的校验方式。

串口协议对每个字节数据的bit数并不是固定不变的。尽管8-bit的字节是经常用到的,但是一些应用也用到7-bit、9-bit、或者更多bit的字节数据。串口功能可以使用每个字节长达1~23bit长度的字节数据。另外,串口协议还需要1个开始位(1 start bit)(发送一个从“高到低”动作,低电平需要保持1 bit的时间)和1个停止位(1 stop bit)(发送一个从“底到高”动作,高电平需要保持1 bit的时间)来封装数据。

串口功能是双缓冲的。不论是发送器还是接收器,它们都包含有一个移位寄存器和一个数据寄存器。Host CPU可以在数据正在发送时,将新数据写入到发送器的数据寄存器;也可以在数据被接收时,从接收器的数据寄存器读取数据。

串口发送器通过对通道的“中断标志位”和数据发送器“需求标志位”置位来指示数据已经从“发送数据寄存器”传送到“发送移位寄存器”了。发送器的CIS标志位和DTRS被置位时,标志着发送数据寄存器已经准备就绪可以接收新数据了。假如中断标志位将被用于轮询环境(polling environment),CIS标志位就必须在新数据被写入发送器前被清零。同样的,如果一个DMA通道被用于UART通道服务,那么DTRS标志位就应被DMA通道描述符清零(should be cleared by theDMA channel descriptor)。当数据别写入到数据发送寄存器时,这24-bit的数据发送寄存器MSB必须写为0。这个是iTPU串口的一个握手信号,这个握手信号表明了新的发送数据进行串行移位输出已经写好。

同样的,串口接收器通过对CIS和DTRS标志位进行置位,来表明新数据已经到了。当数据从接收移位寄存器传送到接收数据寄存器后,CIS和DTRS标志位就被置位了。假如中断标志位将被用于轮询环境(polling environment),接收器的CIS标志位就必须在新数据被读取后被清零。如果一个DMA通道被用于UART通道服务,那么DTRS标志位就应被DMA通道描述符清零(should be cleared by theDMA channel descriptor)。为了避免数据丢失或者重复读取同样的数据,所以必须在接收后续的数据前完成 检测新接收到的数据、读取数据、和清除接收CIS标志位和DRTS标志位。同样的,在随后数据接收前,与每个已接收到的数据位相关的“错误条件”(error condition)必须被检测或者保存好,否则errorcondition将会丢失。

串口功能可以进行连续的传输(back-to-back transfer)。如果数据及时,发送器不会产生空闲信号(idle line signal),而是在一个stop位后,紧跟着下一帧数据的star位。空闲信号只有在传送数据已经被串行移位输出,发送数据寄存器为空时才会产生。发送器的空闲信号时间都是1 bit时间的整数倍。接收器可以处理任何长度的空闲信号。

每个数据都是由1个start位开始的,开始位始终是逻辑0。跟随在开始位后面的是特定长度的数据,数据是LSB模式发送的;如果校验位被使能,那么1个校验位也将产生,并被发送。数据的最后一位由1个stop位标志,结束位始终是逻辑1。一个空闲line就是由连续多个的stop位组成的,这也就意味着空闲信号其实就是信号线一直保持在逻辑1。

例子:一个ASCII字符“A”(8-bit,hex码为0x41)一直都是以如下的方式进行传送的。注意:数据是LSB first发送方式。

如图2更多详细内容:(注意:时序图显示0x41数据串行输出时序,LSB first。)

文中用到的“bittime”位时间,指的是传送或接受1bit数据所需要的时间。位时间是由波特率决定的,如下公式:

Bittime = 1/Baud Rate

接收器通过感知start位的下降沿,来检测数据。因为UART功能总是把服务请求初始化后的第一个下降沿作为有效的起始条件,此时若line是空闲的,就必须使能接收器。接收位只采样一次,大约半个bit time。在每次start bit时,接收器都将出现同步。

2 基本时序

如图2展示了TX和RX数据,以及串行数据的时序。任何写入到tx数据寄存器的数据,必须将msb位置为0(其实就是开始位,startbit)。这表明UART的新数据已经准备好,可以进行移位输出了。所有接收的数据通过API接收函数fs_etpu_uart_read _receive _data()进行右对齐。传送的数据总是由1开始位(1 bittime low)和1停止位(1 bit time high)封装。数据总是LSB FIRST移位输出。当所有数据被传送出去后,根据校验位是否被使能,校验位也将被选择性的输出。数据宽度被限制在23bits以内。这就意味着最大的数据大小、加上校验位,以及开始位、结束位,一帧数据最长将达到26bits。接收到的数据MSB总是0。

版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/kaly_liu/article/details/串行通讯波特率和定时器的关系 波特率代表数据的传输速率,即每秒钟传送的二进制位数,单位为位/秒。若波特率为1200,则代表每秒钟有1200个二进制位在数据线上传输,换句话说,即每个二进制位信号电平在数据线上保持的时间为1/11200s

。这样,就将定时器和波特率联系起来了。

说说UART(转)的更多相关文章

  1. [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信

    一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...

  2. z-stack协议uart分析(DMA)

    1.从ZMain里面的main函数开始分析 2.进入int main( void ); HalDriverInit();   //硬件相关初始化,有DMA初始化和UART初始化 3.进入HalDriv ...

  3. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  4. (三) UART 串口通讯

    UART  : university asynchronous receiver and transmitter UART  // 通用异步接收器和发送器 为什么要有串口:因为许多嵌入式设备没有显示屏 ...

  5. I2S/PCM/IOM-2、I2C/SPI/UART/GPIO/slimbus

    概述 I2S,PCM,IOM-2都是数字音频接口,传数据的. I2C,SPI,UART,GPIO是控制接口,传控制信令的. I2S I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频 ...

  6. 什么是UART中的FIFO

    FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可以节省CPU时间.对于发送数据也一样可以把要发送的数据一起写入FIFO,串口控制器按照写入的顺 ...

  7. Uart、SPI和I2C的区别

    串口通信:UART.SPI.I2C区别[引用]   1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面 ...

  8. Raspberry Pi UART with PySerial

    参考:http://programmingadvent.blogspot.hk/2012/12/raspberry-pi-uart-with-pyserial.html Raspberry Pi UA ...

  9. Raspberry Pi Resources-Using the UART

    参考:RPi Serial Connection 本文来自:http://www.raspberry-projects.com/pi/programming-in-c/uart-serial-port ...

  10. Linux学习 : 裸板调试 之 配置UART

    1.UART原理说明 发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出:接收数据时,UART检测另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取UART ...

随机推荐

  1. 在C++中调用DLL中的函数(2)

    本文转自:http://blog.sina.com.cn/s/blog_53004b4901009h3b.html 应用程序使用DLL可以采用两种方式: 一种是隐式链接,另一种是显式链接.在使用DLL ...

  2. 关于Unity中的模型描边与Shader切换(专题二)

    模型描边 1: LOL里面的模型描边效果,点击防御塔会有描边的效果,被攻击的时候模型也要描边凸显一下2: 网上可以找到模型描边的Shader,可以直接下载使用,一组第三方的Shader, 帮我们解决了 ...

  3. Cisco无线控制器配置Radius

    使用Cisco无线控制器管理AP,配置Radius服务器,用于企业加密wifi的认证. 结合上一篇文档进行操作: http://www.cnblogs.com/helloworldtoyou/p/80 ...

  4. (资源)OpenStack IRC资源

    OpenStack的IRC频道列表 如何在浏览器上进入OpenStack的频道(具体的频道可以参考前面的频道列表) 频道聊天日志和会议日志 这里我使用mIRC而不是浏览器接入IRC,OpenStack ...

  5. Ubuntu 14.04 安装 DevStack与遇到的的问题记录

    本文总结Ubuntu 14.04下部署DevStack的过程以及一些可能遇到的问题. 一.安装 以下的操作最好在普通用户下进行,至少在git clone devstack的时候使用普通用户,这样可以避 ...

  6. R语言绘制花瓣图flower plot

    R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...

  7. mybatis 参数为String,用_parameter 取值

    mybatis 参数为String,if test读取该参数代码: <select id="getMaxDepartId" parameterType="java. ...

  8. 强大!HTML5 3D美女图片旋转实现教程

    又到周末,来弄点HTML5的特效玩玩,今天要折腾的是HTML5 3D图片特效,图片在垂直方向上被分割成一条条小矩形,在图片上拖动鼠标即可让每一个小矩形旋转,从而让图片形成3D立体的效果,来看看效果图: ...

  9. APP投资 历史 十万到 十亿元的项目

    马云又投了课程表APP 1亿元.   还能输入106字 http://www.tuicool.com/articles/ARVN3qI#0-qzone-1-41007-d020d2d2a4e8d1a3 ...

  10. [转帖]CentOS下iRedMail安装配置

    CentOS下iRedMail安装配置 中文名为艾瑞得邮件,由 rhms 项目更名而来.是针对 Linux 设计的邮件服务器解决方案,是在操作系统安装好后使用的一套 shell 脚本,用于快速部署一套 ...