硬件平台选型:从SoC对比到底板设计

做嵌入式Linux网关,第一步就是选芯片。这事儿马虎不得——芯片选错了,后面驱动移植、外设调试全得跟着遭殃。我个人习惯是先看项目需求,再反过来挑SoC。今天咱们就拿三款主流芯片来掰扯掰扯:i.MX6ULL、STM32MP1、全志V3s。

三款主流SoC,谁更适合做网关?

先看一张对比表,心里有个底:

参数 i.MX6ULL STM32MP1 全志V3s
CPU核心 单核Cortex-A7 @ 800MHz 单核Cortex-A7 + M4双核 单核Cortex-A7 @ 1.2GHz
内存接口 DDR3/LPDDR2,16位 DDR3/LPDDR2,16位 内置64MB DDR2
以太网MAC 2路,支持TSN 2路,支持TSN 1路,无TSN
CAN接口 2路FlexCAN 2路FD-CAN 无原生CAN
USB 1路OTG + 1路HOST 1路OTG + 1路HOST 1路OTG
工业级温度 -40~105°C -40~105°C -20~85°C
官方BSP维护 Yocto/Linux 5.10+ OpenSTLinux/Linux 5.15+ 全志SDK/Linux 4.9

说说我的看法。i.MX6ULL是恩智浦的老将,生态成熟,资料多,社区活跃。我在一个工业数据采集项目里用过它,跑了两年没出过问题。STM32MP1有意思——它集成了Cortex-M4协处理器,适合做实时控制。全志V3s便宜,内置DDR,板子能做得极小,但BSP版本老,CAN得外扩。

我的选型建议:

  • 工业网关、多协议转换 → i.MX6ULL,稳
  • 需要实时控制 + Linux → STM32MP1,双核分工
  • 成本敏感、功能简单 → 全志V3s,性价比高

核心板与底板设计要点

做网关产品,我强烈建议用核心板+底板方案。为什么?核心板把CPU、DDR、PMIC这些高密度、难焊接的器件封装好,底板只管接口和电源。万一CPU坏了,换核心板就行,底板不用动。

核心板设计要注意几个点:

  • DDR走线等长——数据线组内误差不超过±20mil,时钟线单独等长。我见过一个项目,DDR走线差了50mil,系统跑着跑着就死机。
  • PMIC选型——至少留一路备用LDO,调试时你就知道有多重要了。
  • Boot配置电阻——上拉到核心板,别放底板。否则换启动介质时还得改底板。

底板设计,说白了就是接口的物理层实现。以太网要加PHY和变压器,USB要加ESD保护,CAN要加收发器。嗯,这里有个坑——电源隔离。如果网关要接工业现场,底板上的DC-DC最好用隔离模块,否则浪涌一来,核心板跟着遭殃。

避坑指南:我曾经在一个项目里把核心板的串口直接拉到DB9上,没加电平转换。结果接上PLC的RS232,核心板直接冒烟。从那以后,所有外露接口我都加保护器件。

外设接口选型:以太网、USB、CAN、UART

网关嘛,接口就是它的命。咱们一个一个说。

以太网

网关至少需要两路以太网——一路接内网,一路接外网。i.MX6ULL和STM32MP1都自带两路MAC,省事。PHY芯片我常用的是Microchip KSZ8081或TI DP83822,便宜又稳定。如果要做工业级,记得选支持-40°C的型号。

变压器选型也有讲究。隔离电压至少要1500Vrms,共模扼流圈不能省。我遇到过用便宜变压器导致丢包的情况,换了TDK的片子就好了。

USB

USB主要用来接4G模块、Wi-Fi网卡或者U盘。注意:USB HOST口要加500mA自恢复保险丝,否则短路就烧板子。OTG口做调试用,平时别接大功率设备。

全志V3s只有一个USB OTG,想做双口得外接USB Hub。嗯,这又增加了成本和PCB面积。

CAN

工业现场离不开CAN。i.MX6ULL的FlexCAN支持CAN 2.0,STM32MP1支持CAN-FD。如果项目需要传输大数据,CAN-FD是趋势。收发器我推荐TJA1050或SN65HVD230,3.3V供电,兼容5V逻辑。

全志V3s没有原生CAN,得用SPI转CAN芯片,比如MCP2515。延迟大,吞吐量低,只适合低速应用。

UART

UART看似简单,坑却不少。RS232电平需要MAX3232转换,RS485需要SP3485。波特率建议不超过115200,否则长线传输容易出错。

我习惯在每个UART口上加TVS管,防止热插拔打坏芯片。嗯,这个习惯救过我两次。

一张图看懂硬件选型逻辑

下面这张图总结了从需求到选型的完整流程:

硬件平台选型流程 硬件平台选型决策流程 需求分析 工业级? 是 否 i.MX6ULL / STM32MP1 全志V3s 核心板设计 核心板设计 底板接口设计

重要提醒:选型时别只看芯片参数,还要看BSP维护周期。全志V3s的Linux 4.9内核已经停止维护,很多新驱动都打不上去。i.MX6ULL和STM32MP1的内核还在持续更新,长期项目更靠谱。