1. 从一块核心板说起:CM4到底解决了什么问题
第一次拿到CM4的人,十有八九会愣一下——这玩意儿怎么连个USB口都没有?没有HDMI,没有网口,没有音频座,甚至连个像样的GPIO排针都找不到。它只有两排密密麻麻的200Pin高密度板对板连接器,像一块被剥光了外设的裸核心。但恰恰是这种"残缺",让它在嵌入式圈子里火得一塌糊涂。
CM4的全称是Compute Module 4,核心SoC是博通的BCM2711。如果你对树莓派4B熟悉,那这颗芯片你其实已经打过交道了——4B用的就是它。四核Cortex-A72,主频1.5GHz,VideoCore VI GPU,支持H.265硬解,原生PCIe 2.0,双HDMI输出,千兆以太网MAC……这些规格放在一块只有55mm×40mm的板子上,而且全部通过200Pin连接器引出,这就是CM4的定位:把树莓派4B的完整算力,做成一个可以嵌入到任何产品里的模块。
为什么这件事重要?因为标准版树莓派4B的形态是给桌面和创客场景设计的,板载接口固定,尺寸固定,你没法把它塞进一个定制外壳里做量产设备。而CM4把"计算"和"接口"彻底解耦了——你拿到的是纯粹的计算核心,外设怎么设计、接口怎么布局、板子做多大,全由你的载板决定。这就是从"开发板"到"核心板"的思维转变。
我接触CM4是从一个工业网关项目开始的。当时的需求是:双网口、4路RS485、宽温工作、7×24小时运行,还要能跑Docker容器做边缘计算。用4B改?接口不够,散热也压不住。用CM4加自研载板?一块6层板搞定,尺寸控制在100mm×80mm以内,成本比买工控机低了一个数量级。从那以后我就成了CM4的常客。
这篇文章不打算复述官方数据手册——那种东西你随时能下载。我想做的是把BCM2711的规格参数和200Pin引脚定义这两件事讲透,让你在画载板之前就知道哪些脚必须接、哪些脚可以省、哪些脚接错了会烧板子。这些经验,数据手册不会告诉你,但每一个踩过坑的人都懂。
2. BCM2711主控规格:哪些参数真正影响你的载板设计
2.1 四核A72的算力边界与散热现实
BCM2711的CPU部分是四核ARM Cortex-A72,64位架构,每核32KB L1指令缓存+48KB L1数据缓存,共享1MB L2缓存。主频默认1.5GHz,在CM4上可以通过config.txt超频到2.0GHz甚至更高,但前提是你的散热方案跟得上。
这里有个很多人忽略的点:CM4的散热路径和4B完全不同。4B的SoC上面直接盖着金属屏蔽罩,热量可以通过屏蔽罩传导到空气中。CM4的SoC是裸露的,而且板子面积小,热量集中在55mm×40mm的区域内。如果你在密闭外壳里跑满四核,不加散热片,SoC结温分分钟上85°C触发降频。
我的经验是:轻负载场景(单核跑个Python脚本、做做数据采集)不需要额外散热;中等负载(双核跑Docker、视频转码)必须加铝制散热片,最好用导热硅胶垫而不是硅脂,因为CM4的SoC表面不平整,硅脂压不匀;重负载(四核满载、持续AI推理)得上主动风扇或者把CM4的散热片直接连接到金属外壳上做整机散热。
实测数据:室温25°C,四核满载跑stress-ng,无散热片时SoC温度在90秒内冲到85°C并开始降频,主频掉到1.0GHz左右;加一块20mm×20mm×10mm的铝散热片后,稳定温度在72°C,不降频;再加一个小风扇,稳定在55°C。这个差距在长时间运行的工业场景里是致命的。
2.2 内存与存储的选型逻辑
CM4的内存有1GB、2GB、4GB、8GB四个档位,LPDDR4-3200。存储方面分两个版本:带eMMC的和不带eMMC的(Lite版)。带eMMC的容量有8GB、16GB、32GB三档,Lite版则依赖外部SD卡或者通过PCIe接NVMe。
这里的选择逻辑很直接:如果你做的是量产设备,选带eMMC的版本,因为eMMC的可靠性和读写寿命远好于SD卡,而且省去了SD卡座这个机械结构,载板设计更简单。如果你做的是原型验证或者需要频繁换系统,选Lite版配SD卡更方便。
但要注意一个坑:带eMMC的CM4,eMMC是直接焊在模块上的,你没法像SD卡那样拔下来用读卡器烧录。首次烧录必须通过载板上的USB接口进入RPIBOOT模式,用另一台电脑把系统镜像写进去。这个过程需要载板正确设计USB_OTG引脚和nRPIBOOT跳线,后面讲引脚定义时会详细说。
PCIe 2.0 x1是CM4的一个隐藏亮点。虽然只有单通道,理论带宽5Gbps,但接NVMe SSD实测读写能到400MB/s以上,比eMMC快好几倍。如果你需要高速存储或者接PCIe网卡、PCIe转SATA控制器,这个接口就是关键。不过PCIe引脚在200Pin连接器上的位置比较特殊,布线时要注意阻抗控制和差分对等长。
2.3 多媒体与显示能力的实际可用性
BCM2711的VideoCore VI GPU支持OpenGL ES 3.1、Vulkan 1.0,视频编解码方面支持H.265 4Kp60解码和H.264 1080p60编码。CM4通过200Pin引出了双HDMI接口,但注意:CM4的HDMI信号是直接来自SoC的,不是像4B那样经过电平转换芯片。这意味着你的载板需要自己加HDMI保护电路和连接器。
双HDMI可以同时输出,支持4Kp60和1080p60的组合。但实际用下来,如果你两个口都跑4K,GPU负载会很高,发热也明显。工业场景里更常见的是单HDMI做本地显示,另一个口不用或者转成LVDS/eDP驱动工业屏。
摄像头接口方面,CM4引出了两个MIPI CSI-2接口,可以接树莓派官方的摄像头模块,也可以接第三方的MIPI摄像头。但MIPI信号对布线要求极高,差分对阻抗必须控制在100Ω,走线长度要匹配,否则会出现图像撕裂或者根本不出图。如果你不是高速数字电路的老手,建议直接用官方摄像头模块加转接板,别自己从零画MIPI走线。
2.4 网络与扩展接口的取舍
CM4引出了千兆以太网MAC,但PHY芯片需要你在载板上自己加。这意味着你可以选择不同的PHY方案:想要低功耗就选百兆PHY,想要千兆就选RTL8211或者类似方案。RJ45座子带不带变压器、要不要PoE,都是载板设计时决定的。
无线方面,CM4有带Wi-Fi/蓝牙的版本和不带的版本。带无线的版本板载了CYW43455芯片,支持双频Wi-Fi 5和蓝牙5.0。但天线需要你自己接——CM4上有一个U.FL接口,你可以接外置天线,也可以在载板上画PCB天线。PCB天线省成本但调试麻烦,外置天线贵一点但信号稳定,量产设备建议用外置。
USB方面,CM4引出了USB 2.0 OTG接口,可以配置成Host或者Device模式。这个接口很关键,既是烧录系统的入口,也是接USB外设的通道。但只有一路USB 2.0,如果你需要多个USB口,得在载板上加USB Hub芯片。
3. 200Pin板对板连接器:引脚定义背后的设计哲学
3.1 两排100Pin的物理布局与配对逻辑
CM4的200Pin连接器分两排,每排100Pin,间距0.4mm,板对板高度有1.5mm和2.0mm等选项。这个连接器是DF40系列或者兼容型号,插拔寿命有限,官方建议不要频繁插拔,一般插上就不动了。
两排引脚的功能分配是有规律的:第一排(靠近板边的那排)主要走电源、地、低速接口(I2C、SPI、UART、GPIO);第二排主要走高速信号(PCIe、USB、HDMI、MIPI、以太网)。这个布局逻辑是为了减少高速信号之间的串扰——把高速信号集中在一排,方便在载板上做阻抗控制和屏蔽。
但实际布线时你会发现,电源和地是穿插在两排里的,不是完全分开的。CM4的200Pin里,地引脚有几十个,分散在各处,这是为了保证回流路径短,减少EMI。画载板时,这些地引脚必须全部接到地平面,一个都不能省。
3.2 电源引脚:5V输入与3.3V输出的边界
CM4的供电是通过200Pin里的多个5V引脚输入的,官方推荐输入电压5V±5%,最大电流取决于你的负载。CM4本身满载功耗在5W到8W之间,加上载板上的外设,总电流可能到2A以上。所以载板的5V走线要足够宽,至少1mm以上,最好铺铜。
CM4内部有DC-DC把5V转成3.3V、1.8V、1.2V等给SoC和外设用。但注意:CM4的3.3V输出能力有限,官方数据是最大输出电流约300mA(具体看版本)。如果你载板上有多个3.3V外设,比如LCD屏、传感器、EEPROM,加起来超过300mA,就得自己在载板上加3.3V LDO或者DC-DC,不能全靠CM4供。
我踩过一个坑:载板上挂了一个3.3V的TFT屏,背光电流就要200mA,加上其他外设,总3.3V负载到了400mA。结果CM4的3.3V输出被拉低到3.0V,系统随机重启。后来在载板上加了一颗AMS1117-3.3专门给屏供电,问题解决。所以记住:CM4的3.3V是给你做参考电平或者给低功耗外设用的,不是给你做电源分配的。
3.3 启动模式与烧录引脚:nRPIBOOT和USB_OTG
CM4的启动模式由nRPIBOOT引脚决定。这个引脚在200Pin连接器上,低电平有效。正常运行时,nRPIBOOT要拉高(通过10K电阻上拉到3.3V)。当你需要烧录eMMC时,把nRPIBOOT拉低,然后给CM4上电,SoC会进入RPIBOOT模式,等待通过USB_OTG接口接收镜像。
USB_OTG引脚是USB 2.0的D+和D-,差分对。在载板上,这对差分线要走到一个Micro USB或者Type-C座子,方便连接电脑。注意:USB_OTG的D+和D-需要串联22Ω电阻(或者0Ω,看具体设计),并且要走差分阻抗90Ω。
这里有个细节:如果你用的是Lite版CM4(无eMMC),烧录是通过SD卡,不需要RPIBOOT模式。但如果你用的是带eMMC的版本,载板上必须设计nRPIBOOT跳线和USB_OTG座子,否则第一次烧录会非常麻烦——你得用飞线或者临时焊接。
3.4 GPIO与低速接口:40Pin兼容性的真相
CM4引出了28个GPIO,和树莓派4B的40Pin排针在功能上是对应的,但物理位置完全不同。你不能直接把4B的HAT插到CM4载板上,需要重新设计连接器。
GPIO的功能复用和4B一致:I2C、SPI、UART、PWM、I2S都可以通过GPIO矩阵配置。但注意:CM4的GPIO电平是3.3V,不是5V容忍。如果你接5V外设,必须加电平转换。
另外,CM4的GPIO驱动能力有限,单个引脚最大16mA,所有引脚加起来不超过100mA。驱动LED或者继电器(通过三极管)没问题,直接驱动电机或者大功率负载肯定不行。
3.5 高速信号引脚:PCIe、HDMI、MIPI的布线要点
PCIe 2.0 x1的引脚在200Pin连接器上是一对差分发送和一对差分接收,加上参考时钟。差分阻抗要求100Ω,走线长度要尽量短,过孔要少。如果你在载板上接NVMe座子,PCIe走线最好控制在50mm以内,并且要包地处理。
HDMI引脚包括TMDS差分对、DDC(I2C)、HPD(热插拔检测)和5V输出。HDMI的TMDS差分阻抗是100Ω,走线要等长,偏差控制在5mil以内。HDMI连接器附近要加ESD保护二极管,否则热插拔时容易打坏SoC。
MIPI CSI-2的引脚是差分对加时钟,阻抗100Ω。MIPI的速率很高(每lane可达1Gbps以上),走线要尽可能短,并且要远离电源和高速开关信号。如果你不是很有把握,建议用官方的摄像头转接板,别自己画。
4. 载板设计实战:从原理图到PCB的避坑清单
4.1 电源树设计:5V输入保护与3.3V分配
载板的电源输入是5V,来自外部适配器或者PoE模块。第一件事是加保护:一个自恢复保险丝(PPTC)加一个TVS二极管,防止过流和浪涌。然后5V分两路:一路直接给CM4的5V引脚,另一路给载板上的外设。
CM4的5V输入引脚有多个,建议每个引脚都接上,不要只接一两个。因为每个引脚的电流能力有限,多个引脚并联可以降低单个引脚的电流密度,减少发热和压降。
3.3V的分配要算总账。CM4输出的3.3V最多300mA,如果你载板上有3.3V的EEPROM、传感器、电平转换芯片,加起来可能就超了。我的做法是:载板上放一颗3.3V LDO(比如AMS1117-3.3),输入接5V,输出给所有3.3V外设。CM4的3.3V只用来做参考电平或者给极低功耗的器件(比如I2C上拉电阻)。
4.2 连接器选型与焊接:DF40的注意事项
CM4的200Pin连接器是板对板类型,母座在CM4上,公座在载板上。选型时要注意高度:1.5mm、2.0mm、2.5mm等,取决于你的外壳设计。公座的品牌可以用原厂或者兼容型号,但一定要买质量好的,因为0.4mm间距的引脚很脆弱,焊接不好容易虚焊。
焊接DF40连接器是个技术活。建议用热风枪加焊膏,温度控制在260°C左右,风速不要太高,否则会把旁边的元件吹飞。焊完后用放大镜检查每个引脚,特别是边缘的引脚,容易连锡。如果有条件,用X光检查更好。
我见过有人用手工烙铁焊DF40,结果引脚歪了一片,CM4插上去接触不良,系统随机死机。所以如果你没有热风枪和放大镜,建议找专业的SMT代工,别自己硬上。
4.3 启动与烧录电路:nRPIBOOT跳线和USB座子
nRPIBOOT引脚需要一个10K上拉电阻到3.3V,和一个跳线或者按钮到地。正常运行时跳线断开,nRPIBOOT被上拉为高。烧录时短接跳线,nRPIBOOT拉低,然后上电。
USB_OTG座子建议用Micro USB或者Type-C,Type-C更现代但需要加CC逻辑芯片。如果只是烧录用,Micro USB就够了。D+和D-走差分线,串联22Ω电阻,并且要加ESD保护。
注意:USB_OTG的5V VBUS引脚不要接到CM4的5V输入上,否则会倒灌。VBUS只用来检测USB插入,不供电。
4.4 散热与机械结构:CM4的固定方式
CM4本身没有固定孔,它是通过200Pin连接器固定在载板上的。但连接器的保持力有限,如果设备有振动,CM4可能会松动。所以载板上最好设计支撑柱或者卡扣,把CM4的板边压住。
散热方面,CM4的SoC在板子中央偏上位置,你可以在这个位置对应的载板背面开窗,让散热片直接接触SoC。或者用导热硅胶垫把SoC的热量传导到金属外壳上。
如果设备是密闭的,建议在CM4上方加一个小风扇,风扇电源从载板的5V取,通过GPIO控制转速。风扇不需要很大,40mm×40mm的5V风扇就够了,噪音也小。
5. 常见问题与排查思路
5.1 CM4上电不启动:先查这五个地方
CM4上电后如果HDMI没输出、ACT LED不闪,先别急着怀疑CM4坏了。按这个顺序查:
第一,5V输入电压是否正常?用万用表量CM4的5V引脚,应该在4.75V到5.25V之间。如果低于4.7V,可能是载板走线太细或者电源适配器功率不够。
第二,nRPIBOOT引脚是否被误拉低?如果nRPIBOOT是低电平,CM4会进入RPIBOOT模式,不启动系统。检查跳线是否短接,或者上拉电阻是否虚焊。
第三,eMMC版本是否烧录了系统?带eMMC的CM4出厂是空的,必须烧录后才能启动。如果你买的是Lite版,检查SD卡是否插好、是否烧录了正确的镜像。
第四,HDMI线是否插在正确的口上?CM4有两个HDMI,但只有HDMI0在启动时默认输出。如果你插在HDMI1上,可能看不到启动画面。
第五,电源指示灯是否亮?CM4上有一个红色LED,上电就应该亮。如果不亮,说明5V根本没到CM4,检查连接器是否焊好。
5.2 系统随机重启:电源和散热的嫌疑最大
CM4跑着跑着突然重启,最常见的原因是电源跌落或者过热降频导致看门狗复位。
电源方面:用示波器看5V引脚,在CPU满载时是否有跌落。如果跌落到4.5V以下,说明电源适配器或者载板走线有问题。换一个5V 3A的适配器,加粗载板5V走线,通常能解决。
散热方面:看SoC温度,如果超过80°C,系统会降频,超过85°C可能触发保护。加散热片或者风扇,问题解决。
还有一个隐蔽的原因:3.3V外设过载。如果你载板上的3.3V负载超过CM4的输出能力,3.3V会被拉低,导致SoC内部逻辑出错。用万用表量3.3V引脚,如果低于3.2V,就要考虑外设供电独立。
5.3 HDMI无输出:EDID和HPD的排查
HDMI接显示器没画面,先确认显示器输入源选对了。然后查HPD(热插拔检测)信号:CM4的HDMI HPD引脚应该被显示器拉高到5V。如果HPD是低电平,CM4不会输出HDMI信号。
如果HPD正常但还是没画面,可能是EDID读取失败。EDID是显示器通过DDC(I2C)传给CM4的,如果DDC线没接好或者上拉电阻缺失,CM4读不到EDID,就不会输出。
还有一种情况:CM4的HDMI输出分辨率设置不对。在config.txt里强制设置hdmi_mode和hdmi_group,比如hdmi_group=2、hdmi_mode=82对应1080p60。如果设置的分辨率显示器不支持,也会黑屏。
5.4 PCIe设备不识别:时钟和复位是关键
PCIe NVMe SSD插上不识别,先查PCIe参考时钟:CM4的PCIe时钟是100MHz差分,如果载板上没接或者接错,PCIe链路根本建立不起来。
然后查PERST#(复位)信号:这个信号应该由载板拉高,如果一直低电平,PCIe设备处于复位状态,不会工作。
还有,PCIe的供电要独立:NVMe SSD需要3.3V供电,电流可能到1A以上。如果你从CM4的3.3V取电,肯定不够。载板上要单独做3.3V DC-DC给PCIe座子供电。
最后,检查PCIe差分线是否接反:TX和RX要交叉连接,TX接RX,RX接TX。如果接反了,链路也建立不起来。
6. 从原型到量产:CM4选型与载板迭代的个人体会
CM4的选型其实是个组合题:内存容量、eMMC容量、是否带无线、是否带eMMC,这几个维度组合起来有十几种型号。我的建议是:原型阶段用Lite版加SD卡,方便换系统;量产阶段用带eMMC的版本,容量根据系统镜像大小选,一般16GB够用,如果要存大量数据就选32GB。
无线版本比非无线版本贵一点,但如果你的设备需要联网,带无线的版本省去了外接Wi-Fi模块的麻烦。不过要注意:CM4的Wi-Fi天线接口是U.FL,载板上要留出天线座子的位置,或者画PCB天线。
载板迭代方面,第一版一定要留测试点:5V、3.3V、1.8V、1.2V的测试点,GPIO的测试点,PCIe时钟的测试点。这些测试点在调试时能省你很多时间。第二版再根据第一版的问题优化布局和走线。
还有,CM4的200Pin连接器很脆弱,插拔次数有限。调试阶段建议用延长线或者测试座,别反复插拔CM4。量产时,CM4是焊在载板上的(通过连接器),装好后就不要动了。
最后说一个成本相关的点:CM4本身的价格比4B高,因为它是工业级定位。但如果算上载板的成本,整体方案可能比用工控机便宜很多。特别是当你需要定制接口、定制尺寸、定制工作温度范围时,CM4加自研载板的方案灵活性和成本优势就体现出来了。