RK3568-UART通信

本文详细介绍了RK3568芯片的10个UART控制器,其功能特点包括FIFO、多种速率支持和校验方式。文章还涵盖了如何在Linux环境下使用8250驱动,以及硬件配置步骤,如设备树和引脚设置。

RK3568-UART通信

1. 功能特点

RK3568有10个UART控制器,对应设备树里的uart0-uart9。 Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准,支持以下
功能:

  • 包含2组64字节的 FIFO,用于接收和传输
  • 支持流控
  • 支持速率 115.2Kbps, 460.8Kbps, 921.6Kbps, 1.5Mbps, 3Mbps, 4Mbps
  • 支持5、6、7、8 bits数据位。
  • 支持1、1.5、2 bits停止位。
  • 支持奇校验和偶校验。
  • 支持基于中断/DMA 模式

在Linux kernel 4.4和Linux kernel 4.19中,使用8250串口通用驱动,以下为主要驱动文件:

drivers/tty/serial/8250/8250_core.c # 8250串口驱动核心
drivers/tty/serial/8250/8250_dw.c # Synopsis DesignWare 8250串口驱动
drivers/tty/serial/8250/8250_dma.c # 8250串口DMA驱动
drivers/tty/serial/8250/8250_port.c # 8250串口端口操作
drivers/tty/serial/8250/8250_early.c # 8250串口early console驱动

2. 使用方式

厂家已经适配好了UART控制器的驱动,只要配置好设备树,用户空间就可以使用tty的接口进行读写操作,设备节点为/dev/ttyS0-9。

UART控制器的配置在rk3568.dtsi中,默认是关闭的。

uart3: serial@fe670000 {
		compatible = "rockchip,rk3568-uart", "snps,dw-apb-uart";
		reg = <0x0 0xfe670000 0x0 0x100>;
		interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&cru SCLK_UART3>, <&cru PCLK_UART3>;
		clock-names = "baudclk", "apb_pclk";
		reg-shift = <2>;
		reg-io-width = <4>;
		dmas = <&dmac0 6>, <&dmac0 7>;
		pinctrl-names = "default";
		pinctrl-0 = <&uart3m0_xfer>;
		status = "disabled";
	};

引脚的配置在rk3568-pinctrl.dtsi中。

uart3 {
		/omit-if-no-ref/
		uart3m0_xfer: uart3m0-xfer {
			rockchip,pins =
				/* uart3_rxm0 */
				<1 RK_PA0 2 &pcfg_pull_up>,
				/* uart3_txm0 */
				<1 RK_PA1 2 &pcfg_pull_up>;
		};

		/omit-if-no-ref/
		uart3m0_ctsn: uart3m0-ctsn {
			rockchip,pins =
				/* uart3m0_ctsn */
				<1 RK_PA3 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		uart3m0_rtsn: uart3m0-rtsn {
			rockchip,pins =
				/* uart3m0_rtsn */
				<1 RK_PA2 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		uart3m1_xfer: uart3m1-xfer {
			rockchip,pins =
				/* uart3_rxm1 */
				<3 RK_PC0 4 &pcfg_pull_up>,
				/* uart3_txm1 */
				<3 RK_PB7 4 &pcfg_pull_up>;
		};
	};

使用的时候在rk3568-evb1-ddr4-v10.dtsi中开启uart,配好引脚就可以了。

&uart3 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&uart3m1_xfer>;
};
### RK3568 平台 UART5M0 传输问题解决方案 对于RK3568平台上遇到的UART5M0传输问题,解决方法可以从设备树配置、硬件连接以及软件调试等多个方面入手。 #### 设备树配置调整 确保在`rk3568-evb1-ddr4-v10.dtsi`文件中正确启用了UART5并设置了相应的引脚控制。如果使用的是UART5M0,则应有如下类似的设置: ```dts &uart5 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart5m0_xfer>; }; ``` 此段代码用于激活UART5接口,并指定其使用的具体引脚组[^1]。 #### 检查硬件连线 确认物理接线无误非常重要,特别是当涉及到不同模式下的信号定义时(如UART5M0)。错误的线路连接可能导致数据无法正常发送或接收。 #### 调整波特率参数 由于UART波特率计算方式为 `工作时钟源 / 内部分频系数 / 16` ,因此可以尝试通过修改内核中的配置来改变实际运行速度。为了验证当前系统的UART时钟频率,可执行以下命令: ```bash cat /sys/kernel/debug/clk/clk_summary | grep uart ``` 这有助于判断是否存在因时钟不匹配而导致的数据丢失现象[^2]。 #### 使用串口监控工具排查异常 利用像SecureCRT这样的终端仿真程序可以帮助实时观察通信过程中的任何潜在问题。注意观察是否有乱码出现或是特定字符被截断等情况发生,这些都可能是指示着底层存在问题的关键线索。 #### 日志分析与进一步诊断 收集系统日志信息也是解决问题的有效途径之一。关注启动过程中有关于UART初始化的日志条目,寻找可能存在的警告或错误提示。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangYi0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值