SD串口

GDK8主板使用的RK3328 SoC有三个独立的UART,分别是UART0、UART1和UART2。
对于UART2,它有的通信信号有两种连接模式,分别成为UART2m0和UART2m1,RK3328 TRM的第17章接口描述一节里有下面这张表描述。

简单来说,m1方式是与GPIO和POWERState复用信号,m0方式是与SDMMC复用信号。

RK3328最初的开发板和硬件设计手册里使用和描述的都是m1方式,GDK8也是如此。GDK8主板背面的TX、RX、GND三个信号是便是UARTm1的实物。


因为GDK8的外壳没有串口位置,所以连接m1模式的串口很不方便。
在GDK8的最初版本发布大约2年后,格蠹准备做GDK8的新镜像时,想解决这个问题,希望通过SDMMC来连接串口。
小伙伴使用刘姥姥驱动做试验,修改寄存器。

上午改好一版后,发现关键的GRF_CON_IOMUX[0]位无法修改,误以为是只读的。
老将出马,发现是编码疏忽,30000前忘记加0x了。
纠正bug后,GRF_CON_IOMUX[0]位成功被设置为0。设置之前为1,说明是工作在m1模式,根据我们的经验,主板上的串口也是默认工作的。

但是接了SD串口转接头后,主机端收不到串口数据。

下午,咨询了硬件工程师后,坚定信心,终于在即将下班前,小伙伴发来好消息:

上面这条信息是通过SD转接头从GDK8发送到主机端的,也就是以m0方式传递的!
新的小改动是波特率,因为此前使用m1方式调试时,dts里配置的是115200,所以误以为还是这个值,但其实根据UART_DLL和UART_DLH寄存器的值计算,应该是1.5M。
dlh=1,uart_clk_sel=2’b10-24mhz,波特率=24m/(1*16)=1.5

经过一天的努力,期待许久的一个目标实现了。
手里有GDK8的小伙伴可以亲自体验一下!

作者:Zhang Yinkui  创建时间:2024-05-14 17:17
最后编辑:Zhang Yinkui  更新时间:2024-07-05 11:40