您的位置:首页 > 其它

基于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,数据均正确;最后只需采用实际的数据流进行传输验证即可。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息