用FPGA实现串口速率自适应

        最近一个项目要求在通信过程中串口速率可重新设置,若超时则回到默认速率。尽管改变速率有相应的握手协议,但在测试中还是时常出现通信超时不得不回到默认速率,严重影响通信效率。

        若能实现串口速率自适应则能彻底解决这问题,从网上搜索实现串口速率自适应的方法大多不合适,最后找到一篇李森源等人写的《波特率自适应信号接收装置设计及其FPGA实现》,该文章通过设置奇偶校验便可实现成倍数关系波特率的自适应,如900、1800、3600、7200、14400、28800、57600、115200、230400、460800等。

        按该文章中的思路在Vivado开发环境中用Verilog编程实现,在Zynq-7020开发板上测试,的确可行,波特率从900测到921600,发送十万个字节无一错误。

        但该文章中说“在异步串行数据传输中,允许的传输的误差范围在±4.5%”表述并不清楚。对于串口每位采样16个点,在串口设置为8E1时,每帧有11位,共176个采样点,由于串口是异步接收,由于误差的积累,最后一位(停止位)的偏差最大,因此,该位的偏差不能超过±8个采样点,此时波特率偏差为:

                                                                 8/176*100 = 4.5%

       最后一位累计偏差高达49.5%,若发送方是正偏差、接收方是负偏差,双方在此偏差下是无法正常通信的,要想正常通信收发双方的最后一位累计偏差不能超过25%。在工程实践中一般要求波特率的误差不能超过2%,最好小于1%。

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值