Skip to main content

Uart 编程

本章介绍YY3588开开发板串口的 工作模式、流控、作为控制台使用、ttl转usb、ttl转rs232 (以串口1为例)

实验环境:windows PC 电脑一台; YY3588 开发板 debian12 系统一台。

1 工作模式

串口有两种工作模式分别是中断模式和 DMA 模式。

1.1 中断模式

内核默认配置串口为中断模式。中断模式下传输速率快,但是在传大量数据的时候很容易丢包或者出错,所以当数据量比较大的时候请不要使用中断模式,可以考虑下面的DMA模式。
有类似的打印log

failed to request DMA, use interrupt mode

1.2 DMA 模式

DMA 模式主要是传输大量数据的时候使用。内核会为串口提供一个缓存空间接收数据来尽量降低串口传输的丢包率。缓存空间限默认大小为 8K 如果一次传输超过缓存大小就会丢包,所以使用 DMA 模式的话需要发送端需要分包发送。UART使用DMA传输模式只有在数据量很大时才会产生较为明显的减轻CPU负载的效果。一般情况下,和使用中断传输模式相比,UART使用DMA传输模式并不一定能提高数据传输速度。

DTS 配置(以串口1为例)

&uart1 {
+++ status = "okay";
+++ dma-names = "tx", "rx";
};

2 流控

UART使用硬件自动流控时,需要确保UART驱动使能硬件自动流控功能,且在dts中已经切换cts和rts流控引脚的iomux。建议在高波特率(1.5M波特率及以上)、大数据量的场景下都使用硬件自动流控,即使用四线UART。

2.1 硬件支持

硬件流控需要有硬件支持,请确认你的设备是不是支持。

2.2 DTS 配置

&uart1 {
+++ pinctrl-0 = <&uart1m0_xfer &uart1m1_ctsn &uart1m1_rtsn>;
};

2.3 应用层设置

应用层也需要打开流控的设置,这里介绍 stty 如何打开流控。

2.3.1 打开流控

# stty -F /dev/ttyS1 crtscts

2.3.2 检测流控是否打开(前面有 - 代表该功能已经关闭)

# stty -F /dev/ttyS1 -a | grep crtscts
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts

3 作为控制台

YY3588开发板默认uart2配置为ttyFIQ0设备,也就是我们说的debug口,一般不需要修改。

如果客户需要将普通串口配置成为控制台串口,需要禁用对应的普通串口uart节点,然后使能fiq_debugger节点。

3.1 menuconfig 配置

Device Drivers --->
[*] Staging drivers --->
Android --->

3.2 DTS 配置

chosen: chosen {
bootargs = "earlycon=uart8250,mmio32,0xfeb40000 console=ttyFIQ0";
};
fiq-debugger {
compatible = "rockchip,fiq-debugger";
rockchip,serial-id = <1>;
rockchip,wake-irq = <0>;
/* If enable uart uses irq instead of fiq */
rockchip,irq-mode-enable = <1>;
rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */
interrupts = <GIC_SPI 252 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&uart1m0_xfer>;
status = "okay";
};
&uart2 {
status = "disabled";
};

说明:

  • pinctrl-0 = <&uart1m0_xfer>; # 设置为uart1的
  • bootargs = "earlycon=uart8250,mmio32,0xfeb40000 console=ttyFIQ0"; # 基地址改为uart1的
  • rockchip,serial-id = <1>; # 修改为你想要的串口号
  • rockchip,irq-mode-enable = <0>; # 配置为1使用irq中断,配置为0使用fiq中断。

4 TTL转USB小板

4.0 准备工作

  • 确保PC端安装了CH340驱动。
  • TTL 转 USB 模块一个
  • 4pin1.25端子连接线一条

4.1 硬件连接

ttl转usb硬件连接图.jpg

4.2 软件查看

4.2.1 找到设备管理器的串口号

找到设备管理器的串口号.png

4.2.2 电脑端软件和板端配置好波特率等

  • 波特率:1500000
  • 数据位:8
  • 停止位:1
  • 奇偶校验:无
  • 流控:无

4.2.3 测试收发

这里以mobaxterm软件免费版演示,动图如下

ttl转usb收发视频.gif

5 TTL转RS232

5.0 准备工作

  • 确保PC端安装了PL2303驱动
  • TTL 转 232 模块一个
  • 232 转 USB 模块一个
  • 4pin1.25端子连接线一条

5.1 硬件连接

  1. 整体连接
    ttl转232转usb实物连接图.jpg
端口板端TTL转232模块端
对应TXTX
对应RXRX
对应VCCVCC
对应GNDGND
  1. 模块图
    ttl转232公头排针款.jpgttl转232母头排针款.png

5.2 软件收发

5.2.1 找到设备管理器的串口号

设备管理器查看串口号.png

5.2.2 电脑端软件和板端配置好波特率等

  • 波特率:1500000
  • 数据位:8
  • 停止位:1
  • 奇偶校验:无
  • 流控:无

5.2.3 测试收发

这里以mobaxterm软件免费版演示,动图如下

ttl转232视频.gif