rockchip瑞芯微uart调试指南

UART调试指南
配置文档请参考RKDocs中的《UART开发指南》
本文皆以uart1为例
1Dts配置:
打开uart:
在dts中添加:
&uart_bb {
status = "okay";
dma-names = "!tx", "!rx";
pinctrl-0 = <&uart1_xfer>;
广州城市职业学院国学院};
根据需要打开关闭uart的dma功能,只有数据量大时,才考虑使用dma搬运,默认不使用dma
dma-names = "tx", "rx"; 使能DMA发送和接收
dma-names = "!tx", "!rx"; 禁止DMA发送和接收
rts与cts需要硬件支持,使能rts,cts前请确定硬件有接这两个pin
pinctrl-0 = <&uart1_xfer, &uart1_cts, &uart1_rts>;//使能cts,rts,
以上配置完成后,烧录resource.img后,板子上会出现/dev/ttyS1节点
2调试方法:
2.1如何测试uart
通常用两种方式测试:
1:与pc通讯
2:自收发测试
蛇纹岩2.1.1与pc通讯
通常先将开发板与pc通讯,通讯正常后,再与外设通讯。按以下步骤与pc通讯:
1:首先开发板上装uartapk,可网上下载,晚上有很多串口apk,注意,如果有硬
件流控(即rts,cts),则需要下载支持硬流控的串口apk
2:pc端下载串口工具,如securecrt
3:通过串口转usb小板(淘宝有售),将串口接至pc上,securecrt打开对应端口(端口号可在“设备管理-->端口”中查看),设置波特率,通常使用115200
4:开发板端打开串口apk,设置流控及波特率,打开节点/dev/ttyS1,至此,可使用uart进行通讯
党的十五大报告全文2.1.2自收发测试
1:首先开发板上装uartapk,可网上下载,网上有很多串口apk,注意,如果有硬件流控(即rts,cts),则需要下载支持硬流控的串口apk
2:将uart的tx,rx互连,若有cts,rts,将cts接地,rts悬空
3:打开apk,进行测试
2.2常见问题及调试方法
2.2.1串口无法输入或输出
通常无法输入或输出有两种可能
1:串口打开了硬流控,且cts未拉低,导致开发板不能输出
2:uart的tx或rx复用有问题
排查方法:
使用io命令,查看寄存器配置。Io命令使用方法:
1:向rk咨询,获取芯片trm手册
2:基本所有的gpio复用由grf控制器确定,这里以3288trm为例:
首先查看trm的System Overview章节的Address Mapping小节,搜grf可查到
ds工艺Grf寄存器的基地址为0xff770000
再到grf章节,General Register Files (GRF)中,搜索uart1(或者直接看硬件对
应的gpio),可查到uart1是由GRF_GPIO5B_IOMUX寄存器控制,查看
GRF_GPIO5B_IOMUX偏移地址为0x0050,即实际地址为:
0xff770000+0x0050=0xff770050
3:在串口或adb中使用命令:
su
io -4 -r 0xff770050
得到结果:
即可读到该寄存器的值,如下图中的寄存器说明,如果只开了uart1的tx,rx,未打开cts,rts,则对应结果的bit[7:0]应该为0x05:
如有异常,则应该到dts中搜索,是否其他驱动复用了这几个pin脚rq
2.2.2串口输出乱码
输出乱码通常有两种可能:
1:波特率误差较大
2:串口波形异常
检查方法:
如2.1中所述将板子和pc相连,在板子端输出字符串“UUUUUU”,U对应的ascii码值为0x55,串口波形为01010101,此时用示波器测量开发板uart0 tx 端口,测量输出的波形,如下图所示是输出“U”时的波形:
测量频率:
可看到实际波特率为57.67k*2=115340
(115340-115200)/115200=0.0012152777777778
误差远小于2%,因此该波特率可接受,且无乱码
如果波形有异常则需要检查硬件以及查看软件是否需要配置内部上下拉
2.2.3串口乱码时检查串口时钟
正常常用的串口波特率rockchip都是支持的,如4800,9600,115200等,准确率也较高,一般1.5M以下的波特率都可以分出来。
也有个别客户会要求使用一些不常见的波特率,此时需要根据波特率计算时钟。
波特率=时钟源/16/DIV。(DIV是分频系数)
Div是系统会自动为uart控制器计算,数值为整数,以2.2.2中测量的115200波特率为例:
1:在dts中我们可看到时钟源:
uart_bt: serial@ff180000 {
compatible = "rockchip,serial";
reg = <0xff180000 0x100>;
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
贝多芬百年祭clock-frequency = <24000000>;//这里设置的为24M时钟源
clocks = <&clk_uart0>, <&clk_gates6 8>;
配置好后,开发板开机,可用命令获取当前uart1时钟:
cat /d/clk/clk_summary | grep uart1
clk_uart1    2    2 24000000

本文发布于:2024-09-22 08:22:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/134586.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:串口   需要   输出   使用   打开
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议