☰
树莓派CM4核心板与200Pin引脚全解析:载板设计与实战指南
2026/10/23 1:20:55 网站建设 项目流程

搞嵌入式的人手里拿到树莓派CM4(Compute Module 4),第一反应往往是两个:一是觉得这块板子真小,信用卡面积里塞了一台完整电脑;二是看着底部那两排密密麻麻的200Pin板对板连接器发愁,不知道从哪下手。CM4的核心是博通BCM2711主控,这颗SoC撑起了模块的全部运算和多媒体能力,而200Pin引脚定义则决定了载板设计能做什么、不能做什么。这篇文章我就把这两件事拆开讲清楚:BCM2711到底是什么水平的主控,200Pin里按功能域划分每个信号是干什么的,以及在设计载板时最容易忽略哪些细节。

这篇文章适合刚接触CM4、准备用它做产品原型或者自制载板的开发者,也适合那些想把“用开发板点个灯”升级为“设计一块真正的核心板+载板方案”的人。我会尽量说人话,把官方文档里表格化的东西翻译成实际设计时能用的经验。

1. 整体设计与思路拆解:从“开发板思维”切换到“核心板思维”

1.1 为什么CM4不是“另一块树莓派开发板”

大多数人熟悉的是树莓派4B,一块把所有接口都焊好的小主板。CM4表面上看起来像是“拆了接口的树莓派4B”,但设计逻辑完全不同。树莓派4B是把一套固定外设组合交给用户,你不能轻易换掉它的USB Hub芯片,也不能把HDMI改成别的接口。CM4则是一个计算核心,它只保留SoC、内存、存储、无线模块这些最核心的东西,所有对外接口全部汇聚到200Pin板对板连接器上,由你自制的载板去定义。

这种设计的好处非常明显:接口数量和类型由应用场景决定。做一个工业网关,你不需要HDMI和摄像头接口,可以把省下的PCB面积和成本让给RS485、继电器、电源防护;做一台边缘AI盒子,你可以在载板上放PCIe NVMe固态硬盘和额外的USB摄像头通道;做一个便携设备,你可以把载板做成比CM4本身大不了多少的圆形或异形板,而不是被ATX式外设布局绑架。

这背后其实是嵌入式行业里很成熟的“核心板+底板”架构。核心板承担高密度、高工艺难度的部分(BGA封装SoC、LPDDR4贴装、射频天线匹配),这部分对普通工程师来说是最难设计、最容易被焊接和Layout问题搞砸的部分;载板则承担相对简单的外设和接口逻辑,改版成本低,迭代快。你可以把CM4理解成一块“被OEM化”的树莓派,它把最难的硬件打包好了,把灵活性留给了你。

1.2 BCM2711主控规格:算力、图形与多媒体能力速览

BCM2711是一颗四核Cortex-A72处理器,CM4上标称频率为1.5GHz。Cortex-A72是ARM在2015年左右推出的高性能核心,放在今天的桌面级平台上确实不算激进,但在被动散热条件下稳定跑工业Linux应用、跑Docker容器、跑边缘端推理任务,它依然是够用的。它的性能大致相当于入门级迷你主机的水准,日常操作系统的流畅度远高于那些低功耗的ARM Cortex-A7/A53盒子。

GPU部分集成了VideoCore VI,支持OpenGL ES 3.0硬加速,也为Vulkan图形API提供了驱动支持。如果你做过树莓派上的小游戏或者OpenGL Demo,应该能感受到它在2D和轻量3D渲染上的从容。这个GPU的意义不只是玩游戏,更重要的是桌面合成器、浏览器渲染、视频硬解这些日常操作不再占用CPU主核资源。

多媒体能力是BCM2711最实用的部分。它支持4K60的H.265/HEVC硬件解码,也就是说你可以拿一台CM4做低功耗的4K播放终端;同时支持1080p60的H.264编码和解码,这对视频采集、推流类应用帮助很大。下面的表把关键规格整理出来,方便你查阅。

项目参数
CPU四核Cortex-A72,1.5GHz
GPUVideoCore VI,支持OpenGL ES 3.0 / Vulkan
内存LPDDR4,可选1GB/2GB/4GB/8GB
视频输出2路HDMI 2.0,支持4K60
视频解码H.265 4K60硬件解码
视频编码H.264 1080p60硬件编码
存储板载eMMC 8GB/16GB/32GB,或Lite版走SDIO外置
无线可选WiFi 5(802.11ac)+ 蓝牙5.0
对外接口200Pin板对板连接器,含PCIe Gen2 x1、USB、GPIO等
尺寸55mm x 40mm,重量极轻

这颗SoC在接口丰富度上也很能打。它原生提供了PCIe Gen2 x1通道,这是CM4区别于前几代计算模块的关键升级,意味着你可以直接在PCIe总线上接NVMe固态盘、PCIe千兆网卡、或支持PCIe的AI加速卡。USB方面模块默认暴露了五组USB 2.0通道,其中一组可以作为OTG,另外四组做Host,载板上挂USB Hub芯片后还能继续扩展。

1.3 选型组合:内存、存储、无线版本怎么搭

CM4的型号命名里藏着三个维度:内存大小、存储容量、有无无线模块。比如“CM4 4GB 16GB WiFi”就是4GB内存、16GB eMMC、带无线模块的版本;而“CM4 Lite”则代表不含eMMC,只有SDIO外置存储能力。

先说过内存。1GB版本现在的价格优势很明显,适合跑轻量Linux、单容器应用、或者做纯数据采集。2GB是性价比均衡点,跑桌面环境开几个网页窗口也不至于太吃紧。4GB是大部分开发者定居的选择,Docker多容器、Node-RED、数据库、OpenCV推理都能舒舒服服跑。8GB版本适合做重型多任务、编译服务器、或者跑大量内存依赖的AI模型推理。选内存时别只看当前应用,还要考虑固件、驱动、日志这些系统开销,我见过不少项目一开始买了1GB,软件跑起来后内存吃紧又返工换型号。

再谈存储。eMMC版本的最大优势是启动快、可靠、不容易被拔出,适合量产产品。eMMC 8GB装一个精简Linux和一个应用绰绰有余;16GB适合留出日志存储空间;32GB适合需要本地数据库或较多离线模型缓存的场景。Lite版没有eMMC,你必须通过SDIO接SD卡,或者完全靠USB/PCIe/NVMe启动。需要提醒的是,eMMC和SDIO不能同时使用,在引脚功能上是冲突的,所以Lite版插SD卡时,板载eMMC接口就闲置了。

无线版本的取舍也很有意思。带WiFi和蓝牙的CM4会在模块上预留天线连接器,如果载板上使用了金属外壳或天线被遮挡,射频性能会很难看。不带无线模块的版本更便宜、功耗更低、也没有射频认证负担,适合那些走有线网络、不需要蓝牙的工业设备。选无线版本时,我强烈建议你在载板PCB上预留天线净空区,并把天线连接器放在板边,否则信号强度会让你怀疑人生。

2. 200Pin板对板引脚定义:一张功能地图解决七成问题

2.1 机械结构与信号密度:两个100Pin连接器怎么分工

CM4底部使用的是两排0.5mm间距板对板连接器,每排100Pin,共200Pin,具体分S1和S2两侧。0.5mm间距在无连接器裸奔的CM4上看起来是精密的,但设计载板时你不必手工焊接它——直接用对应的连接器母座贴装到你的载板上,然后用螺丝或卡扣固定即可。

这种连接器的信号密度很高,但正是因为密度高,设计载板Layout时需要对高速信号做差分对和回流路径规划。一个常见的误区是:自己打样载板为了省事,把所有引脚用细走线拉扯出来,结果HDMI、PCIe这类高速信号在没有完整参考地平面的情况下链路劣化严重。记住,CM4的200Pin不是一个可以“随便飞线”的接口,它是承载差分对、时钟、电源轨的混合信号接口,布局时就要按功能域分区规划。

关于引脚号的精确映射,每个人手头的原理图封装可能来自不同来源,市面上流传的简化版引脚表版本很多,有些对不上是正常现象。我的建议是建立一份以官方datasheet和官方KiCad符号库为准的引脚定义表,自己核对一遍每个信号属于哪个功能域,这比网上随便搜一张引脚图要可靠得多。下文我按功能域而非逐脚号来讲解,因为理解功能域才是做载板设计的关键思路。

2.2 按功能域划分的引脚地图

为了不让你被200个编号冲昏头脑,我习惯把CM4的引脚分成六个功能区:电源、控制与状态、USB、PCIe、视频显示、摄像头与显示接口、GPIO与外设复用。下面这张表把主要信号组整理了出来。

功能域主要信号/引脚组说明
电源5V0_SYS、VBAT、3V3、GND5V为模块主输入;3V3为模块输出的辅助电源轨;VBAT接RTC备用电池
控制与状态RUN_PG、PMU_EN、nRPIBOOT、EMMC_DISABLE_N、BOOT_MODE、GLOBAL_EN负责上电时序、启动模式、复位控制
USBUSB_OTGID、USB_DP1/DM1、USB_DP2/DM2、USB_DP3/DM3、USB_DP4/DM4、USB_VBUS一组OTG加四组Host的USB2.0信号
PCIePCIE_TX/RX差分对、PCIEPERST_N、PCIECLKREQ_N、REFCLK差分对PCIe Gen2 x1链路,载板必须提供100MHz参考时钟
视频输出HDMI0/HDMI1的差分数据对、时钟对、CEC、HPD、I2C两路HDMI 2.0输出
摄像头/显示CSI差分数据对与时钟、DSI差分数据对与时钟、I2C、GPIOMIPI CSI摄像头输入、MIPI DSI显示输出
GPIO与复用GPIO0-GPIO2728个3.3V GPIO,支持I2C、SPI、UART、PWM、PCM等复用
SDIOSD_CLK、SD_CMD、SD_D0-SD_D3、SD_CD等供Lite版外接SD卡使用;eMMC版本此组引脚不生效

USB功能域有几点要特别说明。官方默认D0作为USB_OTGID,决定OTG口工作在Host还是Device模式。如果OTGID被拉低,该口作为Host;如果OTGID浮空或拉高,作为Device。很多载板设计把OTGID直接接地使用,这种用法没问题,但你在调试时需要进入系统烧录模式时就会麻烦,因为Device模式依赖这个引脚的状态。

PCIe功能域是最值钱的引脚,但也是最容易出错的。CM4的PCIe控制器自带收发差分对,但100MHz参考时钟必须由载板提供,这一点和很多自带时钟的PCIe设备不一样。参考时钟的精度、抖动、走线质量直接影响NVMe盘的识别成功率。PCIEPERST_N是复位信号,载板必须正确驱动它,接个上拉电阻就不管的话,可能会出现“有时候能识别盘、有时候不能”的时好时坏问题。

MIPI功能域对应一路摄像头和一路显示。摄像头CSI接口支持D-PHY,数据lane数量按标准配置;显示DSI接口可以驱动MIPI LCD面板,但记得同时从GPIO里引出背光控制和触摸I2C,这些在官方IO板参考设计里都有现成接法。MIPI信号都是高速差分对,必须等长走线,且尽量远离电源和GPIO干扰源。

2.3 容易被忽略的控制信号:这些引脚决定了能不能开机

很多人设计第一版CM4载板时只关心能不能把HDMI和USB引出来,结果板子回来发现模块压根不启动,原因往往就藏在几个控制信号里。

先看RUN_PG。这个信号在模块电源正常工作后会拉高,你可以把它理解为“模块已准备好”的状态输出。载板拿到这一电平后,再去启动自己的外设供电轨,形成正确的上电时序。如果你的载板外设对电源时序很敏感,一定要把RUN_PG接到电源控制逻辑里,而不是简单悬空。

再看PMU_EN。这个信号是给外部系统控制CM4电源用的。通过控制PMU_EN,你可以让模块进入低功耗的待机状态。但注意,PMU_EN有一个默认状态,载板如果错误地把它拉低,模块会一直处于关断状态,看起来就像“完全没通电”。我见过不止一次原理图里把PMU_EN当普通GPIO接了个按键,结果按键悬空时模块不开机。

还有EMMC_DISABLE_N,官方原话是当它被拉低时会禁用板载eMMC。如果你想用CM4的SDIO卡启动,或者需要使用USB启动模式,这个引脚配合BOOT_MODE一起使用可以改变启动顺序。但如果你用的是eMMC版本,并且希望从eMMC正常启动,这个信号一定不能随意拉低,否则你会在系统列表里找不到内置硬盘。

GPIO0和GPIO1也要特殊对待。它们出厂默认挂在模块EEPROM的I2C总线上,EEPROM里存着序列号和配置信息,系统启动时会读取。做载板时虽然可以把它们复用为普通I2C或GPIO,但我不会建议这么做,尤其是量产产品,这个串口一丢,序列号管理就彻底乱套了。

3. 从引脚定义到载板设计:实操要点和小抄

3.1 最小载板到底需要哪些东西

如果你只想让CM4跑起来,不需要一堆花哨外设,一个小载板可以精简到五六样东西。

  • 5V电源入口和滤波电容,给CM4供电。
  • 一颗3.3V LDO或DC-DC,给载板上的逻辑电路、EEPROM、电平转换器供电。
  • 模块板对板连接器母座两个。
  • 一个USB口(从USB Host组引出或从OTG口引出)用来刷系统、进终端。
  • 可选的调试串口,从GPIO14/GPIO15引出UART,调试时救命。
  • 启动模式相关电路:BOOT_MODE拨码开关或者跳线、nRPIBOOT按键。

这是最朴素的“起机”载板。别小看这一套,它本身就是你调试后续所有外设的基础。我的建议是第一版载板尽量把所有功能引脚都通过测试点引出,哪怕暂时用不到。测试点不贵,但板子回来发现问题时,你能用示波器直接点到信号上定位问题,省下的排查时间远超那点PCB面积。

3.2 电源设计:5V只是表面文章

CM4的电源设计看起来很省事,模块自己处理了大部分电源轨,载板只需要提供干净的5V。但“干净”两个字才是关键。

官方建议电源容量在负载较大时准备5V/5A级别的适配器或DC-DC模块。如果你只是跑一个轻应用,2.5A的电源也能工作,但一旦接了PCIe SSD、多个USB设备、或者让CPU满载跑编译,电流需求会迅速上升。电源限流保护做得太激进也是常见翻车点,我见过有人用手机充电器当电源,充电器触发过流保护后电压下跌,CM4表现为反复重启或者偶尔启动失败。

载板上的3.3V电源轨虽然模块自己会输出一路3.3V辅助电源,但它的带载能力有限,只适合给少量逻辑电路供电,不要指望它来驱动一堆传感器或者继电器。需要做大电流3.3V输出时,用载板自己的DC-DC从前级5V转换。

VBAT这个引脚的用途容易被人忽视。它用来给模块的RTC供电,接一颗CR2032纽扣电池或者一个超级电容和简单充电电路,就能让模块在断电后保持实时时钟。如果你的设备不需要离线时钟,悬空问题也不大,但如果你的应用涉及日志时间戳,这个电池值得接。

3.3 高速信号走线:高速不是玄学,是对错路径问题

载板设计中最能拉开工程师水平差距的,是高速信号的Layout。这里的高速主要指HDMI、PCIe、MIPI和USB2.0的差分对。USB2.0由于速率相对较低,容错能力强一些,但PCIe和HDMI走线如果随意拉,系统会很不稳定。

差分对要遵循100欧姆差分阻抗,并且做到对内等长。对内等长的目的不是玄学,而是让差分信号的相位偏差保持在很小范围内,否则接收端眼图会闭合。PCIe的参考时钟差分对特别重要,它直接关系到链路能否协商到Gen2速率,以及链路抖动是否在规范内。我习惯把PCIe信号从连接器出来后第一时间作为整体走线区域,不跨越分割,不穿过密集过孔区,并且在参考地平面保持连续。

HDMI两组输出要考虑对外连接器位置。两路HDMI接口如果放在载板同一侧,走线会稍微拥挤,但通过合理分层能解决。优先保证数据信号完整,HPD和I2C这些低频信号对走线要求不高,可以稍微绕行。

MIPI的CSI和DSI更娇贵,因为摄像头和显示屏的FPC连接器通常需要靠近板边,信号必然要跨越较长的路径。这里特别强调,MIPI信号要尽量远离GPIO或者PWM这类频繁翻转的引脚走线,否则干扰串进差分对里,屏幕会闪或者摄像头会偶尔出现花屏。

3.4 启动方案和存储组合:先把启动顺序确定再画板

CM4支持从多种介质启动:eMMC、SDIO SD卡、USB、PCIe NVMe,以及网络启动。启动顺序由模块OTP和BOOT_MODE引脚共同决定。做一个完整产品时,这一步必须在画板阶段就确定,因为这决定了你要不要给用户留出可操作的启动模式开关。

如果是eMMC版本,默认从eMMC启动最省心。你需要额外的系统烧录途径,建议从USB OTG口进入大容量存储模式烧写,这是官方烧录工具支持的路径。把OTG口的ID引脚和相关电路做好,就能让模块在上电时被电脑识别成一个USB磁盘,然后直接把系统镜像写进eMMC,整个过程几分钟完成。

如果是Lite版,要么在载板上设计SD卡槽,要么从USB或PCIe NVMe启动。从NVMe启动体验非常好,启动速度快,存储容量大,但要注意的是bootloader需要更新到较新版本才能支持完整的NVMe启动流程。在实际项目中,Lite版配NVMe跑Docker集群是比较极致的玩法,但对Layout和电源的要求也高,新手不建议一上来就走这条线。

4. 常见问题与排查技巧实录

4.1 模块上电没反应,先量这几个信号

遇到“板子回来一点动静没有”的情况,先别怀疑CM4本身,90%的问题出在载板上。按下面的顺序用万用表和示波器排查。

  • 量5V0_SYS电压是否稳定在4.75V到5.25V之间,并且在模块加载时没有明显跌落到4.5V以下。
  • 量模块输出的3.3V是否正常,如果这个电压没有,说明PMU根本没启动。
  • 量PMU_EN的状态,确认没有被意外拉低。
  • 量RUN_PG,如果RUN_PG一直为低,说明模块内部电源没有完成上电复位循环。
  • 检查EMMC_DISABLE_N的电平,确认没有被人为拉低。

有一个很常见的低级错误是板对板连接器焊接不良。0.5mm间距接头焊接时容易桥连或虚焊,尤其电源引脚虚焊时万用表测量看起来时通时断,上电后的现象非常随机。遇到反复无常的故障,先把连接器补焊一遍再说。

提示:我自己调试时,会把RUN_PG和3V3接到一个LED指示灯上。板子一上电,看到两个灯都亮,才能继续往下排查,否则先修电源。这几乎是所有嵌入式主板调试的第一条规则。

4.2 USB口识别不全或者时好时坏

载板上引出了四组USB Host,但只识别出其中两三个,甚至插拔后设备消失,首先检查USB数据线有没有接反。USB的DP和DM一对差分容易在原理图连线时弄反,这是低级但高发的问题。

其次检查OTG口的ID逻辑。如果你把OTG口做成Host使用,ID必须正确拉低。有些载板把ID引脚悬空,系统会以为这个口应该工作在Device模式,自然不枚举Host设备。如果总线上挂了USB Hub,还要确认Hub的供电和复位时序。USB Hub的复位引脚不能简单接到模块GPIO上然后不管,要保证复位信号在上电后维持一段时间的正确电平,否则Hub内部开始枚举时可能还在复位状态。

差分走线长度差异过大也会导致USB2.0设备超时无法识别。USB2.0虽然速率不算太高,但如果晶振或终端电阻周边地平面不连续,眼图一样会被腐蚀。万用表测不通不代表高速信号能跑通,最终判断还是要靠整机验证。

4.3 PCIe NVMe不识别或者频繁掉盘

PCIe问题是最让人头疼的,因为牵涉Link Training过程,不像USB那样简单测电平就能定位。常见症状是系统里完全没有NVMe设备,或者偶尔能识别但长时间拷数据就崩溃。

先把PCIEPERST_N的时序捋清楚。复位释放必须在电源稳定之后,不能和模块上电同步拉高,否则PCIe链路训练时设备还没准备好。可以用示波器观察PERST上升沿相对电源的延迟,确保至少延迟几十毫秒。官方IO板参考设计里对这颗信号的处理方式值得照抄。

再检查参考时钟。CM4自己不带PCIe参考时钟,载板必须提供一个干净的100MHz差分时钟,这个时钟的频偏和抖动直接影响训练成功率。如果你图省事用一个普通晶振加缓冲器凑合,很可能遇到“十个模块里只有八个能识别”这种批次性问题。

如果NVMe盘确认可以在其他设备上正常工作,但插在CM4载板上就不认,试试看PCIe链路是否被限制到了Gen1速率。某些早期bootloader或者劣质线缆会让链路自动降速,这种情况可以手动把PCIe速度强制设为Gen1或Gen2观察是否稳定,再用官方工具更新bootloader。

4.4 我踩过的几个引脚设计的坑

第一次做CM4载板时,我把EEPROM的I2C引脚(GPIO0/1)当成普通I2C用,给了外部传感器。结果系统启动时反复尝试读取EEPROM失败,延迟了十几秒才进系统,而且序列号一直是空。后来把传感器挪到GPIO2/3的I2C总线上才解决。这件事给我很深的印象:CM4的GPIO0/1是系统保留资源,默认就不该动。

还有一次是Lite版接SD卡,我按eMMC版本的经验把EMMC_DISABLE_N拉低想强制走SD卡启动,结果发现SD卡的检测脚没有做上拉处理,导致系统识别不到卡。SD卡槽的CD引脚绝不能悬空,要么接上拉电阻,要么在软件里屏蔽检测逻辑。

无线版本的天线净空也踩过坑。第一次做的载板是全金属外壳,里面还放了开关电源,WiFi信号出来后基本无法连接蓝牙耳机。后来把天线引到外壳外部,并严格按参考设计在PCB天线区域开净空、铺地孔,效果才算正常。做带无线模块的CM4产品,天线位置要当射频电路对待,不当普通焊盘点对待。

最后再分享一个小技巧

如果你准备自己做CM4载板,我建议第一版不要追求一次把所有外设都集成上去。先画一块测试底板,把以下几样东西引出来:一组USB Host、一组USB OTG、调试UART、5V和3V3测试点、全部GPIO的排针。拿到板子后先把系统装好,用脚本逐一扫描每个GPIO的电平和复用状态,确认所有引脚定义和你的原理图一致,再在这块测试板上开始加PCIe、加MIPI、加高级功能。

我个人的体会是,CM4的200Pin连接器对新手来说信息量很大,但只要把功能域搞清楚,每类信号按规矩处理,它其实比传统ARM核心板要好设计得多。毕竟最难的部分已经被官方封装好了,你的载板更多是在做接口规划。等这套流程跑顺了,你再看那些复杂的载板原理图,会觉得一切都清晰很多。

这套“先小步验证,再逐步集成”的做法,我在好几个项目里用过,每次都帮我省下至少一轮打样和调试时间。希望这篇拆解能帮你少走一些弯路,至少别在电源和启动信号上浪费一晚上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询