基于FPGA的串口通信调试问题总结

串口通信调试总结                      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,数据均正确;最后只需采用实际的数据流进行传输验证即可。

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值