CM4这块板子我在两个产品项目里用过:一个拿它做边缘网关,一个拿它做自助终端的显示控制。两次选型几乎没犹豫,因为Pi 4B虽然便宜,但它的接口布局和SD卡形式对嵌入式产品来说太"开发板"了——你想把它塞进自己的外壳、配上自己的电源和对外接口,还得重新考虑散热和固定。而树莓派CM4(Compute Module 4)把整套核心系统压缩成55×40mm的模块,通过两排共200Pin的板对板连接器交到你手上,底板怎么设计完全由你决定。这篇文章就把BCM2711主控规格和这200个引脚的分组逻辑摊开来聊,给准备自己画底板、或者正在评估CM4方案的工程师一份可参考的路线图。
1. CM4存在的理由:为什么有人放着Pi 4B不用,非要自己画底板
1.1 模块化到底解决了什么问题
先想清楚一个前提:CM4不是给桌面玩家准备的,它是为"把树莓派塞进自己的产品里"这件事服务的。Pi 4B的优点是开箱即用,缺点是所有接口都在固定位置,板卡尺寸、螺丝孔位置、USB/HDMI座的朝向全被定死了。产品设计里最难受的就是这种"半定制"状态——你只能迁就它。
CM4的思路完全不同:板载BCM2711主控、LPDDR4内存、可选eMMC,以及DC-DC电源部分全部集成在模块上,用户只需要关心底板(Carrier Board)。你的底板想做成圆形、条形、异形都行,想引出几个网口、几个USB、怎么排散热孔都自己说了算。这个自由度对量产产品特别重要,因为外壳、接口、固定方式最终决定一个产品能不能落地。
当然,代价也很明显:你要自己画原理图、做PCB、买连接器、写设备树,开发和调试成本比买一块现成开发板高一个量级。所以CM4适合的是有明确产品形态、有一定硬件设计能力的团队,而不是只想快速跑个Demo的个人玩家。
1.2 CM4和Pi 4B的差异不只是形态
很多人以为CM4就是"拆掉接口的Pi 4B",这个理解方向对,但细节上有几个关键差异:
| 维度 | Pi 4B | CM4 |
|---|---|---|
| 物理形态 | 标准开发板,接口固定 | 55×40mm核心板,两排100Pin连接器 |
| 主控 | BCM2711 | BCM2711(同一颗SoC) |
| 内存 | 板载LPDDR4,型号固定(2/4/8GB) | 可选1/2/4/8GB LPDDR4 |
| 存储 | microSD卡 | 可选eMMC(8/16/32GB)或Lite版走SD卡 |
| 网络 | 板载千兆网口 | 只有MAC,PHY放在底板上 |
| USB | 4个USB-A + 1个USB-C | 单路USB 2.0,由底板决定对外形态 |
| 适合场景 | 桌面、原型、学习 | 工业控制、边缘终端、产品集成 |
这个表里最关键的一行是"网络":Pi 4B的千兆网口是整机帮你做好的,而CM4只把BCM2711内部的千兆MAC通过RGMII引脚送出来,物理层PHY芯片得你自己放在底板上。换句话说,CM4的底板不只是"转接座",它本身就是一块带完整外围电路的嵌入式主板。
2. BCM2711主控规格:一颗SoC撑起整个生态
2.1 CPU、GPU与内存参数
BCM2711是一颗28nm工艺的SoC,和Pi 4B同源。它的规格放到今天依然能打,关键是软件生态太成熟,这是很多竞品芯片比不了的。
| 模块 | 参数 |
|---|---|
| CPU | 4× Arm Cortex-A72,主频1.5GHz |
| 缓存 | 每核32KB L1指令/数据缓存,1MB共享L2 |
| GPU | VideoCore VI,支持OpenGL ES 3.1、Vulkan 1.0 |
| 视频解码 | H.265硬解4Kp60,H.264硬解1080p60 |
| 视频编码 | H.264硬编1080p30 |
| 内存 | LPDDR4-3200,可选1/2/4/8GB |
| 显示输出 | 2× HDMI 2.0,最高4Kp60 |
聊CM4绕不开"为什么还是A72"这个问题。A72是2015年的架构,单核性能当然比不上现在的Arm新核,但它胜在稳定、文档齐全、整个树莓派生态都基于它优化过。跑Linux系统、做边缘计算、跑容器、做视频解码,这套组合在功耗和性能之间取得了一个很舒服的平衡点。我那个边缘网关项目里,CM4跑着几个Docker容器和MQTT服务,CPU占用长期在30%左右,稳定性很让人放心。
2.2 存储与启动链路
CM4有两个版本:带eMMC的和Lite版。eMMC版提供8/16/32GB板载存储,相当于把SD卡焊死在模块里,读写速度和可靠性都远优于普通SD卡,适合工业现场;Lite版不带eMMC,通过200Pin连接器引出SD卡接口,底板放一个SD卡座即可。选择的逻辑很简单——产品不想依赖外部存储就选eMMC版,需要灵活换存储或降低成本就选Lite版。
启动顺序由BOOT_SEL引脚组合决定。BCM2711的启动ROM会按照这个组合去尝试从eMMC、SD卡、USB设备或PCIe设备加载系统。树莓派官方提供的usbboot工具就是通过拉低nRPI_BOOT引脚强制进入USB烧录模式,然后通过USB把系统镜像写到eMMC里。这个机制是CM4量产阶段最重要的工具,后面第5节我会细说。
2.3 外设总线盘点:哪些接口是"主线"
从底板设计角度,BCM2711给你最重要的资源是这六条线:
- PCIe Gen 2 x1:单通道,理论带宽5GT/s,实际可用大约400~500MB/s,接NVMe硬盘或FPGA、采集卡都行;
- USB 2.0:单通道,模块引脚上是D+/D-差分对,可以配置为Host或Device;
- 2× HDMI 2.0:每路含3对数据和1对时钟差分线,共8对差分线;
- 2× MIPI DSI(显示)和2× MIPI CSI(摄像头):每路最多4 lane,加时钟对;
- 28个GPIO:复用I2C、SPI、UART、PWM、I2S等低速功能;
- 千兆MAC:通过RGMII总线外接PHY芯片。
要注意的是,这个SoC没有USB 3.0。Pi 4B上那两个USB 3.0其实是芯片外的USB 3.0 HUB走PCIe实现的,CM4把PCIe单通道直接引出来,USB 3.0用不用、怎么用由底板决定。这也意味着如果你想在CM4上接高速USB设备,需要自己设计一个PCIe转USB的方案,会增加不少硬件复杂度。
3. 200Pin板对板连接器:先建立"信号分组"思维再逐脚看
3.1 机械接口与装配前提
CM4模块底部是两个100Pin的板对板连接器,总共200Pin,间距是0.4mm,属于超薄高速连接器(通常对应Hirose DF40系列这类规格,具体型号以官方数据手册为准)。模块装在底板上后,两板之间的间隙很小,整体高度控制得当,适合紧凑型产品。
这个连接器不是普通的排针排母,焊接和装配都要小心。底板上的对应座子建议用回流焊,手工焊接0.4mm间距连接器非常痛苦。另外,由于连接器本身没有强力锁扣,长年震动环境下必须加螺丝柱或金属支架固定模块,只靠连接器端子受力很容易出接触不良。
3.2 信号分组总览
面对200个引脚,第一反应不该是"逐个查是什么功能",而是先按信号类型分成几大块。我的习惯是分成六组:
| 信号组 | 典型内容 | 设计关注点 |
|---|---|---|
| 电源与地 | VBAT(3.3V)输入、大量GND | 电源完整性、去耦 |
| 启动与配置 | BOOT_SEL、nRPI_BOOT、EMMC_DISABLE_N | 启动模式选择、烧录 |
| 高速差分 | HDMI、PCIe、USB 2.0、MIPI DSI/CSI | 阻抗、等长、参考层 |
| 网络 | RGMII总线到PHY | 时序、端接 |
| 存储 | SD接口(Lite版) | 电平、上拉 |
| GPIO及低速 | 28×GPIO、I2C、UART、SPI、PWM | 复用冲突、上拉 |
这样分组之后,你会发现200个引脚里,真正需要你精心布线的不是全部,而是那几个高速差分组。电源和地占了很大比例,这是为了给高速信号提供低阻抗回流路径,不能删。
3.3 引脚编号怎么查
具体引脚编号和排列方向,一定以官方数据手册的脚位图为准。我的建议是同时准备两份资料:官方CM4数据手册里的引脚列表,以及CM4IO底板官方开源原理图。前者看定义,后者看实际用法——官方底板本身就是最好的参考设计,照着它的接法抄作业,能避开大部分坑。
4. 关键信号逐组解读:哪些细节决定底板成败
4.1 VBAT电源域
CM4模块的输入电源只有一个:VBAT,电压是3.3V。模块内的各种电源轨都由这个3.3V生成。很多第一次画底板的人会惯性思维认为要像Pi 4B那样供5V,结果把5V接到VBAT上,板子一上电就完蛋——这是最基本的红线。
电流方面,CM4满载时VBAT电流可以到2A以上,瞬间冲击甚至更高。所以底板上的3.3V电源方案至少按2.5~3A设计,并且VBAT引脚要加足量去耦电容。从5V输入到3.3V这级降压,我通常用DCDC加低ESR陶瓷电容组合,并在靠近模块连接器的地方放置10uF和100nF搭配的去耦网络。纹波控制目标尽量在50mV以内,BCM2711对电源质量敏感,纹波大了会出现随机死机或HDMI输出异常这类诡异问题。
4.2 HDMI、PCIe、USB高速差分对
这三组差分信号是底板布线的重点。
HDMI 2.0信号速率最高到6Gbps级别,每对差分线需要做100Ω差分阻抗控制,组内等长误差控制在5mil以内,线对之间尽量保持间距。HDMI座子的HPD、CEC、DDC引脚建议加上拉电阻和静电保护器件,否则热插拔时容易损坏SoC内部接口。
PCIe Gen 2 x1有TX/RX两对差分线,外加100MHz参考时钟对和PERST#复位引脚。PCIe对阻抗要求同样是100Ω差分,但更关键的是PERST#的上电时序:复位释放要在模块电源稳定之后,这个时序在CM4IO官方底板里用RC延迟网络实现,照抄即可。如果底板要接NVMe固态盘,还得在系统EEPROM里把启动模式配置成PCIe优先,这部分属于软件配置,硬件上先把PCIe走线做干净。
USB 2.0只有一对D+/D-,速率480Mbps,布线压力小很多。但要注意的是USB的电源:模块不负责对外提供5V VBUS,需要底板自己生成5V,并且要有过流保护。CM4的USB做Device模式时(比如烧录模式),VBUS由上位机提供,底板设计时要预留这两种情况的处理。
4.3 MIPI DSI/CSI
MIPI接口是CM4连接屏幕和摄像头的主要通道。每个DSI/CSI接口包含4条数据lane和1条时钟lane,都是差分对,需要做100Ω差分阻抗(MIPI一般是差分阻抗80~100Ω,树莓派官方设计按100Ω差分处理)。CSI接口还带I2C控制总线,用于配置摄像头寄存器。
底板走线时,DSI和CSI的lane间等长要求很高,尤其接4K屏幕时,长度差过大会直接花屏。另外MIPI线不能穿过噪声源(比如开关电源、电感下方),尽量走内层并参考完整地平面。我见过一块底板因为CSI线走顶层且横穿了一个DCDC电感,摄像头图像一直有横条纹,最后改走内层才解决。
4.4 GPIO复用与冲突
CM4引出的28个GPIO中,相当一部分脚有多路复用功能:GPIO14/15默认是UART调试口,GPIO0/1用于I2C EEPROM识别(HAT协议),GPIO2/3是I2C1,还有若干引脚可以复用为SPI、PWM、I2S。画原理图前一定要把要用到的外设和引脚功能表对照一遍,避免同一个引脚被两个外设占用。
特别提醒一点,GPIO引脚的电平域是3.3V,不能用5V直接驱动。底板如果对外连接5V逻辑器件,必须加电平转换,否则轻则读不到高电平,重则烧掉GPIO。I2C总线记得加上拉电阻(典型1.8k到3.3V),树莓派内部I2C控制器没有自带上拉的,漏掉上拉会让外设探测时好时坏,这种问题最难查。
4.5 启动与烧录控制
启动控制引脚虽然数量少,但接错了会让整个系统起不来。三个BOOT_SEL引脚组合决定启动顺序,nRPI_BOOT拉低会强制进入USB ROM引导模式,EMMC_DISABLE_N在带eMMC的模块上可以临时禁用板载eMMC,改从外部SD启动——这个功能在系统损坏恢复时特别有用。
量产烧录时我的标配做法是:底板预留一个BOOT跳线或按键,拉低nRPI_BOOT后上电,上位机运行usbboot工具,USB枚举出设备后直接把工厂镜像写入eMMC。全程不拆模块、不拔卡,对产线效率很关键。调试阶段则强烈建议把GPIO14/15的UART引出来——很多时候系统起不来,HDMI根本没画面,只有靠串口看内核日志才能定位问题。
5. 底板设计实战:从原理图到首板点亮
5.1 电源树设计
完整的电源树至少包括三级:外部输入(5V或电池)、5V到3.3V的DCDC降压、以及给CM4的VBAT,同时还要为底板外设提供5V、3.3V甚至1.8V。外设的功耗要单独估算,不能和CM4共用一路线就先斩后奏,不然外设一启动,VBAT电压跌落,CM4直接重启。
电容配置有个经验值:VBAT引脚附近放2个10uF陶瓷电容加若干100nF,靠近连接器放置;HDMI、USB、PCIe的电源引脚也要各自去耦。上电顺序方面,CM4没有苛刻的多电源轨时序要求,但务必保证5V先稳定、3.3V再输出,用简单的使能脚串联或者让DCDC的PG去控制下一级即可。
5.2 高速信号布线
底板的PCB建议至少4层:顶层走信号、第二层完整地平面、第三层电源、底层走信号。高速差分对一定要走在地平面的正上方,不能跨分割。所有差分对按100Ω差分阻抗控制,线宽线距通过叠层计算。HDMI和PCIe走线尽量短,过孔不要随意打,每一对线要等长。
如果底板要接摄像头或屏幕,MIPI线的长度也别拉得太长。CM4IO官方底板的走线长度可以作为参考,照它的长度范围设计基本不会出问题。另外,PCIe参考时钟对要远离其他高速线,避免串扰导致NVMe识别不稳定。
5.3 结构装配与散热
连接器装配是整个底板最容易翻车的环节。0.4mm间距的板对板连接器对平面度要求很高,PCB变形、焊盘氧化都会导致虚接。建议在PCB上做好定位孔,配合金属支架把CM4稳稳压在连接器上。散热方面,BCM2711满载时发热明显,我的边缘网关项目里给CM4加了一块小散热片加外壳风道设计,温度控制在65℃以下。如果是密闭外壳,至少要保证模块上方的空气能流动。
5.4 首板点亮与烧录流程
拿到第一批底板后的调试顺序,我总结成一条固定流程:先不上CM4,单独量底板各电源轨是否正常;然后装上模块,接UART调试线,观察启动日志;再用usbboot工具烧录系统到eMMC或写入SD卡;最后依次验证网口、HDMI、USB、PCIe外设。
首板最容易遇到的问题不是原理图错,而是焊接问题——0.4mm连接器虚焊、电源芯片贴反、去耦电容短路。所以第一块板子务必仔细检查焊点,用万用表逐一量VBAT对地阻值,再上电。CM4模块本身很皮实,但电源接反或过压基本就是永久损伤,上电前反复核对引脚顺序不会错。
6. 复盘几个坑:选型、上拉与PCIe的教训
6.1 eMMC版还是Lite版,别拍脑袋
我第一个网关项目选了带32GB eMMC的版本,想着存储大省事。结果产品需要频繁读写日志,eMMC写入寿命成了隐患,再加存储空间不够用,最后还是改成了Lite版加工业级SD卡方案。反过来讲,如果设备要跑只读系统、固件固定,eMMC版反而更可靠。这个选择要按实际运行场景算,不是越大越好。
6.2 漏了I2C上拉,排查了一整天
有个底板接外部传感器,I2C总线时通时断。我一开始怀疑是走线干扰,各种加屏蔽、缩短线缆都没用。最后拿示波器一看,SDA和SCL的高电平根本没到3.3V,才想起来板上漏画了上拉电阻。树莓派的外设I2C不像有些单片机内部自带上拉,必须自己在底板上加。这个坑很基础,但越基础的坑越容易在忙碌时漏掉。
6.3 PCIe信号完整性和PERST#时序
底板接NVMe固态盘时遇到过开机偶尔找不到盘的问题。排查发现PCIe走线长度偏长且过孔较多,信号质量差;另外PERST#的释放时序比电源晚得不够,导致固态盘初始化失败。重新调整了走线,加长了复位RC时间后问题解决。PCIe Gen2 x1虽然速率不算高,但也不能当普通低速信号随便拉线。
6.4 首板验证清单
最后给一份我用过的验证清单,照着做完再送量产:
- 电源:VBAT对地阻抗、各路电压纹波、满载电流;
- 启动:BOOT_SEL引脚电平符合预期,UART能出日志;
- 烧录:usbboot流程能识别设备并写入镜像;
- 外设:网口、USB、HDMI、PCIe逐个长时间压力测试;
- 可靠性:震动测试、高低温循环、反复上电各50次以上。
这块模块从2019年面世到现在,已经成了很多工业产品的事实选择。BCM2711本身不算新,但成熟生态加模块化形态让它一直有生命力。如果你正在评估CM4方案,建议先把官方数据手册的引脚列表和CM4IO底板参考设计通读一遍,再动手画板,能省下不少返工时间。我自己的体会是:把精力花在电源、高速信号和启动链路上,这三点稳了,CM4项目基本就成了。