为何板上串口不能输入
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-12-20 17:01