1、串口介绍
参考博客:《ARM芯片(S5PV210芯片)——串口通信详解》、《UART和RS232、RS485的联系和区别、以及对软件编程的影响》;
2、串口常见问题
(1)内核没有开启串口,导致没有产生设备节点;
(2)上层应用通过设备节点操作串口,但是收发数据都没有;
(3)串口上有数据传送,但是乱码;
3、内核没有串口设备节点
/ {compatible = "rockchip,rk3368";interrupt-parent = <&gic>;#address-cells = <2>;#size-cells = <2>;aliases {ethernet0 = &gmac;i2c0 = &i2c0;i2c1 = &i2c1;i2c2 = &i2c2;i2c3 = &i2c3;i2c4 = &i2c4;i2c5 = &i2c5;mmc0 = &sdmmc;mmc1 = &sdio0;mmc2 = &emmc;serial0 = &uart0;serial1 = &uart1;serial2 = &uart2;serial3 = &uart3;serial4 = &uart4;spi0 = &spi0;spi1 = &spi1;spi2 = &spi2;};
(1)检查内核有没有开启对应串口。查看dts文件或者直接在虚拟文件系统(/proc/device-tree)中查看对应串口是否使能;
(2)如果内核串口已经使能,但还是没有产生设备节点,需要确认该串口引脚是否已经被复用为其他功能。可能查看内核启动是否有相关报错打印,或者直接用devmem命令查看对应的引脚控制寄存器,确认当前引脚被配置成何种模式;
(3)不同芯片平台的内核,串口设备节点的名字不相同。比如:串口名是/dev/ttyS4,ttyS这个前缀是在串口驱动代码里确定的,串口驱动代码在drivers/tty/serial/xxx.c,后缀4是设备树里串口的别名确认的,每个串口会被取一个别名;也就是时候串口4是可以不对应/dev/ttyS4,具体要看设备树里怎么取别名;
(4)串口驱动底层是调用tty子系统,想要深入了解串口驱动,就要先了解tty驱动框架;
4、内核有设备节点但是收发数据都没有
(1)首先确认你操作的串口是不是真的用于通信的串口;
(2)确认发送线和接收线有没有接反;
(3)用示波器或者逻辑分析仪查看数据线上是不是有真的发送接收数据;
(4)通过抓波形,你这端的数据发送是正常的,怀疑是串口对端有问题,可以通过将串口线引出,用串口转USB接在电脑上,用电脑上的串口仿真软件来通信,进行验证;
5、有收发数据但是乱码
(1)确认波特率、停止位、校验位等参数,双方是否一致;
(2)确认是否将流控功能关闭(RTS/CTS);
推荐
给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转