欢迎来到天天文库
浏览记录
ID:53449327
大小:282.01 KB
页数:7页
时间:2020-04-03
《基于CPLD的RS-232串口通信实现.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于CPLD的RS-232串口通信实现摘要:为了实现PC机与CPLD的通信,进行了相应的研究。分析了RS-232C通信协议,自定义了数据包传输格式。根据UART模块工作状态多的特点,应用了有限状态机理论进行编程实现。为降低误码率,应用16倍频技术,实现了波特率为9600bit/s的串口通信。在QuartusII平台上用VerilogHDL进行编程,并通过了VC编写程序的数据传输的验证。研究成果为工程上PC机与嵌入式系统数据传输的问题提供了一种解决方法。关键词:RS-232C;UART;CPLD;VerilogHDL;数据包格式;有限状态
2、机;嵌入式系统 CPLD(ComplexProgramableLogicDevice)是一种复杂的用户可编程逻辑器件。采用连续连接结构,延时可预测,从而使电路仿真更加准确。CPLD是标准的大规模集成电路产品,可用于各种数字逻辑系统的设计。开发工具QuartusII、ISE等功能强大,编程语言灵活多样,使设计开发缩短了周期。 随着嵌入式的发展,对数据的传输和人机交互通信的要求越来越高。而串口通信因其资源消耗少、技术成熟而被广泛应用。系统中上位机与嵌入式芯片之间的交互通信可以通过专用集成芯片作为外设RS-232异步串行接口,如TI、
3、EXAR、EPIC公司的550、452等系列UAWT集成电路,或在拥有Nios系统的FPGA上可以方便地嵌入UART模块。但是在设计中用户会提出自己的要求,如:数据加密或只使用UART部分功能等,即要求更灵活的UART。而且有时CPLD资源剩余,出于成本考虑也会要求设计一种模拟的UART。对于上述的两种情况,就可以在CPLD其丰富的资源上制作一款UART,实现PC机与嵌入式系统之间的数据交换。1、串口通信协议1.1UART简介 通用异步收发器(UniversalAsynchronousReceiverTransmitter,UART
4、)。异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。具有相关工业标准提供的标准的接口电平规范等优点,在工业控制领域被广泛采用。 异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位。 本设计基于RS-232的数据帧结构,设置数据帧结构如图1所示:1bit起始位,8bit数据位,1bit停止位,无校验位。每帧实质上传送1Byte数据。1.2自定义数据包格式 多个上文所描述的帧就可以组成一个数据包。串口通信是在RS-232数据帧结构的基础上定义的,传输以数据包为单位进行。包结构如图2所示。
5、 本文采用和校验的结构,一个数据包包含15Byte。其中第1个字节是数据包头即握手字符。第2字节为控制字符,EE代表写命令,DD代表读命令。第3至第14为可利用数据。第15字节作为校验字符,理论上应等于这个数据包中数据字符串之和的后8bit。2、设计方案2.1UART的设计结构 笔者设计采用模块化设计,方案的UART主要由逻辑控制模块、波特率发生模块、发送模块和接收模块等组成。波特率发生模块可以建立精确的时钟,确保数据采样准确、工作时序顺畅。逻辑控制模块、波特率发生模块、发送模块和接收模块完成工作有:确定数据起始位、数据收发,串并
6、转换、建立握手连接、判断命令、数据校验等功能。2.2状态图 利用串口通信在数据交互过程中涉及到了多种工作状态,情况比较多样,而利用程序设计中的有限状态机(FSM)理论进行编程设计,这个问题可以迎刃而解。 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,有限状态机的状态(即由寄存器组各位的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态。 本设计的有限个状态编码使用独热码形式,即寄存器组每一个bit位代表一种状态(如“0100”,“1000”为四态机中的两种状态),这种状态码的好
7、处是避免了状态混乱。状态机采用Mealy型有限状态机,这种状态机的下一个状态不但取决于各个输入值,还取决于当前所在状态,符合UART的工作原理。 逻辑控制模块、数据接收模块和发送模块的设计都使用到了状态机,其中以逻辑状态机为主状态机,其余两个为从状态机。确定各种工作状态和工作流程后便可构建出状态图,方便直观地进行后续设计。通过状态图可以方便、准确地得到程序设计框图如图4所示。3、各模块设计3.1波特率发生器 串口通信必须要设定波特率,本设计采用的波特率为9600bit/s。产生波特率的时钟频率是越高越好,这样才可产生较高且精确的
8、波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5208.33个时钟周期。取一个最接近的数是5208,则波特率为9600.61,其误差约为0.006%,误码率很低可以确保通信正
此文档下载收益归作者所有