基于FPGA的串口通信调试问题总结
2018-02-09 14:36
302 查看
串口通信调试总结 2/9/2018 阿瞒
项目需求最近项目需要将Matlab加权滤波处理后的数据通过串口发送到FPGA硬件平台,并写入到板载的DDR3中。
相关工具
1.串口调试助手; 2. FPGA硬件平台(FPGA开发板)
项目说明
1. 由于需要写入到FPGA硬件平台中的数据量较大,为504*2500*16*16bits = 322Mbit,故需要较大的存储容量, 本项目采用1Gb的Micron DDR3作为存储芯片;
2. 因数据量较大,拟分批通过串口传输给FPGA平台,采用串口调试助手发送,发送方式为“文件格式”。
3. 发送过程采用偶校验方式,波特率为115200,如果传输过程发生误码,则停止发送,并误码指示灯闪烁;
项目总结
串口通信协议不难,按照正常流程开始进行,先编写程序,然后便开始仿真调试,通过抓取数据根据现象进行分析,然后改进,最后实现功能。但是整个过程中还是遇到以下几点小问题,总结如下,以不断提升自己的知识。
1. 串口调试助手发送格式。常见的有两种格式:字符型和HEX十六进制格式,默认识别和发送数据为字符型对应的ASCII数值。举例说明:例如待发送一个字节数据0x2A。
字符型格式发送内容为:'50','65',分别对应字符'2'和'A'的ASCII值,且每个字符为一个字节数据,故共两个字节。此外,如果数据为2a,则发送内容为'50','97',原因为'a'和'A'对应的ASCII值不同,此处在发送文件中数据的大小写格式也要注意相对应;
HEX格式发送内容为:'0x2A',一个字节的十六进制数据。
由于所用串口调试助手以发送文件方式时,默认的发送格式是字符型,故在串口接收端需要对ASCII数值进行转换为对应的字符型数据,转换依据为ASCII表即可。例如接收到的数值为0d49,则其对应的字符为'1',同理数值为0d70时,对应的字符为'F'。
2. 奇偶校验准则。之前对奇偶校验只有初步了解,只记得“奇校验就是奇数个1,偶校验是偶数个1”,没有深入搞懂具体定义。个人理解:判定某程序采用奇校验or偶校验,由该程序校验码的初始值决定的。例如,初始值为0,则采用的是偶校验;反之,则为奇校验。举例说明,串口数据位宽设定为8,某待传输数据为8'b01101101,则偶校验初始值0与该数据异或运算结果checksum 为1,使得总的1的个数为偶数个(5 + 1);此外,如果该数据为8'b00000000,0个1也是表示偶数个1。
3. 跨时钟异步通信。串口芯片的RXD和TXD管脚与FPGA相连接,二者使用的各自晶振时钟,构成跨时钟异步通信,故FPGA需要在RXD,TXD两个数据管脚进行处理。其一,对RXD信号采用FPGA时钟同步化处理;其二,对两管脚进行软件消除噪声处理。(异步信号同步化处理,软件消噪具体实现过程较为常见,此处省略)
初始调试时,我只进行信号同步化处理,接收串口数据时会偶尔产生校验错误,虽然大多数情况均正常;但是项目需要保证串口传输为零误码率,故对两管脚进行软件消除噪声处理,经过连续5次测试,每次传输数据量为102816Bytes,数据均正确;最后只需采用实际的数据流进行传输验证即可。
相关文章推荐
- HDMI/DVI接口中DDC通信电平兼容问题调试总结
- 串口调试所遇到问题,总结与借鉴
- 51单片机串口2的RS485通信调试总结
- 单片机与FPGA通信的跨时钟域问题多种解决方法总结
- 基于FPGA的SDRAM串口调试RTL…
- Linux串口调试(编程)总结(ARM通信)
- FPGA和DSP的HPI通信中的问题总结
- verilog-1 FPGA串口通信问题解析
- 基于FPGA Uart串口通信实验
- FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题
- 基于FPGA的串口通信
- 基于fpga的串口通信实现
- 基于java平台的与无线远程测控终端的串口通信
- 基于Android平台的串口通信实现
- [mtk lcd]调试问题总结
- beaglebone black 释放ttyO1作为通信串口(关闭调试串口)
- 基于CSerialPort修改类的串口调试助手编写过程中遇到的问题总结
- ssm框架学习---使用ubuntu环境下基于Intel idea搭建ssm环境一些问题总结
- 个人VC串口通信经验及相关知识总结(原)
- 在写一个FPGA的串口通讯问题