2. 基础知识
拿到一块新开发板,第一件事是什么?我个人习惯不是上电,而是先找原理图。原理图就是板子的「DNA」,CPU怎么连、DDR怎么走、外设挂在哪,全写在这张图上。你想想看,如果连芯片引脚都没搞清楚就急着写驱动,那跟闭着眼睛开车有什么区别?
这一章,我们就来聊聊怎么高效地啃下一份陌生的原理图。
获取原理图:第一道坎
正规的开发板厂商都会提供原理图PDF,通常在官网的「Documentation」或「Download」页面。但如果你拿到的是工程样机或者二手板子,可能只有一张模糊的图片,甚至只有丝印层照片。这时候怎么办?
- 官方渠道:去官网搜型号 + "Schematic",比如 "i.MX8M Mini EVK Schematic"。
- 社区资源:Linux内核的
Documentation/arm/或芯片厂商的GitHub仓库里,有时会藏着一份。 - 逆向推导:实在没有,就对着板子拍照,用万用表量关键引脚,配合芯片Datasheet反推。我曾经在客户现场干过这事,虽然累,但能救命。
识别关键芯片:板级地图的锚点
打开原理图,第一眼看到的是密密麻麻的元器件和网络标号。别慌,先找几个「锚点」——也就是核心芯片。
CPU / SoC
这是板子的心脏。通常是一个大BGA封装的芯片,周围有大量去耦电容。在原理图上找标注了 CPU、SoC 或具体型号(如 STM32MP157、RK3588)的器件。它的引脚数量最多,网络标号也最复杂。
DDR 存储器
DDR颗粒或模组,通常紧挨着CPU。原理图上会标注 DDR4、LPDDR4 或 DDR3。注意看数据位宽——是x16还是x32?这决定了你的内存带宽。
Flash 存储器
存放Bootloader和内核的地方。常见的有:
- eMMC:BGA封装,标注
eMMC或UFS。 - SPI NOR/NAND:小封装,通常8脚或16脚,标注
SPI Flash。 - SD卡座:标注
SDCARD或TF。
外设芯片
以太网PHY、USB Hub、音频Codec、PMIC(电源管理芯片)等。这些芯片通常有自己的晶振和独立电源域。
引脚功能分析:从网络标号到驱动
识别出关键芯片后,下一步就是分析它们的引脚连接。这一步直接决定了你的设备树怎么写、驱动怎么配。
网络标号命名规则
好的原理图,网络标号是有规律的。比如:
UART1_TX、UART1_RX—— 串口I2C2_SCL、I2C2_SDA—— I2C总线SDMMC0_CLK、SDMMC0_CMD—— SD/MMC接口ETH0_RXD0、ETH0_TXD0—— 以太网RGMII接口
如果遇到 GPIO1_IO03 这种标号,说明它被复用为GPIO了。具体复用功能要查芯片的Datasheet。
电源域分析
每个外设都需要供电。在原理图上找到对应的电源网络:
VCC_3V3、VCC_1V8、VCC_DDR—— 常见电压域PMIC_LDO1、PMIC_BUCK1—— PMIC输出
注意:有些外设需要多个电压,比如eMMC需要VCC(3.3V)和VCCQ(1.8V/3.3V)。接错了会烧芯片。
复用功能与电阻配置
很多SoC的引脚是复用的。原理图上通常会标注上下拉电阻或配置电阻:
R1: 10K pull-up to 3.3V—— 上拉使能R2: 0R (NC)—— 不焊,表示该功能未启用JP1: 1-2 closed—— 跳线选择功能
实战:画一张引脚功能分析图
下面这张SVG图,展示了我分析一块典型开发板时的思维流程。从SoC出发,逐层展开到DDR、Flash和外设,最后落到设备树配置。
表格:常见外设接口速查
下面这个表格,是我平时做原理图分析时常用的速查表。它列出了常见外设接口的关键信号和注意事项。
| 外设接口 | 关键信号 | 电压域 | 常见坑点 |
|---|---|---|---|
| UART | TXD, RXD, RTS, CTS | 1.8V / 3.3V | 电平不匹配时需加电平转换 |
| I2C | SCL, SDA | 1.8V / 3.3V | 上拉电阻阻值不对会导致通信失败 |
| SPI | SCLK, MOSI, MISO, CS | 1.8V / 3.3V | 极性(CPOL)和相位(CPHA)必须匹配 |
| SD/MMC | CLK, CMD, DAT0-7 | VCC(3.3V), VCCQ(1.8V/3.3V) | 走线长度需等长,否则高速模式不稳 |
| Ethernet RGMII | TXD0-3, RXD0-3, TXC, RXC, TX_CTL, RX_CTL | 1.8V / 2.5V / 3.3V | 时钟延迟(TX/RX delay)需在PCB或PHY侧配置 |
| USB 2.0 | DP, DN | 3.3V (VBUS) | 差分走线阻抗90Ω,ESD保护不能省 |
一个真实案例:我踩过的坑
几年前,我接手一块基于i.MX8M Mini的板子。原理图上看,UART2被接到了蓝牙模块上。我按常规配了设备树,结果蓝牙死活不工作。
后来仔细看原理图,发现UART2的RTS和CTS引脚被交换了——原理图上标的是RTS,实际连到蓝牙模块的CTS脚。这就是典型的「网络标号与物理连接不一致」。
从那以后,我养成了一个习惯:拿到原理图后,先拿万用表量一遍关键信号,确认网络标号和实际走线一致。别太相信图纸,尤其是多人协作的项目。
总结一下
硬件原理图分析,说白了就是三件事:
- 找核心:CPU、DDR、Flash、外设,先定位它们的位置和型号。
- 看连接:网络标号、电源域、复用功能,搞清楚每个引脚怎么连的。
- 记参数:电阻电容值、时序要求、电平标准,这些是写设备树的依据。