linux内核中串口的收发流程

一、介绍
在linux开发应用的时候,经常会碰到串口收发数据丢包,如果要排除bug就需要知道内核中串口的流程

二、串口收发流程
在这里插入图片描述硬件一般会有串口fifo,存储数据,一般16byte或者32byte以减少cpu的中断次数

1)外部数据经过硬件串并转换到硬件fifo
2)硬件fifo满了以后触发中断启动dma
3)dma将fifo里面的数据搬运到软fifo(一般是一个大数组)
4)应用层平时的read,write就是直接读取的软fifo里面的数据

这个软fifo是可以配置的,配置方法参考我另外改串口fifo大小的文章

三、对于串口丢数据的排除
1)硬fifo到软fifo之间的丢失,这种一般是中断被屏蔽导致
查看方法
查看cpu中断

cat /proc/interrupts 查看系统中各个设备的中断号
cat /proc/stat
1列是中断号
2列是历史中断次数
34列中断名称

解决方法
如果是多核cpu直接把串口中断绑定到另外的核

echo "2" >> /proc/irq/38/smp_affinity
echo 输入的数字的各个bit为1代表使用对应的CPU,比如bit0为1代表使用CPU0,可同时绑定多个CPU。

单核cpu的
1.首先关闭uboot和内核的调试打印信息,内核和uboot的打印肯定优先与应用层,这种会导致发送丢包
2.尽量优化中断处理流程,拆分一次传输的size。
3.降低串口波特率。
4.找出执行时间较长的中断处理程序,视情况来决定在它屏蔽中断时不屏蔽串口的中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值