UART(UniversalAsynchronous ReceiverTransmitter,通用异步收发器)是一种广泛使用的异步串行数据通信协议。目前大多数MCU、串口通信IC等芯片或模块均支持UART通信,随着CPLD/FPGA应用得越来越广泛,用CPLD/FPGA来设计UART等接口已是数字电路设计的常见应用之一。
    由于UART是异步传输,没有传输同步时钟。在CPLD/FPGA的UART接口设计中,为了能保证数据接收的正确性,数据帧接收时需采用比数据波特率至少高2倍的采样时钟对数据进行采样,才能保证对数据采样不失真或误码,实际波特率时钟采样比最好大于10倍。简单起见,可以取中间时钟的采样值作为数据真实值,采样时钟从系统时钟(晶振)分频得到。虽然理论上照此设计便可保证UART数据传送和接收时不发生误码,但由于在实际设计UART数据通信时,存在采样时钟偏差、数据帧格式、传输波特率及设计的舍入误差等因素的影响,对确定数据波特率传输的UART数据收发器,如何选择恰当的系统时钟(晶振)来保证UART通信的正常或者换句话说,对确定系统时钟(晶振)的UART数据收发器能支持多大的数据通信波特率?这是一个值得探讨的问题。本文对采用CPLD或FPGA进行UART数据收发器设计时,上述提到的问题作个简单的讨论,错误之处还请大家包涵。
    下面简单介绍一下UART时序及其发送接收过程。

发送数据帧过程:空闲状态,线路处于高电平。当开始发送时,先发送起始位(线路保持1个数据位的低电平时间),接着按低位到高位的顺序发送数据位、奇偶校验位(如果需要校验的话)及停止位(停止位为高电平)。

接收数据帧过程:空闲状态,线路处于高电平。当检测到线路的下降沿(线路电平由高变低)时说明线路接收到数据传输的起始位,这时可按照指定的波特率从低位到高位接收数据位、奇偶校验位(如果需要校验的话)及停止位,并完成数据校验,根据校验情况决定数据的处理。

基于上面提到的设计模型,当数据接收发生误码时,上述各影响因素本质上是影响到数据采样时钟的采样位置,使得采样时钟与正常数据采样位置发生了偏差而导致误码,因此计算出采样时钟的采样位置偏差,并保证其不偏离数据位宽范围即可保证数据接收时不发生误码。由于从起始位开始接收时,采样位置偏差即开始累计,所以数据帧最后一位的采样位置偏差应为最大,故若能保证接收数据帧最后一位的采样位置累计偏差的绝对值小于指定波特率对应传输位宽的一半就能保证UART通信时数据接收不发生误码。可以得到下面(1)式:

ETS(W-0.5)<0.5/P           -------(1)
    其中:
       E---计算波特率采样时钟时的系统时钟分频数的最大舍入误差,其值为0.5。
       T---晶振周期。
       S---波特率时钟采样比=波特率采样时钟频率/数据波特率。
       W---传输位数。
       P---数据波特率。
   根据(1)式可以计算(2)式
       f>2PES(W-0.5)              -------(2)
   其中:f为晶振频率。

举例来说,若CPLD或FPGA采用10MHz外部晶振作为系统时钟时,对于常用的串口数据通信设置“?,N,8,1---?,无校验位,8个数据位,1个停止位”,(2)式中晶振频率f为10000000,传输位数W为10,波特率时钟采样比S若取为16,则支持的数据通信波特率应小于65789.5bps。同样对常用的“115200,N,8,1---115200波特率,无校验位,8个数据位,1个停止位”,可计算出系统时钟(晶振)频率应大于17510400Hz才可保证UART通信不发生误码。

CPLD/FPGA的UART接口设计之系统时钟(晶振)和波特率关系相关推荐

  1. 基于FPGA的UART接口设计

    一.顶层设计思路: UART即通用异步收发传输接口(Universal Asynchronous Receiver/Transmitter),简称串口,是一种常用的通信接口,其协议原理就不赘述了,不了 ...

  2. 基于FPGA实现UART接口设计(异步串行通信)

    时间就是金钱,技术就是饭碗,每天学习,每天积累,做好现在,不担心未来,加油! 1 简介 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通 ...

  3. 基于 FPGA 的 UART 控制器设计(VHDL)(下)

    今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(下),由于篇幅较长,分三篇.今天带来第三篇,下篇,使用 FPGA 实现 UART.话不多说,上货. 之前有关于 Veriliog HDL ...

  4. 基于FPGA的VGA接口设计(三)

    关于VGA系列文章的所有链接: 基于FPGA的VGA接口设计(一) 基于FPGA的VGA接口设计(二) 基于FPGA的VGA接口设计(三) 结篇   在之前的文章中介绍了有关VGA的扫描方式.行场同步 ...

  5. 计算机键盘接入fpga,基于FPGA的键盘接口设计毕业论文.doc

    单片机论文,优秀毕业论文,外文翻译,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机毕业论文,基于单片机毕业论文,毕业论文终稿,毕业论文初稿,毕业论文设计,单片机论文,本文档支持完 ...

  6. 基于FPGA的UART接口协议设计

    一.PC终端概述 PC终端,Personal Computer 智能终端,通俗的讲,就是利用电脑GUI界面控制我们的外部硬件电路. 因此设计到了PC与外部硬件电路的通信接口.对于台式电脑.个人笔记本, ...

  7. 基于FPGA的PCI接口设计

    1 PCI总线及其接口概述 PCI总线是高速同步总线,具有32bit总线宽度,工作频率是33MHz,最大传输率为132Mbyte/s,远远大于ISA总线5Mbyte/s的速率.PICMG(PCI工业计 ...

  8. 嵌入式系统关于晶振的问题汇总

    最近看了不少网上网友的应用案例,在STM32晶振问题上不少都栽了跟头.我自己也碰见过一次.就是电容值搞错了. ourdev有网友说:他的设备隔几天系统就出问题,系统时钟变慢. ------------ ...

  9. 单片机最小系统_晶振电路复位电路

    这里写目录标题 1. 晶振电路 电路搭建 相关概念 时钟周期 机器周期 指令周期 2. 复位电路 电路搭建 复位电路定性分析 复位电路定量分析 单片机最小系统,或者称为最小应用系统,是指用最少的元件组 ...

最新文章

  1. Java异常体系结构
  2. linux ---jenkins的安装与配置
  3. Ngrok: 使用 Ngrok 实现内网穿透
  4. 一步步把 SAP UI5 应用部署到 SAP BTP Kyma 运行环境中去
  5. 0 uC/OS 系统精讲索引
  6. maven 解决冲突
  7. git 强制将本地代码更新仓库里面的代码
  8. 第一百七十四天 how can i 坚持
  9. pytorch 如何将张量、类实例、函数放到GPU上
  10. [置顶] Android改变图像的饱和度、亮度和对比度
  11. 蓝屏代码0x00000109 错误分析
  12. 云安全七大核心要素解析
  13. UE4 讯飞语音识别插件
  14. 地理必修一三大类岩石_高中地理必修一知识点总结材料完整版
  15. 帝国cms支持php多少,帝国cms支持php吗
  16. BASH脚本基础:语法检查与调试
  17. ORACLE之SQL——排序
  18. 【01背包】【DP】精卫填海(黄题)
  19. hive 元数据 解释
  20. HTML5 canvas 行星环绕

热门文章

  1. 基于RT-Thread开发智能视觉组智能车 - 温州大学 - 春华秋实
  2. 第十六届全国大学生智能汽车竞赛全国总决赛承办申请汇报
  3. 妹子调车为哪般?室外赛道来闯关。
  4. sgn matlab,matlab中.*的问题
  5. iview的表格自定义_iview table 实现在数据中自定义标识
  6. oracle object_type,Oracle TYPE OBJECT详解 | 学步园
  7. mysql被格式化恢复数据_三种常见数据库文件恢复方法介绍
  8. python输入字符串从大到小排列_791. 自定义字符串排序(Python)
  9. java中setid(),Java Process.setId方法代碼示例
  10. 静态方法与非静态方法的区别_程序员必看之ThinkPHP5中model与Db的区别