uartlite 双工时发数错误

15 篇文章 0 订阅

1、测试环境

        跑linux;

        使用uartlite,波特率设置为230400;

        发送端按32字节,间隔20ms循环发送,pc接收;

        接收端,pc发送按256字节,间隔20ms;

        连续测试,pc接收1万包,32万字节。

2、问题和现象

        当双向工作时,pc接收到的数据有百分之2的误包率,错误方式很规则,都是第二字节和第一字节相同;

        当pc不发送时,连续测试无丢包,无错字节。

3、分析过程

        裸跑测试发现双工测试无错字节;

        使用ps的串口,按相同方法测试,也没问题;

        使用uartlite,波特率降低到115200(pc发送的256字节降低到64字节),误包率降低到万分之5,有明显的降低;

        开始怀疑uartlite的驱动,查看kernel源码,在文件“linux-xlnx/drivers/tty/serial/uartlite.c”中,监控发送函数“ulite_transmit”,其中的“uart_out32”中发现了数据错误;

        后参考“https://github.com/Xilinx/linux-xlnx/blame/master/drivers/tty/serial/uartlite.c”,在中断中加自旋锁,测试正常。

4、解决方法

        在中断函数中加入自旋锁spin_lock_irqsave(&port->lock, flags);spin_unlock_irqrestore(&port->lock, flags);

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值