尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

STM32MP157评估板实战:从硬件选型到Linux启动全流程解析

STM32MP157评估板实战:从硬件选型到Linux启动全流程解析 板子还没捂热先把串口线插上电脑风扇声一响U-Boot 日志刷刷往下滚——这种“从零把一个 MPU 跑起来”的体验和以前玩 MCU 完全是两个世界。STM32MP157 这颗料在这波异构 MPU 里热度一直不低双核 Cortex-A7 跑 Linux、Cortex-M4 做实时控制一块板子能同时干应用处理器和单片机的活。很多人拿到评估板的第一反应是“我该先点灯还是先跑系统”我的建议是先把硬件手册里那些启动、供电、网络接口的说明吃透再动手。这篇就围绕手头这块带 STM32MP157 的评估板把从选板、上电、连网到配 Linux 的完整链路捋一遍全是实操视角适合刚入坑 MPU 开发的工程师也适合正在评估板卡选型的朋友。1. 先搞清这颗 MPU 能干什么再谈评估板选型1.1 MPU 和 MCU 不再是二选一STM32MP157 的异构架构很多从 STM32F4、H7 走过来的朋友第一次听到 STM32MP157 是“MPU”而不是“MCU”多少有点懵。简单区分MCU 是单片机跑裸机或者 RTOS引脚多、外设丰富、实时性好MPU 是微处理器主频高、能跑 Linux但传统上需要外部配 DDR、电源管理、存储外围电路复杂得多。STM32MP157 把这两者的边界给抹掉了——片内集成了双核 Cortex-A7最高跑到 650MHz还有一颗 Cortex-M4最高 209MHz。A7 跑 Linux 或 Android负责用户界面、网络协议栈、文件系统这些重活M4 跑裸机或 FreeRTOS专门处理中断密集、时序要求高的实时任务。这种异构架构的实际意义得用场景说话。比如做一个带 HMI 的工业控制器过去只能用“ARM9/Linux 独立 MCU”的组合两块芯片要设计两套供电、两套调试口、中间还得加串口或 SPI 通信协议。现在一颗 STM32MP157 就搞定了A7 上跑 Qt/图形界面M4 直接采集编码器或执行快速闭环两边通过共享内存或 RPMsg 通信省掉的 BOM 成本和联调时间相当可观。所以评估板的价值不只是“能跑 Linux”这么简单。对于第一次接触这类异构 MPU 的开发者评估板把最小系统的坑全部替你踩完了——DDR 布线、电源时序、复位电路、启动配置这些都是照着参考设计画 PCB 时最容易翻车的地方。买一块官方或者大厂的评估板本质上是买一个“已验证可行”的硬件起点后续要么直接在这块板子上做原型验证要么等软件调通后再照着参考设计画自己的板子。1.2 评估板选型时我重点看四样东西评估板不是越贵越好关键是看它跟你目标产品的重合度。我一般会重点检查四个方面第一是 DDR 类型和容量。STM32MP157 支持 DDR3、DDR3L、LPDDR2、LPDDR3评估板上通常焊的是 DDR3L 或 LPDDR2容量从 256MB 到 1GB 不等。如果你最终产品打算用 512MB 的 DDR3L那选板时最好选同类型同容量的因为软件侧的 DDR 初始化参数训练序列、时序参数是跟着具体颗粒走的早期在评估板上把 DDR 调稳后面移植到自己的板子能省很多事。第二是存储介质和启动方式。绝大多数评估板会提供 SD 卡启动、eMMC 启动、USB 烧录这几条链路。SD 卡启动最适合开发阶段因为换内核、换根文件系统只需要重新烧一张卡eMMC 启动更接近量产形态。我建议优先选带 MicroSD 卡槽且支持从 SD 卡启动的板子开发调试期间你会感谢这个设计。第三是网络接口。STM32MP157 内部带千兆以太网 MAC但 PHY 芯片是外置的评估板通常会配一个 RGMII 接口的 PHY比如 KSZ9031、RTL8211F。网络接口对你后期调试至关重要——NFS 挂载根文件系统、SSH 登录、scp 传文件、在线装软件包全都依赖网口。有些板子还带 WiFi 模块但开发阶段有线网口永远比无线稳定别为了省一个网口去买阉割版。第四是调试和扩展接口。至少要有标准的 2.54mm 排针引出大部分 GPIO这样接逻辑分析仪、传感器、外部设备才方便。调试接口方面ST-Link 或者 JTAG/SWD 至少要有一个。另外留意板子上是否预留了 Arduino 兼容排针或 Raspberry Pi 兼容接口这类生态兼容设计能让你复用很多现成的扩展板。用一个表格总结 MCU 板和 MPU 板的选型关注点差异维度MCU 评估板如 STM32F4MPU 评估板如 STM32MP157DDR不需要关注容量和型号直接影响后续移植启动方式一般 SWD 烧录即可SD/eMMC/USB 多链路需要理解 boot 流程网络多为可选扩展千兆网口是刚需调试和挂载都用它软件环境裸机/RTOSIDE 直接点运行Linux 交叉编译、设备树、U-Boot工具链复杂得多电源3.3V/5V 简单供电多路电源时序不能随便上电2. 从用户手册里拆解评估板的硬件设计2.1 供电系统的分层设计MPU 比 MCU 娇贵在哪拿到用户手册我第一件事不是看引脚定义而是看供电框图。STM32MP157 评估板的外部输入通常是 5V DCType-C 或 DC 座板载 PMIC 或 DC-DC 把它转换成多路电压内核电压、DDR 电压、3.3V IO 电压、1.8V 模拟电压等。A7 内核和 M4 内核可能在不同的电压域跑不同的频率等级OPP对电压的要求也不一样。这里有个新手容易踩的坑MCU 开发时你习惯了随便找个 USB 线供电就开始点灯但 MPU 评估板对供电质量和时序有要求。手册里通常会画一个上电时序图明确哪一路电压要先起来、哪一路要后起来、复位信号要等所有电压稳定后再释放。违反时序可能导致芯片进入异常状态表现就是上电后串口无输出、U-Boot 跑不起来、或者跑起来后随机死机。实操中我一般这样检查电源部分先用万用表确认 5V 输入正常再量 PMIC 输出的关键电压是否在手册标称范围内。上电时按住复位键等电源灯稳定后再松开这种方式可以减少上电瞬间电源抖动对启动流程的影响。另外要留意很多评估板的 USB Type-C 口同时承担供电和串口/烧录功能插拔 USB 线时不要带电去碰板子上的排针和接口瞬时掉电容易损坏 SD 卡的文件系统。2.2 DDR 与存储最容易出问题的地方评估板已经替你踩完坑DDR 是 MPU 评估板硬件设计里风险最高的部分。STM32MP157 的 DDR 控制器支持 DDR3/DDR3L/LPDDR2/LPDDR3跑在 533MHz 甚至更高。DDR 布线讲究等长、阻抗控制、参考平面完整还要在数据线、地址线上加终端电阻VTT 电源要单独设计。这些对 PCB 设计经验不足的人来说几乎不可能一次画对即使画对了DDR 初始化参数training 参数也需要调试。评估板的做法是由原厂或板厂已经完成了 DDR 的布局布线和参数调优并且在 U-Boot 里配置好了对应的 DDR 初始化序列。这意味着拿到的板子默认就能稳定跑 DDR你不需要关心 VREF 校准、写电平校准这些底层细节。但要注意U-Boot 里的 DDR 参数是从 DDR 颗粒型号和 PCB 布线情况推导出来的如果你后续自己画板子但颗粒型号和布线方式变了这套参数往往不能直接套用。存储方面SD 卡是开发阶段最常用的介质。评估板一般支持 SD 卡上的多分区布局第一个分区通常是 FAT 格式的 bootfs放 U-Boot、内核镜像、设备树文件第二个分区是 ext4 格式的 rootfs放根文件系统。有的板子还支持在 SD 卡上划分一个可选的 userdata 分区。这种布局的好处是启动过程简单直观SoC 上电后从 boot 引脚选择的介质读取 U-BootU-Boot 再根据环境变量加载 bootfs 里的内核和设备树最后挂载 rootfs。2.3 启动方式与拨码开关选对介质才能开机STM32MP157 的启动方式由 BOOT 引脚的上下拉状态决定评估板上通常用拨码开关DIP switch或跳线帽来配置。常见的启动介质有 SD 卡、eMMC、USB、UART串口烧录模式等。查看手册时重点记住拨码开关的 ON/OFF 组合对应的启动介质这个组合在不同厂商的评估板上不一样甚至同一厂商不同批次也可能调整所以一定要以手头板子的丝印和手册为准。启动模式的优先级也值得注意。比如 SD 卡启动时如果 SD 卡里没有有效的镜像有的板子会回退到 USB 烧录模式有的板子则会直接卡住。调试时我习惯先把拨码开关拨到 USB 烧录模式用 STM32CubeProgrammer 连接一下确认芯片能识别再切回 SD 卡启动。这样能最快区分“硬件问题”还是“镜像问题”。注意调整拨码开关前务必断电。带电拨动 BOOT 引脚配置轻则启动失败重则可能损坏芯片内部启动 ROM 的配置寄存器状态。3. 开机第一步串口、网线直连与开发环境3.1 电源连接与串口调试你的第一块“屏幕”MPU 开发里串口就是你的主屏幕。评估板一般会板载 USB 转串口芯片比如 ST-LINK 虚拟串口或独立 CH340/CP2102通过一根 USB 线连接到电脑就会在电脑上枚举出串口设备。Linux 下通常是/dev/ttyACM0或/dev/ttyUSB0Windows 下是一个 COM 端口。串口参数一般是 115200-8-N-1用 minicom、PuTTY 或者 VS Code 的 Serial Monitor 插件都可以连接。上电后第一眼看到的是 ROM 代码输出的启动信息接着是 U-Boot 的日志最后是 Linux 内核的启动 log。这一串输出基本就是整个系统从无到有的完整生命线。我之前遇到过一种情况串口完全没有输出但板子的电源灯是亮的。排查得很狼狈最后发现是 USB 转串口芯片的驱动没装好系统枚举出来的是未知设备。所以串口不通时先查设备管理器再查线材最后才考虑板子的问题。另外串口波特率别凭经验猜严格按照手册给的参数来搞错了就是一堆乱码。3.2 网线直连的 IP 规划没有路由器也能干活很多评估板附带的手册里会教你用网线把板子和电脑直连也就是“网线直连”这种操作。它的应用场景很实际手头没路由器或者开发环境需要避免和办公网络冲突时直接一根网线把电脑和板卡的网口接起来组成一个临时的点对点局域网就可以完成 SSH、NFS、文件传输等所有调试工作。网线直连时IP 要手动规划。常见做法是给电脑网口设置一个私有 IP比如 10.0.0.2子网掩码 255.255.255.0板卡设置成同一网段的 10.0.0.1。板卡侧的 IP 可以在 U-Boot 里通过环境变量或者 Linux 里用ifconfig临时设置。网络直连后先用ping验证链路能通再继续 SSH。提示电脑如果同时连着 WiFi要先确认 WiFi 网段的地址和板卡直连网段不冲突。更稳妥的做法是在系统网络设置里把直连网卡的接口“仅用于本地网络”或者直接临时禁用 WiFi走完调试再恢复。3.3 登录与文件传输SSH、scp 和 NFS 三板斧网络打通后登录板卡基本都用 SSH。评估板 Linux 系统默认的账户和密码在手册里有一般能直接 SSH 登录。登录后第一件事是确认当前的 IP、内核版本和文件系统剩余空间这几个信息决定了后续能干什么。文件传输最常用的是scp和rsync。交叉编译好的内核镜像、设备树文件、可执行程序直接 scp 到板子上就能运行。如果开发的是大型应用每次全量拷贝太慢用 rsync 只同步差异文件效率高很多。我在开发时喜欢在电脑上开一个 NFS 共享目录把板卡的某个目录挂载到电脑上这样电脑上编译完的文件板子立即可见省去反复拷贝的过程这个习惯在调试 kernel 模块时尤其好用。4. 从 CubeMX 到设备树Linux 侧的配置链路4.1 为什么会用 CubeMX 去配置一颗 Linux 芯片用惯了 STM32CubeMX 的 MCU 开发者第一次打开 STM32MP1 系列的支持包时会发现它确实也能用但生成的“代码”不是.c文件而是设备树源文件DTS和一堆用于 OpenSTLinux 构建的工程文件。这是因为 STM32MP1 上 Linux 内核对外设的描述完全依赖设备树Device Tree。设备树的作用是描述硬件资源有哪些外设、挂在哪个地址、中断号是多少、引脚复用关系如何、时钟源是什么。Linux 内核启动时会解析设备树根据里面的描述去初始化设备驱动。你可以把设备树理解成“硬件的说明书”它跟内核代码分离换一块定制板时不需要改内核源码只需要改设备树。整套配置链路是CubeMX 里勾选外设、配置引脚复用生成设备树源文件然后放进 OpenSTLinux 的 SDK 或 Yocto 构建系统里编译最终生成uImage、dtb文件再把这两个文件放到 SD 卡的 bootfs 分区复烧或替换后重启内核就会按新的硬件描述初始化外设。理解了这条链路开发时遇到“我配置了 GPIO 为什么没反应”这类问题就能顺着链路一步步查而不是盲目怀疑硬件。4.2 改一个 GPIO 点灯看看整条配置链路怎么走拿最常见的 GPIO 点灯举例。假设评估板上有一颗 LED 接到了某个引脚你要通过 Linux 控制它亮灭。在 MCU 上直接写寄存器或者调 HAL 库就行在 MPU 上要经过这几步打开 CubeMX选择对应芯片型号导入评估板默认配置在引脚视图里找到 LED 对应的引脚把它配置为 GPIO 输出生成设备树源文件打开.dts能看到该引脚节点下多了一段gpios描述用 OpenSTLinux SDK 里的编译脚本重新编译设备树得到新的.dtb文件把.dtb传到板子的 bootfs 分区覆盖原文件重启启动后进入 Linux在/sys/class/gpio或者用libgpiod工具控制这个引脚的电平。这套流程里最容易出问题的是第 4 步。很多新手直接在板子上用dtc反编译修改 dts改完再编译回去结果因为语法错误把设备树搞坏了启动卡在内核阶段。我的建议是开发阶段始终保留一套“能用”的原始 dtb 备份改任何设备树之前先手动拷贝一份。这套备份救了我好几次尤其是在尝试修改 DDR 参数、新增 I2C 设备节点这类高风险操作时。4.3 关于 AOTUSAR 与 M4 核顺带澄清一个常见的认知混淆在 MPU 相关的技术讨论里会看到 AOTUSAR、Davinci Configurator 这些词有的新手会把这些和 Linux 设备树混淆。简单梳理一下STM32MP157 的 M4 核心既可以跑裸机、FreeRTOS也可以作为 AOTUSAR 的 MCU 核心来用。如果你做的是汽车电子相关项目并且需要 M4 跑 AOTUSAR CP 软件栈那确实会用到 Davinci Configurator 这类 AOTUSAR 配置工具它负责生成 RTE、SWC 描述、ECU 配置等——这是完全独立于 Linux 设备树的一套东西。这里提醒一句Dubai 评估板上的 M4 核心多数时候不是直接跑 AOTUSAR而是作为裸机/RTOS 核和 A7 协同工作。如果产品最终要上 AOTUSAR一般是在量产板阶段由软件团队单独搭建 AOTUSAR 工程和评估板自带的 Linux 参考实现没有太多重叠。不要把 Linux 侧的配置思路照搬到 AOTUSAR 工具链里两者的抽象层次、配置流程和生成产物几乎没有交集。至于 M4 和 A7 的通信最常用的方式是 RPMsg 和共享内存。A7 上跑 Linux加载一个 RPMsg 驱动M4 上跑一个小型 RTOS 应用通过 RPMsg 协议发消息。两边共用一段物理内存硬件层面不需要额外连线。这套机制在评估板的参考例程里通常有现成的 demo是异构开发入门很值得花时间研究的模块。5. 常见问题与排查技巧实录5.1 网线直连 ping 不通怎么办这是新手提到最多的问题。网线直连 ping 不通原因通常集中在几个方向第一板卡侧的 IP 没设好。很多评估板默认 IP 在出厂固件里可能和你的网段不同需要进入系统后用ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up重新配置。第二电脑侧的网卡没有启用或者被防火墙拦截。Ubuntu 下要检查 NetworkManager 是否接管了直连网卡Windows 要确认“以太网”适配器的 IP 设置。第三网线本身有问题——交叉线、直通线在千兆网卡下其实都能自适应但劣质网线或接触不良会导致协商失败。排查时我习惯先在电脑上ping 10.0.0.1如果不通看板卡串口日志里网络驱动有没有起来、有没有报 PHY 链接错误。再在电脑上arp -a看看有没有学习到板卡的 MAC 地址如果 ARP 表里没有说明二层都不通问题在物理层或驱动层如果 ARP 能学到 MAC 但 ping 不通问题大概率在三层路由或防火墙。5.2 板卡启动卡在某个位置怎么看串口日志定位系统启动卡住的定位思路是分阶段看日志。第一阶段是 ROM 代码和 U-Boot 输出如果卡在这一段通常是 DDR 初始化失败、启动介质读取失败、或者镜像文件损坏。第二阶段是 U-Boot 加载内核和设备树如果卡在这里大概率是 bootfs 分区文件缺失、设备树有语法错误、或者内核镜像格式不对。第三阶段是内核解压和设备初始化如果卡在内核 log 的半途要看最后打印的几条信息常见的有驱动 probe 失败、根文件系统挂载错误。一个容易忽略的细节内核启动时有些日志默认被 console 的 loglevel 过滤掉了串口上不一定能看到完整输出。临时在 U-Boot 环境变量里给内核传loglevel8参数就能看到更多调试信息。这是排查驱动问题时特别有用的手段。5.3 烧录后没反应从拨码开关开始排查烧录完 SD 卡上电后串口完全没输出这是最让人头大的情况之一。我的排查顺序是先断电检查拨码开关是否拨到了对应介质的启动位置然后确认 SD 卡是否插到位、分区格式是否正常再在电脑上检查 SD 卡里的文件比如boot.scr、uImage、dtb的文件名是否和 U-Boot 环境变量里设置的一致最后才考虑重新用 STM32CubeProgrammer 擦除 eMMC 或恢复出厂镜像。特别提醒SD 卡烧录后不要急着拔卡多等几秒等系统把缓存写回。开发阶段我至少遇到过两次因为“写完就拔卡”导致分区表损坏的情况重新烧一次虽然不麻烦但来回折腾很浪费时间。5.4 一个速查表常见现象、原因和排查方向现象可能原因排查方向上电后串口无输出BOOT 拨码错误、电源不稳、串口驱动问题先查拨码再量电压最后查驱动枚举启动卡在 U-Boot 阶段DDR 参数不对、存储介质读取失败检查 DDR 配置、重新烧写 bootfs内核启动 log 中途停止设备树错误、驱动 probe 失败用loglevel8查看完整日志逐行定位Linux 能启动但没网口PHY 驱动没加载、设备树没有网口节点检查设备树以太网节点、dmesg中的 PHY 信息SSH 连不上IP 不在同一网段、sshd 服务没启动串口登录后确认 IP 和 sshd 状态5.5 另外几个值得养成的习惯从我自己的实操体会来说玩 MPU 评估板有几个习惯越早养成越好。第一是勤备份U-Boot 环境变量、原始 dtb、可用的内核镜像都单独备份一份到电脑上不要只存在板子里。第二是善用版本管理设备树、根文件系统改动、测试脚本都放到 Git 仓库里管理哪怕只是一个人开发也能帮你回溯到底改了什么导致系统起不来。第三是记录手册偏差评估板手册可能与实际板卡有极少数出入比如某个电阻默认不焊、某个引脚丝印和手册不一致遇到这种情况随手记录后期会省下很多复盘的精力。最后再分享一个我自己的小技巧开发阶段可以给板卡固定一个静态 IP并且把电脑的 SSH 公钥放到板卡的 authorized_keys 里之后每次连接都免密登录配合 NFS 挂载根文件系统整个开发迭代的效率会提升一个档次。等你把软件链路都调顺了再回头去优化电源设计、DDR 参数或者 PCB 布局那个时候你手上的评估板就不再是一块“开发板”而是一个真正帮你把产品雏形跑通了的参考基准。
返回列表