
1. 为什么CM4值得单独拿出来聊树莓派CM4Compute Module 4在嵌入式圈子里是个挺特殊的存在。很多人第一次拿到它的时候会愣一下——这玩意儿没有USB口、没有网口、没有HDMI就一块小小的板子上面一颗BCM2711芯片、几颗内存颗粒和eMMC剩下的全靠两个板对板连接器往外引。但恰恰是这种“裸核心”的形态让它在工业控制、边缘计算、数字标牌、机器人主控这些场景里成了香饽饽。我自己第一次用CM4做项目的时候踩的最大的坑就是引脚定义没吃透。当时想当然地以为它跟树莓派4B的40Pin GPIO是一一对应的结果焊好底板通电串口死活不出数据。后来翻了三遍数据手册才发现CM4的200Pin连接器里GPIO的映射关系跟4B完全不是一回事而且两排连接器的引脚编号方式也容易让人看花眼。所以这篇文章我打算把CM4的BCM2711主控规格和200Pin板对板引脚定义彻底拆开讲一遍把那些数据手册里写得比较含蓄、但实际用起来会要命的地方都点出来。这篇文章适合谁看如果你正在评估CM4做产品主控、准备画自己的底板、或者已经买了CM4但被引脚定义搞得头大那接下来的内容应该能帮你省下不少查手册和试错的时间。我会从主控规格讲起然后重点拆解200Pin的定义逻辑最后给一些实际布线和使用中的经验。2. BCM2711主控规格深度拆解2.1 这颗芯片到底强在哪BCM2711是博通为树莓派4代专门定制的SoCCM4用的就是同一颗。它的核心配置是四核Cortex-A72主频1.5GHz相比上一代CM3用的Cortex-A53单核性能大概有1.5到2倍的提升。这个提升在实际项目里意味着什么举个例子我之前用CM3跑一个轻量级的图像处理流水线1080p视频流做边缘检测只能跑到15帧左右换成CM4之后同样的代码能跑到35帧以上基本能满足实时处理的需求了。制程方面是28nm这个数字在今天看不算先进但好处是功耗和发热控制得比较成熟长期运行的稳定性有保障。GPU是VideoCore VI支持OpenGL ES 3.1和Vulkan 1.0做简单的3D渲染或者硬件加速的视频编解码都没问题。视频解码支持H.265 4Kp60编码支持H.264 1080p30这个规格对于大多数嵌入式视觉场景够用了。内存方面CM4提供了1GB、2GB、4GB、8GB四个LPDDR4-3200选项注意是LPDDR4不是LPDDR4X带宽大概在32GB/s左右。这个带宽对于多路视频采集或者需要频繁访问大模型的场景比较关键。我建议如果预算允许至少上4GB版本因为现在很多边缘AI框架跑起来内存占用都不小1GB版本稍微跑点东西就捉襟见肘了。2.2 跟树莓派4B的差异点很多人会问CM4和4B用的是同一颗芯片那是不是性能一样理论上核心性能是一样的但CM4有几个关键差异需要特别注意。首先是供电设计。4B用的是USB-C供电板载了完整的电源管理电路CM4把电源管理也集成在了模组上但输入电压范围是5V±5%而且对纹波要求比较高。我实测下来如果供电纹波超过100mV系统在高负载下容易随机重启。所以画底板的时候电源部分一定要舍得用料LDO或者DCDC的输出电容建议至少放两颗22uF的陶瓷电容并联。其次是时钟。4B板载了25MHz晶振CM4把晶振也集成在模组内部了不需要外部提供。但如果你要用外部时钟源CM4是支持通过特定引脚输入的这个后面讲引脚定义的时候会提到。再就是eMMC。4B用的是SD卡CM4可以选配8GB、16GB、32GB的eMMC也可以选Lite版本无eMMC走SD卡。eMMC的读写速度比SD卡快不少实测顺序读写能到200MB/s以上随机读写更是甩SD卡几条街。如果项目对存储可靠性有要求强烈建议选eMMC版本SD卡在工业环境下的接触不良问题真的很让人头疼。2.3 温度与功耗的实测数据我拿4GB eMMC版本的CM4做过一组功耗测试用可调电源供电记录不同负载下的电流。工作状态电压电流功耗芯片表面温度空闲5.0V0.42A2.1W38°C单核满载5.0V0.68A3.4W52°C四核满载5.0V1.15A5.75W71°C四核GPU满载5.0V1.38A6.9W83°C测试环境是25°C室温CM4没有加散热片。可以看到四核满载的时候芯片温度已经到71°C了如果再加GPU负载直接飙到83°C。虽然BCM2711的结温上限是85°C但长期在高温下运行会加速老化建议还是加个散热片或者小风扇。如果做的是密闭外壳的产品散热设计一定要提前考虑不然后期改结构很麻烦。3. 200Pin板对板连接器全解析3.1 两排连接器的物理布局CM4的200Pin是通过两个100Pin的板对板连接器引出的官方叫法是“High-speed connector”和“Low-speed connector”。这两个连接器在模组上的位置是上下两排间距是固定的画底板的时候必须严格按照机械尺寸图来放不然插不进去。高速连接器主要负责PCIe、USB、HDMI、以太网这些高速信号低速连接器负责GPIO、I2C、SPI、UART、电源这些。但注意这个划分不是绝对的有些信号会跨连接器分布所以不能简单地认为“高速的都在上面低速的都在下面”。连接器本身是松下出的窄间距板对板连接器型号是DF40系列间距0.4mm合高有不同选项。这个连接器对PCB加工精度要求比较高焊盘做小了容易虚焊做大了容易连锡。我建议找有经验的板厂做并且一定要做阻抗控制特别是高速信号走线。3.2 引脚编号规则与查找方法这是最容易让人迷糊的地方。CM4的200Pin编号是从1到200但并不是按照物理位置顺序排列的。官方数据手册里给了一张引脚分布图奇数引脚在一侧偶数引脚在另一侧但两个连接器的编号是连续的——低速连接器是1到100高速连接器是101到200。实际查找的时候我建议不要死记硬背而是把数据手册里的引脚定义表打印出来用荧光笔把常用的信号标出来。比如GPIO14/15是UARTGPIO2/3是I2C1这些常用的先标上用的时候直接查表。还有一个坑是引脚的命名方式。数据手册里有些引脚标的是“GPIO0”到“GPIO27”但BCM2711实际有58个GPIOCM4只引出了28个。这28个的编号跟4B的40Pin不是一一对应的比如4B的物理引脚3是GPIO2CM4的GPIO2在200Pin里的位置完全不同。所以千万不要拿4B的代码直接往CM4上套GPIO编号一定要重新映射。3.3 电源引脚的分配与电流预算200Pin里电源和地的引脚占了很大一部分。5V输入引脚有多个分布在两个连接器上这是为了分散电流降低阻抗。GND引脚更多大概有40多个均匀分布在信号引脚之间起到隔离和回流的作用。做电流预算的时候要注意每个引脚的额定电流是有限的。连接器的单个引脚额定电流大概是0.5A5V输入用了多个引脚并联总电流能力是够的但如果你从某个引脚单独取电给外设就要算一下不要超了。我一般是这样分配的5V主输入用高速连接器上的那几个5V引脚因为高速连接器通常离电源电路更近3.3V输出从低速连接器取给一些低功耗的外设供电。注意CM4的3.3V输出能力有限大概只能给到几百毫安大功率外设一定要自己单独供电不要从CM4的3.3V上薅。3.4 高速信号引脚的使用要点高速连接器上的信号包括PCIe Gen2 x1、USB 2.0、千兆以太网、HDMI、MIPI DSI/CSI等。这些信号的走线要求比较高我挑几个重点说一下。PCIe差分对是走线最讲究的阻抗要控制在90欧姆差分等长误差控制在5mil以内。如果底板上要接NVMe SSD或者PCIe转SATA芯片这段走线一定要做阻抗仿真不要凭感觉画。我见过有人PCIe走线没做阻抗控制结果SSD识别不稳定时好时坏查了好久才找到原因。USB 2.0的差分对要求90欧姆差分阻抗等长误差可以放宽到10mil。HDMI的TMDS差分对也是100欧姆差分等长要求更严大概2mil以内。如果底板上有HDMI接口建议用HDMI连接器自带的ESD保护不要省这个钱。以太网信号是MDI差分对100欧姆差分阻抗变压器要放在靠近连接器的位置。CM4的以太网PHY是集成在BCM2711里的所以底板上只需要放网络变压器和RJ45座就行不需要额外的PHY芯片这一点比CM3方便不少。4. 底板设计实操与避坑指南4.1 电源树的设计思路CM4底板的电源设计是整个硬件的基础我一般会按这样的思路来搭电源树。输入是5V先过一个理想二极管或者PMOS做反接保护然后分两路一路直接给CM4的5V引脚供电另一路给底板上的外设供电。给CM4供电的这一路要加足够的滤波电容我一般放两颗22uF陶瓷电容加一颗100uF钽电容位置尽量靠近连接器的5V引脚。如果底板上需要3.3V、1.8V、1.2V这些电压建议用独立的DCDC或者LDO从5V降压不要从CM4的3.3V输出再降因为CM4的3.3V输出能力有限而且噪声比较大给敏感外设供电会影响性能。还有一个细节是上电时序。CM4对5V和3.3V的上电顺序没有严格要求但如果你底板上有需要特定上电时序的芯片比如某些FPGA或者ADC就要用电源管理芯片来控制时序确保CM4先启动或者后启动。4.2 连接器的焊接与检查DF40连接器的焊接是个精细活。引脚间距0.4mm引脚宽度大概0.2mm手工焊接基本不可能必须过回流焊。钢网的开孔要精确锡膏厚度要控制好太厚容易连锡太薄容易虚焊。回流焊之后一定要做目检和AOI重点看引脚有没有连锡、有没有偏移。我遇到过一批板子连接器偏移了0.1mm插上CM4之后有些引脚接触不良时好时坏查了很久才发现是焊接偏移的问题。还有一个检查方法是测连通性。用万用表的蜂鸣档一个表笔点在CM4模组的焊盘上另一个表笔点在底板对应的测试点上逐个检查关键信号。虽然费时间但能提前发现很多问题。4.3 GPIO的复用与配置CM4的28个GPIO功能非常丰富每个引脚都有多种复用功能。比如GPIO14和GPIO15默认是UART但也可以配置成其他功能。配置的方法是通过设备树device tree来修改在/boot/config.txt里加dtoverlay或者直接改设备树源文件。我一般会先在树莓派4B上把功能调通然后把配置迁移到CM4上。但注意4B和CM4的GPIO编号不一样迁移的时候要把所有GPIO编号重新映射一遍。比如4B上用的GPIO17在CM4上可能对应的是另一个编号具体要查数据手册的引脚映射表。还有一个坑是GPIO的默认状态。有些GPIO在上电复位后是高电平有些是低电平如果你用GPIO控制继电器或者使能信号一定要确认默认状态不会导致误动作。我见过有人用GPIO控制电机使能上电瞬间电机猛转一下就是因为GPIO默认状态没注意。4.4 散热与结构设计CM4的发热主要集中在BCM2711和电源管理芯片上。如果做的是无风扇设计散热片是必须的而且散热片要跟外壳有良好的热接触。我一般会用导热硅胶垫把散热片跟金属外壳连起来这样整个外壳都成了散热器。如果做的是有风扇设计风扇的选型要注意噪音和寿命。小尺寸风扇比如30mm或40mm噪音比较大而且轴承寿命有限长期运行容易坏。如果产品对噪音有要求建议用大尺寸低转速风扇或者用均热板加分体式散热。结构设计上CM4模组的固定孔位要严格按照机械尺寸图来孔径和位置都不能错。连接器的合高也要确认好不同合高的连接器对应不同的底板厚度选错了插上去要么太紧要么太松。5. 常见问题与排查技巧实录5.1 上电不启动的排查流程CM4上电不启动是最常见的问题我一般按这样的顺序排查。先测5V输入电压和纹波。电压要在4.75V到5.25V之间纹波峰峰值不要超过100mV。如果纹波太大先解决电源问题。然后测CM4的3.3V输出。如果3.3V没有输出说明CM4内部的电源管理没有工作可能是5V没到位或者CM4模组本身有问题。再检查启动模式。CM4的启动模式由几个引脚的电平决定比如是从eMMC启动还是从SD卡启动是从USB启动还是从网络启动。这些引脚的电平如果不对CM4就找不到启动设备。我遇到过有人把启动模式引脚悬空了结果CM4一直在等USB启动等了半天也不启动。最后看串口输出。CM4默认的调试串口是GPIO14/15波特率115200。如果串口有输出可以根据输出信息判断卡在哪一步如果串口完全没输出那可能是更底层的问题比如DDR初始化失败或者时钟没起来。5.2 高速信号不稳定的典型原因PCIe或者USB设备识别不稳定大概率是信号完整性问题。我总结了几种常见原因。差分对阻抗不匹配是最常见的。用TDR测一下差分阻抗如果偏离90欧姆或者100欧姆太多就要调整走线宽度或者间距。等长误差超标也会导致问题。PCIe的等长要求是5mil以内USB是10mil以内HDMI是2mil以内。如果等长误差太大眼图会闭合误码率上升。参考平面不完整也会影响信号质量。差分对下面的地平面要完整不要被其他信号割裂。如果必须换层要在换层过孔附近加回流地过孔。连接器焊接不良也会导致高速信号问题。DF40连接器的引脚很细如果焊接温度不够或者锡膏量不足容易虚焊。虚焊的引脚在低频下可能还能工作但高速信号就会出问题。5.3 eMMC烧录失败的解决方法CM4的eMMC烧录需要用官方的rpiboot工具通过USB从设备模式烧录。常见问题有几个。首先是USB线的问题。一定要用质量好的USB数据线有些线只有充电功能没有数据功能插上去电脑识别不到设备。我一般用树莓派官方的那根USB线或者用带屏蔽的优质线。然后是驱动问题。Windows下需要装rpiboot的驱动有时候驱动装不上可以试试换USB口或者换电脑。Linux下一般不需要额外驱动但要注意权限可能需要用sudo运行。还有是跳线的问题。CM4底板上要有一个跳线或者按钮来进入烧录模式一般是把nRPIBOOT引脚拉低。如果这个跳线没接对CM4不会进入烧录模式电脑就识别不到。最后是eMMC本身的问题。如果eMMC坏了或者被写保护了烧录会失败。这种情况比较少见但如果前面都排查过了还是不行可以换一个CM4试试。5.4 常见问题速查表现象可能原因排查方法解决措施上电不启动5V纹波大示波器测纹波加滤波电容上电不启动启动模式引脚错误查数据手册确认电平调整跳线串口无输出串口引脚接错查引脚映射表重新接线PCIe设备不识别差分阻抗不匹配TDR测阻抗调整走线USB设备不稳定等长误差大检查走线长度重新布线eMMC烧录失败USB线问题换线测试用优质数据线eMMC烧录失败未进入烧录模式检查nRPIBOOT引脚拉低该引脚系统随机重启电源电流不足测满载电流换更大功率电源温度过高散热不足测芯片温度加散热片或风扇6. 一些实际项目中的经验体会做CM4项目这几年我最大的感受是数据手册一定要反复看但也不能全信数据手册。手册里写的都是典型值实际用起来会有各种偏差。比如手册说5V输入范围是4.75V到5.25V但实际测试发现低于4.9V的时候USB设备就容易掉线所以电源设计要留足够的余量。还有就是底板的测试点一定要多留。我一般会在关键信号上留测试点比如5V、3.3V、UART、USB差分对、PCIe差分对。调试的时候用示波器或者万用表直接测比飞线方便多了。测试点的位置也要考虑好不要被连接器或者散热片挡住。连接器的选型也要注意。DF40系列有不同合高的选项从1.5mm到4.0mm都有。合高选小了底板上的元件可能跟CM4模组干涉合高选大了整体高度增加可能装不进外壳。我一般会先确定外壳的高度限制然后反推连接器的合高。最后说一个关于GPIO的小技巧。CM4的GPIO驱动能力有限每个引脚大概只能输出几毫安。如果要驱动LED或者继电器一定要加三极管或者MOS管做缓冲不要直接驱动。我见过有人直接用GPIO驱动继电器结果GPIO烧了连带CM4也挂了。这种低级错误其实查一下数据手册就能避免但实际项目中就是有人会犯。CM4这个平台的可玩性很高但前提是把硬件基础打扎实。200Pin的定义虽然看起来复杂但把电源、地、高速信号、GPIO这几类分清楚用起来其实没那么难。希望这篇内容能帮你在CM4的项目里少走点弯路。