用FPGA实现异步串口与同步串口的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用FPGA实现异步串口与同步串口的转换
李文亮,姚冬苹
北京交通大学现代通信研究所,北京(100044)
E-mail:li.wenliang4@
摘要:TI公司的TMS320C64xx系列DSP芯片的McBSP同步串口不具备与UART异步串口直接通信的能力,为了解决这个问题,扩展DSP芯片的使用范围,本文介绍了一种新的用FPGA来实现McBSP同步串口与UART异步串口之间相互转换的方法,通过必要的硬件连接和VHDL软件编程,实现了两种串口的转换,经测试,数据传输正确可靠。
关键词:串口通信;McBSP;UART;SPI;FPGA;DSP
中图分类号:TP212
1.引言
DSP芯片在现代数字信号处理中,应用特别广泛,尤其是TI公司的TMS320系列的DSP 芯片。在实际的应用中,常常需要DSP芯片与PC机或者其他采用UART异步串口的系统之间进行数据交换。本文采用FPGA,通过必要的软硬件设计解决同步串口与异步串口之间的数据通信问题。
2.DSP的异步串口扩展方案
目前使用较多的方式有以下几种。
(1) 在DSP的并行总线上扩展专用的UART芯片(例如TI的TL16C552),用硬件来实现异步串口扩展。这种方法软件设计简单,但占用了DSP的并行总线,使系统设计复杂化,不利于系统整体设计。
(2) 利用DSP的McBSP和DMA(或者EDMA),在不扩展硬件的基础上,通过软件设计的方式实现异步串口。这种方法虽然不增加硬件,但是软件复杂,增加了CPU的负荷。(3) 利用DSP的McBSP同步串行接口与MAX3111异步串行收发器,实现异步扩展,这种方式的硬件和软件设计都比较简单方便,唯一缺点是使成本较高。
(4) 利用DSP的McBSP同步串行接口,通过使用FPGA现场可编程逻辑器件,将同步串口转换为异步串口,这种方式方便灵活,适应性强。
本文采用第四种方案,使用ALTERA公司的cyclone芯片和MAXIM公司的MAX3232电平转换芯片,通过VHDL语言编程,实现DSP芯片和PC机之间的串口通信。DSP芯片的McBSP配置为SPI从设备模式。
3.串口标准介绍
3.1 UART异步串口协议
我们常用的异步串口时序如图1所示,由1位起始位,8位数据位和1位停止位构成1个帧结构单元。
图1 UART时序图
3.2 UART异步串口协议
McBSP是在标准串口的基础上扩展的,具备高速,全双工,多通道的特点,并且可以灵活的配置为SPI,IOM-2、AC97等工业标准接口[1],本文将其配置为SPI从设备模式。DSP 作为SPI从设备时,帧信号FSR和时钟信号CLK作为输入。SPI模式的时序如图2所示。
图2 SPI时序
4.实现方法
本例中,UART异步串口格式为1位起始位,8位数据位,无奇偶校验位,1位停止位,波特率选为115.2kbps,FPGA的输入时钟为16.384MHz。SPI同步串口格式为帧信号高电平有效,时钟上升沿时接收或发送数据,数据长度为32位。
通过观察图1和图2我们注意到,UART的数据线上是低位(LSB)在前,而SPI模式下数据线上高位(MSB)在前,在目前已有的很多串口转换的文献中都很少提到,TMS320C64xx系列DSP虽然可以通过设置选择数据线LSB在前还是MSB在前,但是只能在数据为32位时才可以,而且在实际的应用中,DSP中数据长度多数情况下为32位,因此本例将SPI模式是数据选为32位更有适合实际应用。
4.1 UART转SPI
UART转SPI就是要从UART的数据线中恢复出同步时钟以及帧同步信号。图3为FPGA 内搭建的硬件电路图。从图中可以看出,电路主要由锁相环模块(系统IP核提供),两个系数为143的分频器,一个4分频器以及一个控制模块构成。
图3 UART转SPI电路图
通过对图1观察,如果在检测到UART数据线上的下降沿跳变时,开启一个9bit宽度计数器,在第1bit时检测是否为起始位(应为低电平,否则出错,转到错误状态),如果是起始位,则在2-9bit时送出高电平(为描述方便记为en_clk),使能时钟信号clk,时钟信号为将FPGA输入时钟16.384MHz经过143分频得到,为114.6kHz,可以保证在1个UART 数据帧结构之内偏差不超过1/4bit,确保采样时钟上升沿在数据bit的中部。最后将en_clk 信号进行4分频,得到32bit宽度的SPI帧信号FSR,而en_clk与原UART数据线相与得到SPI的数据线信号data。从以上过程可以看出,FSX,clk和data三条线满足SPI时序关系。图4是用示波器实测的转换时序图。
图4 UART转SPI实测时序
需要说明的是,图4种四条信号线从上至下依次为:FSX、clk、data以及UART数据信号线。
4.2 SPI转UART
SPI转UART的FPGA电路图如图5所示,主要由锁相环模块、分频器、40bit的移位寄存器以及少量的门电路构成。
图5 SPI转UART电路图
SPI转UART需要在SPI的数据线上,每8bit插入1位起始位和1位停止位。为此,我们将SPI帧信号FSX的宽度延长为40bit,由于采用从设备的SPI模式,帧同步信号和时钟信号都是FPGA输出给DSP,在40bit宽度的帧信号内只在2-9bit、12-19bit、22-29bit、32-39bit 送时钟信号,而在1、11、21、31bit位置插入起始位,9、19、29、39bit位置插入停止位,并把40bit数据送入移位寄存器,按波特率要求的频率发送出去作为UART的数据信号线。图6是用示波器实测的转换时序图。从图中可以看出,数据信号线data满足UART的时序关系。
图6 SPI转UART实测时序
图6种四条信号线从上至下依次为:FSX、clk、data以及UART数据信号线。另外需要说明的是,由于采用了移位寄存器的输出作为UART信号,所以图中的UART数据信号线与data并没有直接关系,而应该是上一帧的data,本文为了便于比较data到UART信号的变化,特意让DSP发送相同的帧。