Louis

kaly.liu@163.com

串口协议基础

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发送方式。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1em9uZ21pbmcxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

如图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。

UART串口协议基础1的更多相关文章

  1. uart串口协议

      uart串口协议   /* USART Word Length ---------------------------------------------------------*/     US ...

  2. RTC实时时间系统学习笔记(一)---------------UART串口

    临近研三了,自己倾向于要找数字IC方面的工作,苦于教研室的项目一直都是调板子调板子调板子,真正用到FPGA的很少,,本着"工欲善其事必先利其器"的原则,在网上搜寻如何自学FPGA, ...

  3. 第十六章 IIC协议详解+UART串口读写EEPROM

    十六.IIC协议详解+Uart串口读写EEPROM 本文由杭电网友曾凯峰根据小梅哥FPGA IIC协议基本概念公开课内容整理并最终编写Verilog代码实现使用串口读写EEPROM的功能. 以下为原文 ...

  4. (三) UART 串口通讯

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

  5. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  6. uart通讯协议

    本次设计的源码在http://download.csdn.net/detail/noticeable/9912383 下载 实验目的:通过uart通讯协议的编写,了解FPGA的通讯协议编写的方法. 实 ...

  7. linux UART串口驱动开发文档

    转:http://www.360doc.com/content/10/0417/18/829197_23519037.shtml linux UART串口驱动开发文档时间:2010-01-09 14: ...

  8. 基于STM32之UART串口通信协议(一)详解

    一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发 ...

  9. 基于STM32之UART串口通信协议(三)接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

随机推荐

  1. linux的NetworkManager服务(转)

    在开启NetworkManager服务的情况下,在终端下敲“service network restart”命令: 正在关闭接口 eth0: 设备状态:3 (断开连接) [确定] 正在关闭接口 eth ...

  2. pl/sql查询中文乱码

    1.设置系统环境变量 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.修改注册表 regedit->hkey_local_machine ...

  3. c#中 HttpContext作用(一)【转】

    HttpContext 主要作用是要获得你客户端向服务端请求提交的相关信息  HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP  特定的信息.也有人叫上下文信息. 1.生存周期 ...

  4. javascript中对条件推断语句的优化

    无论写什么程序,平时都会用到条件语句,如:if...else... switch这种语句,来达到对条件的推断. 以下看来一段代码: function abc(test){ if (test == 1) ...

  5. PropertyGrid--为复杂属性提供编辑功能

    零.引言 PropertyGrid用来显示某一对象的属性,但是并不是所有的属性都能编辑,基本数据类型(int, double等)和.Net一些封装的类型(Size,Color等)可以编辑,但是对于自己 ...

  6. 样式布局分享-基于frozen.js的移动OA

    最近改造了公司移动OA的样式,改善了显示效果和用户体验,其中用到了腾讯的 frozen.js 框架,在此把布局代码分享给大家,希望大家可以用得上,具体效果如下图. Demo 百度网盘 下载地址 Git ...

  7. Gitlab管理下本地Git配置

    公司项目组用的是Gitlab,组内成员分配有有固定的git个人账户,不同成员有不同的模块编辑权限,使用前需要配置好本地的Git.对一直使用svn的小菜菜来说,这个还是需要一点步骤配置下才可以使用的.配 ...

  8. MongoDB 操作

    通过CMD命令操作数据 确保MongoDB的服务已经正常安装,记下安装目录(D:\MongoDB\Service) 然后打开cmd 先转到D盘 cd D: 然后转到服务的安装目录下 cd D:\Mon ...

  9. Android Studio代码自动提示无效

    不生效的原因是因为你AS设置成了省电模式,设置成省电模式了的话,AS会禁掉一些辅助功能,达到省电的目的.所以代码自动提示也被禁掉了. 要修改回来的话,通过File选项,然后倒数第二项:Power Sa ...

  10. select Into用法

    1. insert into 表(列1,列2) select 列1,列2 from 表2 where.... 2.select * into 表2 from 表 1where... 上面写法标识将表1 ...