为何板上串口不能输入

2024.07.05

一开始测试串口的时候,就发现幽兰SD口复用的串口输入、输出均正常,但板上串口反而只有输出,不可以输入,不知道什么原因。

前一段时间,与罗老师沟通,他也发现有此问题。

串口用的是海思的代码:


Shell> mm fd5f800c -w 4
MEM 0x00000000FD5F800C : 0x00009AA0 > q

确实开了UART2:

尝试将 UART2_RX_M0 UART2_TX_M0 关掉,看看主板上的串口是否会不再输出(NTP2是SD口复用串口)

猜想是正确的,主板上的串口就是UART2_M0设置(COM4 WCH-Link是板上串口)

SD口复用串口中尝试重新开启板上串口

确认已经成功开启,看到有新的输出,喜欢UEFI对硬件底层直接有效、立竿见影的控制

是UEFI串口驱动有问题吗?观察:

张老师给予指导:

这里可以其实是因为Linux内核启动后,把SD口复用串口关闭了,所以才可以,最后部分重做实验会发现Linux下面的表现其实跟UEFI下的表现是一致的。

观察串口初始化函数:

思考:UEFI UART2 串口初始化代码,而事实上ATF中其实已经是打开的,SD口的串口复用UEFI的最开端用汇编代码打开。

在串口输入函数下个断点,然后在终端输入一个字符,断点命中,停下来观察栈:

这些天阅读文档还是有用的,读得多些,之间的相互关系就更有些感觉。

与罗老师沟通,他猜想或因互斥问题。后面证明罗老师果然是对的。

(……中间隔了一段时间)

向张老师报告猜想:

赶紧实验:把SD口复用的UART2_M1清掉串口,然后看UART2_M0是否恢复可输入。

Hooray,板上串口果然不仅恢复了输出,而且还可以输入了:

让复用的SD串口有输出,没输入(在板上串口终端中)

果然又实现了,SD口复用串口的终端中果然有了输出(不能输入)。


在Linux下,表现形式也是完全一样的。

作者:朱博渊  创建时间:2024-07-05 19:56
最后编辑:朱博渊  更新时间:2024-12-20 17:01