1. 从零开始:为什么要在MT7981B上折腾串口复用?
大家好,我是老张,一个在嵌入式圈子里摸爬滚打了十多年的老玩家。今天想和大家聊聊一个非常具体,但又特别有用的实战技巧:在MT7981B芯片的OpenWrt系统里,把原本用作SPI的引脚,重新配置成串口来用。
你可能会问,路由器芯片上不是本来就有串口吗?干嘛要费这个劲?这问题问得好。我刚开始接触MT7981B平台时也这么想。但实际玩起来,尤其是在一些定制化的硬件项目里,你会发现“串口永远不够用”。比如,你设计了一块板子,主控是MT7981B,除了常规的调试串口,你可能还需要接一个GPS模块来获取精准定位,或者接一个LoRa模块做远距离通信,甚至接一个串口屏来显示状态。这时候,芯片自带的UART口可能就捉襟见肘了。
那怎么办?MT7981B这类芯片的厉害之处就体现出来了——它的很多IO引脚功能是复用的。简单理解,就是一个物理引脚,可以通过软件配置,让它今天“扮演”SPI的时钟线,明天“扮演”UART的发送线。我们今天要做的,就是把一组原本设计用来连接SPI Flash或SPI设备的引脚(比如SPI1的CLK、MOSI、MISO、CS),通过修改设备树(DTS)配置,让它们变成一组完整的UART(比如UART1的TX、RX)。
这个功能有多实用呢?就拿文章里提的读GPS数据来说,太典型了。很多GPS模块输出NMEA数据用的就是串口。如果你的板子空间紧张,或者布线已经固定,没有预留额外的UART引脚,那么复用SPI引脚就成了最经济、最直接的解决方案。不用改硬件,只需动动软件配置,就能多出一个通信通道,这性价比简直了。
所以,无论你是正在用MT7981B开发智能网关、工业路由,还是单纯想深入学习OpenWrt和Linux内核的设备树机制,掌握这套“引脚变身术”都非常有价值。下面,我就带你一步步走通整个流程,从查资料、看源码,到动手改配置,把每个细节都掰开揉碎讲清楚。
2. 实战第一步:读懂芯片手册,找到复用“密码表”
动手改代码之前,咱们得先当一回“侦探”,去芯片的规格书里找到最关键的线索——IO复用功能表。这是所有配置的源头,绝对不能错。
对于联发科的MT7981B芯片,你需要找到它的数据手册(Datasheet)或编程手册。通常,里面会有一个专门的章节,比如叫“Pin Mux”或“GPIO and Pin Control”。我们的目标,是在这个表格里找到两组信息:
- SPI1 和 SPI2 这几个引脚(CLK, MOSI, MISO, CS)对应的物理引脚编号,比如可能是
GPIO18,GPIO19等等。 - 这些同样的物理引脚,作为 UART1 或 UART2 的 TX(发送)和 RX(接收)功能时,对应的复用模式编号。
这个表格就是芯片的“密码本”。它告诉你,当你想把某个引脚从功能A切换到功能B时,需要向芯片内部的寄存器写入一个什么样的数字(复用模式值)。举个例子,你可能会看到这样一行信息:
| 引脚名 | 引脚号 | 功能0 (GPIO) | 功能1 (SPI1_CLK) | 功能2 (UART1_TX) | 功能3 (某功能) |
|---|

2565

被折叠的 条评论
为什么被折叠?



