计算模块硬件
计算模块
在 GitHub 上修改
Raspberry Pi 计算模块是旗舰 Raspberry Pi 型号的 系统模块 变体。计算模块在工业和商业应用中特别受欢迎,包括数字标牌、瘦客户机和过程自动化。其中一些应用使用旗舰 Raspberry Pi 设计,但许多用户需要更紧凑的设计或板载 eMMC 存储。
计算模块有多种变体,内存和嵌入式多媒体卡(eMMC)闪存容量各不相同。eMMC 类似于 SD 卡,但焊接在电路板上。与 SD 卡不同,eMMC 专门设计用作磁盘,并具有提高可靠性的额外功能。Lite 型号没有板载存储,有时会以 L 作为后缀,如 “CM3L”。
计算模块使用以下 Raspberry Pi SoC: * BCM2835 用于 CM1 * BCM2837 用于 CM3, CM3+ * BCM2711 用于 CM4, CM4S * BCM2712 用于 CM5
计算模块 5

计算模块 5(CM5)将 Raspberry Pi 5 的内部结构(BCM2712 处理器和 2GB、4GB、8GB 或 16GB 内存)与可选的 0GB(Lite)、16GB、32GB 或 64GB eMMC 闪存结合在一起。
CM5 采用与 CM4 相同的外形尺寸,具有两个 100 针高密度连接器。
计算模块 4

计算模块 4(CM4)包含 Raspberry Pi 4 的内部元件(BCM2711 处理器和 1GB、2GB、4GB 或 8GB 内存),以及可选的 0GB(Lite)、8GB、16GB 或 32GB eMMC 闪存。
与 CM1、CM3 和 CM3+ 不同,CM4 不使用 DDR2 SO-DIMM 外形。相反,CM4 使用两个 100 针高密度连接器,物理尺寸更小。 这一变化有助于增加以下接口:
-
额外的第二个 HDMI 端口
-
PCIe
-
以太网
以前的外形无法支持这些接口。
计算模块 4S

计算模块 4S(CM4S)包含 Raspberry Pi 4 的内部元件(BCM2711 处理器和 1GB、2GB、4GB 或 8GB 内存),以及可选的 0GB(Lite)、8GB、16GB 或 32GB eMMC 闪存。与 CM4 不同,CM4S 采用与 CM1、CM3 和 CM3+ 相同的 DDR2 SO-DIMM 外形。
IO Boards
Raspberry Pi IO 板提供了一种将单个计算模块连接到各种 I/O(输入/输出)接口的方法。从本质上讲,计算模块很小。因此,它们缺少端口和连接器。IO 板提供了一种将计算模块连接到各种外设的方法。
IO 板是用于开发的评估板;在生产中,您应该使用更小的、可能是定制的板,只提供您的使用情况所需的端口和外设。
Raspberry Pi IO 板提供以下功能:
-
为模块供电
-
将 GPIO 连接到引脚接头
-
将摄像头和显示器接口连接至 FFC 连接器
-
将 HDMI 连接到 HDMI 端口
-
将 USB 连接到 USB 端口
-
将活动监控连接到 LED
-
通过 USB 对 eMMC 进行编程
-
将 PCIe 连接到用于物理连接存储设备或外设的连接器
IO 板是用于开发或个人使用的突破板;在生产中,您应该使用更小的、可能是定制的板,只提供使用情况所需的端口和外设。
Compute Module 5 IO Board

计算模块 5 IO 板提供以下接口:
-
带 40 引脚 GPIO 连接器的 HAT 基底面
-
PoE 接口
-
2× HDMI 端口
-
2× USB 3.0 端口
-
千兆以太网 RJ45,支持 PoE
-
M.2 M key PCIe 插槽,与 2230、2242、2260 和 2280 外形兼容
-
microSD 卡插槽(仅用于无 eMMC 的 Lite 机型;其他机型忽略该插槽)
-
2× MIPI DSI/CSI-2 显示器/摄像头组合 FPC 连接器(22 针 0.5 毫米间距电缆)
-
带电池插座的实时时钟
-
四针 JST-SH PWM 风扇连接器
-
USB-C 电源采用与 Raspberry Pi 5 相同的标准(5V、5A (25W) 或 5V、3A (15W),外设限制为 600mA)
-
跳线可禁用 eMMC 启动、EEPROM 写入和 USB OTG 连接等功能
Compute Module 4 IO Board

计算模块 4 IO 板提供以下接口:
-
2× HDMI 端口
-
2 个 USB 2.0 端口
-
千兆以太网 RJ45,支持 PoE
-
microSD 卡插槽(仅用于不带 eMMC 的 Lite 机型;其他机型忽略该插槽)
-
PCIe Gen 2 接口
-
微型 USB 上游端口
-
2× MIPI DSI 显示器 FPC 连接器(22 针 0.5 毫米间距电缆)
-
2× MIPI CSI-2 摄像头 FPC 连接器(22 针 0.5 毫米间距电缆)
-
带电池插座的实时时钟
-
通过圆形插孔输入 12V(如果未使用 PCIe,则最高支持 26V) * 2× MIPI CSI-2 摄像头 FPC 连接器(22 针 0.5 毫米间距电缆)
Compute Module IO Board

计算模块 IO 板提供以下接口:
-
120 个 GPIO 引脚
-
1x HDMI 端口
-
1x USB-A 端口
-
2× MIPI DSI 显示器 FPC 连接器(22 针 0.5 毫米间距电缆)
-
2× MIPI CSI-2 摄像头 FPC 连接器(22 针 0.5 毫米间距电缆)
计算模块 IO 板有两个版本: 版本 1 和版本 3。版本 1 仅与 CM1 兼容。版本 3 与 CM1、CM3、CM3+ 和 CM4S 兼容。计算模块 IO 板第 3 版有时简称为 CMIO3。
计算模块 IO 板版本 3 增加了一个 microSD 卡插槽,这在计算模块 IO 板版本 1 中是没有的。
IO Board compatibility
并非所有计算模块 IO 板都能与所有计算模块型号配合使用。下表显示了哪些计算模块可与哪个 IO 板配合使用:
IO Board | Compatible Compute Modules |
---|---|
Compute Module IO Board Version 1 (CMIO)/(CMIO1) |
|
Compute Module IO Board Version 3 (CMIO)/(CMIO3) |
|
Compute Module 4 IO Board (CM4IO) |
|
Compute Module 5 IO Board (CM5IO) |
|
CM5 配件
IO Case
Compute Module 5 IO Case可为 CM5IO 板提供物理保护。

外壳为 CM5IO 板上所有面向外部的端口和 LED 提供了开口,并为 Raspberry Pi 天线套件提供了一个连接点。

要在机箱内安装 CM5IO 电路板,请将电路板放置在机箱底部,对齐电路板两角略微内嵌的四个安装点。将四颗螺丝拧入安装点。注意不要过度拧紧螺丝。
要使用机箱风扇,请将风扇电缆连接至主板上的风扇 (J14) 端口。
关闭机箱时,将机箱上部放在机箱下部的顶部。面对机箱正面(有端口通过孔),仔细对齐机箱左右两侧的螺丝孔和机箱背面的电源按钮。将四颗螺丝拧紧到螺丝孔中。注意不要过度拧紧螺丝。
Tip
|
机箱已预装风扇。要在计算模块上安装被动散热器后关闭机箱,请卸下风扇。要卸下风扇,请从机箱顶部底部卸下位于风扇四角的四颗螺丝。 |

天线
Raspberry Pi 天线套件提供经过认证的外置天线,可增强 CM4 或 CM5 的无线接收能力。

要将天线安装到计算模块和机箱上,请完成以下步骤:
-
将电缆上的 https://en.wikipedia.org/wiki/Hirose_U.FL [U.FL 连接器] 连接到计算模块上的 U.FL 兼容连接器。
-
将齿形垫圈固定在电缆末端的公 SMA 连接器上,然后将 SMA 连接器朝外插入机壳的孔中。
-
用固定六角螺母和垫圈将 SMA 连接器固定到位。
-
将天线上的母 SMA 连接器拧紧到公 SMA 连接器上。
-
将天线旋转 90°,调整到最终位置。
要将天线与计算模块一起使用,请在 /boot/firmware/config.txt
中添加 “dtoverlay” 配置。在 config.txt
末尾添加以下一行:
dtparam=ant2

散热器
CM5 散热器可帮助 CM5 散热,提高 CPU 性能、寿命和耐用性。

要将冷却器安装到 CM5 上,请将冷却器底部的导热硅胶粘贴到 CM5 顶部。将散热器上的切口与天线 https://en.wikipedia.org/wiki/Hirose_U.FL [U.FL 连接器] 对准。可选择在每个角落的安装点拧上螺丝,以固定冷却器。如果省略螺丝,散热器与计算模块之间的粘合度将会随着时间、使用而提高。

Note
|
需要将风扇从 CM5IO 机箱上取下,才能在 CM5IO 机箱安装CM5 散热器。 |
将映像烧录到计算模块
在 GitHub 上修改
Tip
|
要将同一镜像烧入多个计算模块,请使用 Raspberry Pi Secure Boot Provisioner。要制作个性化操作系统映像,请使用 pi-gen。 |
计算模块有一个连接到主 SD 卡接口的板载 eMMC 设备。本指南介绍如何将操作系统映像闪存(写入)到单个计算模块的 eMMC 存储器中。
Lite 版本的计算模块没有板载 eMMC。请按照 安装操作系统 中为其他 Raspberry Pi 设备烧录镜像的步骤进行操作。
前提条件
要闪存计算模块 eMMC,您需要具备以下条件:
-
另一台计算机,在本指南中称为 主机设备。您可以使用 Linux(推荐 Raspberry Pi OS 或 Ubuntu)、Windows 11 或 macOS。
-
Compute Module IO 板 与您的 Compute Module 型号相对应。
-
微型 USB 电缆,或 USB-C 数据线(适用于 CM5IO 之后的计算模块型号)。
Tip
|
在某些情况下,USB 集线器会阻止主机设备识别 Compute 模块。如果主机设备无法识别 Compute 模块,请尝试将 Compute 模块直接连接到主机设备。有关更多诊断技巧,请参阅 usbboot故障排除指南。 |
安装 IO 板
首先,物理安装 IO 板。这包括将计算模块和主机设备连接到 IO 板。
- Compute Module 5 IO Board
-
设置计算模块 5 IO 板:
-
将计算模块连接到 IO 板。连接后,计算模块应平放。
-
将
nRPI_BOOT
安装到 IO 板跳线 J2(disable eMMC Boot
)上。 -
将电缆从 IO 板上的 USB-C 从端口 J11 连接到主机设备。
-
- Compute Module 4 IO Board
-
设置计算模块 4 IO 板:
-
将计算模块连接到 IO 板。连接后,计算模块应平放。
-
将 "nRPI_BOOT "安装到 IO 板跳线 J2("禁用 eMMC 启动")上。
-
将电缆从 IO 板上的微型 USB 从端口 J11 连接到主机设备。
-
Compute Module IO Board
+ 设置计算模块 IO 板:
+ . 将计算模块连接到 IO 板。连接时,计算模块应平行于电路板,啮合夹应卡紧到位。 . 将 J4("USB SLAVE BOOT ENABLE")设为 1-2 =("USB BOOT ENABLED")。 . 将电缆从 IO 板上的微型 USB 从端口 J15 连接到主机设备。
设置主机设备
接下来,让我们在主机设备上设置软件。
Tip
|
对于主机设备,我们建议使用运行 64 位 Raspberry Pi OS 的 Raspberry Pi 4 或更新版本。 |
-
Linux
-
macOS
-
Windows
在 Linux 主机设备上设置软件:
-
运行以下命令安装
rpiboot
:$ sudo apt install rpiboot
-
连接 IO 板电源。
-
然后运行
rpiboot
:$ sudo rpiboot
-
几秒钟后,计算模块应显示为一个大容量存储设备。检查
/dev/
目录,可能是/dev/sda
或/dev/sdb
。或者,运行lsblk
查找存储容量与计算模块容量相匹配的设备。
在 macOS 主机设备上设置软件:
-
首先,https://github.com/raspberrypi/usbboot?tab=readme-ov-file#macos[从源代码构建`rpiboot`]。
-
连接 IO 板电源。
-
然后,使用以下命令运行
rpiboot
可执行文件:$ sudo ./rpiboot
-
命令运行完成后,你会看到一条信息,提示 "你插入的磁盘本计算机无法读取(The disk you inserted was not readable by this computer.)"。单击 忽略。现在,您的计算模块应显示为大容量存储设备。
在 Windows 主机设备上设置软件:
-
下载 Windows 安装程序] 或 https://github.com/raspberrypi/usbboot[从源构建
rpiboot
. -
双击安装程序运行。这将安装驱动程序和启动工具。不要关闭安装过程中出现的任何驱动程序安装窗口。
-
重新启动
-
连接 IO 板电源。Windows 将发现硬件并配置所需的驱动程序。
-
在 CM4 及更高版本的设备上,从开始菜单中选择 Raspberry Pi - Mass Storage Gadget - 64 bit。几秒钟后,计算模块 eMMC 或 NVMe 将显示为 USB 大容量存储设备。这还提供了一个作为串口小工具的调试控制台。
-
在 CM3 和更旧的设备上,选择 rpiboot。双击
RPiBoot.exe
运行它。几秒钟后,计算模块 eMMC 应显示为 USB 大容量存储设备。
Flash the eMMC
您可以使用 Raspberry Pi Imager 将操作系统映像烧录到计算模块。
或者,使用 dd
将原始操作系统映像 (如 Raspberry Pi OS) 写入计算模块。运行以下命令,将 /dev/sdX
替换为计算模块的大容量存储设备表示路径,将 raw_os_image.img
替换为原始操作系统映像的路径:
$ sudo dd if=raw_os_image.img of=/dev/sdX bs=4MiB
写入映像后,断开并重新连接计算模块。现在你应该能看到两个分区(Raspberry Pi OS):
/dev/sdX <- Device
/dev/sdX1 <- First partition (FAT)
/dev/sdX2 <- Second partition (Linux filesystem)
您可以正常挂载 /dev/sdX1
和 /dev/sdX2
分区。
从 eMMC 启动
-
Compute Module 5 IO Board
-
Compute Module 4 IO Board
-
Compute Module IO Board
断开 IO 板跳线 J2(禁用 eMMC 启动
)上的 nRPI_BOOT
。
断开 IO 板跳线 J2(禁用 eMMC 启动
)上的 nRPI_BOOT
。
将 J4(USB SLAVE BOOT ENABLE
)设置为 2-3(USB BOOT DISABLED
)。
已知问题
-
一小部分 CM3 设备可能会出现启动问题。我们已将这些问题追溯到创建 FAT32 分区的方法;我们认为问题是由于 CPU 和 eMMC 之间的时间差造成的。如果在启动 CM3 时遇到问题,请使用以下命令手动创建分区:
$ sudo parted /dev/<device> (parted) mkpart primary fat32 4MiB 64MiB (parted) q $ sudo mkfs.vfat -F32 /dev/<device> $ sudo cp -r <files>/* <mountpoint>
-
CM1 引导加载程序会向主机返回一个略微不正确的 USB 数据包。大多数 USB 主机会忽略它,但有些 USB 端口会因为这个错误而无法工作。CM3 修正了这一错误。
计算模块 EEPROM 引导加载程序
在 GitHub 上修改
从计算模块 4 开始,计算模块使用 EEPROM 引导加载程序。该引导加载程序位于板载存储的一小部分中,而不是引导分区中。因此,更新它需要不同的程序。在生产中使用带有 EEPROM 引导加载程序的计算模块之前,请务必遵循以下最佳实践:
-
选择特定的引导加载程序版本。确认使用的每个计算模块都有该版本。
usbboot
repo 中的版本始终是最近的稳定版本。 -
通过 设置
BOOT_ORDER
配置引导设备。 -
在引导加载器 EEPROM 上启用硬件写保护,以确保引导加载器无法在无法访问的产品(如远程或嵌入式设备)上被修改。
Flash计算模块引导加载程序 EEPROM
Flash引导加载程序 EEPROM:
-
与 flashing the eMMC 时一样设置硬件,但要确保
EEPROM_nWP
不 被拉低。 -
运行以下命令将
recovery/pieeprom.bin
写入引导加载程序 EEPROM:$ ./rpiboot -d recovery
-
完成后,
EEPROM_nWP
可以再次被拉低。
SD 卡以外的闪存设备
基于 Linux 的 mass-storage-gadget
支持闪存 NVMe、eMMC 和 USB 块设备。与基于固件的 rpiboot
机制相比,mass-storage-gadget
写入设备的速度更快,还为设备提供了一个 UART 控制台用于调试。
usbboot
还包括一些 扩展,可让您与计算模块上的 EEPROM 引导加载程序进行交互。
更新计算模块引导加载程序
在使用 EEPROM 引导加载程序的计算模块上,ROM 从未从 SD/eMMC 运行过 recovery.bin
。这些计算模块默认禁用 rpi-eeprom-update
服务,因为 eMMC 不可拆卸,无效的 recovery.bin
文件可能会阻止系统启动。
你可以用 "自我更新 "模式覆盖这一行为。在 "自我更新 "模式下,可以通过 USB MSD 或网络启动更新引导加载程序。
Warning
|
self-update 模式不会雾化更新引导加载程序。如果在更新 EEPROM 时发生断电,可能会损坏 EEPROM。
|
修改引导加载程序配置
修改计算模块 EEPROM 引导加载程序配置:
-
导航至
usbboot/recovery
目录。 -
如果需要特定的引导加载程序版本,请将
pieeprom.original.bin
替换为引导加载程序版本中的相应内容。 -
编辑默认的
boot.conf
引导加载器配置文件以定义BOOT_ORDER
:-
对于网络启动,使用
BOOT_ORDER=0xf2
。 -
对于 SD/eMMC 启动,使用
BOOT_ORDER=0xf1
。 -
对于 USB 启动失败转到 eMMC,使用
BOOT_ORDER=0xf15
。 -
对于 NVMe 启动,使用
BOOT_ORDER=0xf6
。
-
-
运行
./update-pieeprom.sh
,生成新的 EEPROM 映像文件pieeprom.bin
映像文件。 -
如果需要 EEPROM 写保护,请在
/boot/firmware/config.txt
中添加eeprom_write_protect=1
。-
软件启用后,可以通过将
EEPROM_nWP
引脚拉低来锁定硬件写保护。
-
-
运行以下命令将更新后的
pieeprom.bin
映像写入 EEPROM:$ ../rpiboot -d .
连接外设
在 GitHub 上修改
本指南可帮助开发人员将外设连接到计算模块引脚,并说明如何在软件中启用这些外设。
SoC 的大部分引脚,包括 GPIO、两个 CSI 摄像头接口、两个 DSI 显示器接口和 HDMI 都可用于布线。您通常可以将未使用的引脚断开。
采用 DDR2 SODIMM 外形的计算模块与任何 DDR2 SODIMM 插座物理兼容。不过,引脚布局与 SODIMM 内存模块并 不 相同。
要使用计算模块,用户设计的主板必须具备以下条件
-
为计算模块供电(至少 3.3V 和 1.8V)
-
为用户应用所需的外设连接引脚
本指南首先介绍启动过程以及设备树如何描述所连接的硬件。
然后,我们将介绍如何将 I2C 和 SPI 外围设备连接到 IO 板。最后,我们将创建必要的设备树文件,以便在 Raspberry Pi OS 中使用这两个外设。
BCM283x GPIOs
BCM283x 有三组通用输入/输出 (GPIO) 引脚: 0 组有 28 个引脚,1 组有 18 个引脚,2 组有 8 个引脚,共计 54 个引脚。这些引脚可用作真正的 GPIO 引脚:软件可将其设置为输入或输出、读取和/或设置状态,并将其用作中断。它们还可以运行 I2C、SPI、I2S、UART、SD 卡等其他功能。
您可以在任何计算模块上使用组 0 或组 1。不要使用组 2:它控制 eMMC、HDMI 热插拔检测和 ACT LED/USB 启动控制。
使用 pinctrl
检查 GPIO 引脚的电压和功能,查看设备树是否按预期工作。
BCM283x 启动过程
BCM283x 设备具有 VideoCore GPU 和 Arm CPU 内核。GPU 由 DSP 处理器和用于成像、视频编解码、3D 图形和图像合成的硬件加速器组成。
在 BCM283x 设备中,GPU 中的 DSP 内核首先启动。它在启动主 Arm 处理器之前处理设置。
Raspberry Pi BCM283x 设备的启动过程分为三个阶段:
-
GPU DSP 复位后执行小型内部启动 ROM 中的代码。该代码通过外部接口加载第二阶段启动加载程序。该代码首先在引导分区上名为
bootcode.bin
的引导设备上寻找第二阶段引导加载器。如果没有找到引导设备或找不到bootcode.bin
,引导 ROM 将在 USB 启动模式下等待主机提供第二阶段引导加载器(usbbootcode.bin
)。 -
第二阶段引导加载器负责设置 LPDDR2 SDRAM 接口和其他关键系统功能。设置完成后,第二阶段启动加载器将加载并执行主 GPU 固件(
start.elf
)。 -
start.elf
处理额外的系统设置并启动 Arm 处理器子系统。它包含 GPU 固件。GPU 固件首先会读取dt-blob.bin
,以确定 GPIO 引脚的初始状态以及 GPU 专用接口和时钟,然后解析config.txt
。然后,在启动 Arm 子系统并将设备树数据传递给启动的 Linux 内核之前,加载特定于模型的 Arm 设备树文件和config.txt
中指定的任何设备树overlay。
设备树
适用于 Raspberry Pi 的 Linux 设备树对连接到系统的硬件信息以及用于与该硬件通信的驱动程序进行编码。
启动分区包含多个二进制设备树(.dtb
)文件。设备树编译器使用人类可读的设备树描述 (.dts
)创建这些二进制文件。
启动分区包含两种不同类型的设备树文件。其中一个仅供 GPU 使用;其余的是标准的 Arm 设备树文件,适用于基于 BCM283x 的每种 Raspberry Pi 产品:
-
dt-blob.bin
(GPU 使用) -
bcm2708-rpi-b.dtb
(用于 Raspberry Pi 1 型号 A 和 B) -
bcm2708-rpi-b-plus.dtb
(用于 Raspberry Pi 1 型号 B+ 和 A+) -
bcm2709-rpi-2-b.dtb
(用于 Raspberry Pi 2 型号 B) -
bcm2710-rpi-3-b.dtb
(用于 Raspberry Pi 3 Model B) -
bcm2708-rpi-cm.dtb
(用于 Raspberry Pi 计算模块 1) -
bcm2710-rpi-cm3.dtb
(用于 Raspberry Pi 计算模块 3)
在启动过程中,用户可以通过 config.txt
中的 device_tree
参数指定要使用的特定 Arm 设备树。例如,config.txt
中的 device_tree=mydt.dtb
行指定了名为 mydt.dtb
文件中的Arm设备树。
您可以为计算模块产品创建完整的 设备树
,但我们建议您使用 overlay。覆盖层将非特定于板卡的硬件描述添加到基本设备树中。这包括使用的 GPIO 引脚及其功能,以及所连接的设备,以便加载正确的驱动程序。在将设备树传递给 Linux 内核之前,引导加载程序会将覆盖与基本设备树合并。基础设备树偶尔会发生变化,但通常不会破坏覆盖层。
使用 config.txt
中的 dtoverlay
参数加载设备树覆盖。Raspberry Pi OS 假定所有覆盖都位于 /overlays
目录中,并使用后缀 -overlay.dtb
。例如,"dtoverlay=myoverlay "一行将加载覆盖图"/overlays/myoverlay-overlay.dtb"。
要将外设连接到计算模块,请在覆盖层中描述连接到 Bank 0 和 Bank 1 GPIO 的所有硬件。这样,您就可以使用标准的 Raspberry Pi OS 映像,因为覆盖层已被合并到标准的基本设备树中。或者,您也可以为自己的应用程序定义一个自定义的 "设备树"(Device Tree),但这样就无法使用标准的 Raspberry Pi OS 映像。取而代之的是,您必须创建一个修改过的 Raspberry Pi OS 镜像,其中包含您希望发布的每个操作系统更新的自定义设备树。如果基础覆盖层发生变化,你可能需要更新你定制的设备树。
dt-blob.bin
当 start.elf
运行时,它会首先读取 dt-blob.bin
。这是一种特殊形式的设备树 blob,它告诉 GPU 如何设置 GPIO 引脚状态。
dt-blob.bin
包含 GPU(而非 SoC)控制的 GPIO 和外设信息。例如,GPU 管理摄像头模块。GPU 需要独占一个 I2C 接口和几个引脚,才能与摄像头模块通信。
在大多数 Raspberry Pi 型号上,I2C0 被保留给 GPU 专用。dt-blob.bin
定义了用于 I2C0 的 GPIO 引脚。
默认情况下,dt-blob.bin
不存在。相反,start.elf
包含了该文件的内置版本。许多计算模块项目会提供一个自定义的 dt-blob.bin
,该文件会覆盖默认的内置文件。
dt-blob.bin
指定:
-
用于 HDMI 热插拔检测的引脚
-
用作 GPCLK 输出的 GPIO 引脚
-
启动时 GPU 可以使用的 ACT LED
minimal-cm-dt-blob.dts
是一个`.dts`设备树文件示例。它设置了 HDMI 热插拔检测和 ACT LED,并将所有其他 GPIO 设置为默认输入。
要将 minimal-cm-dt-blob.dts
编译为 dt-blob.bin
,请使用 设备树编译器 dtc
。
要在 Raspberry Pi 上安装 dtc
,请运行以下命令:
$ sudo apt install device-tree-compiler
然后,运行以下命令将 minimal-cm-dt-blob.dts
编译成 dt-blob.bin
:
$ dtc -I dts -O dtb -o dt-blob.bin minimal-cm-dt-blob.dts
有关详细信息,请参阅我们的 创建 dt-blob.bin
指南。
Arm Linux 设备树
在`start.elf`读取`dt-blob.bin`并设置初始引脚状态和时钟后,它会读取 config.txt
,其中包含许多其他系统设置选项。
读取 config.txt
之后,start.elf
会读取特定型号的设备树文件。例如,计算模块 3 使用 bcm2710-rpi-cm.dtb
。该文件是一个标准的 Arm Linux 设备树文件,详细说明了处理器上连接的硬件。它列举了
-
有哪些外围设备以及存在于何处
-
使用了哪些 GPIO
-
这些 GPIO 具有哪些功能
-
连接了哪些物理设备
如果 GPIO 的引脚状态与 dt-blob.bin
中的不同,该文件会通过覆盖引脚状态来设置 GPIO。它还会尝试加载特定设备的驱动程序。
特定型号的设备树文件包含禁用的外设条目。它不包含 GPIO 引脚定义,但 eMMC/SD 卡外设具有 GPIO 定义并始终使用相同的引脚。
设备树源代码和编译
当您构建自己的内核时,构建主机需要在 scripts/dtc
中使用设备树编译器。为了自动构建您的设备树重叠层,请将它们添加到 arch/arm/boot/dts/overlays/Makefile
中的 dtbs
make 目标中。
Raspberry Pi OS 映像提供编译后的 dtb
文件,但源代码 dts
文件位于 Raspberry Pi Linux 内核分支。在文件名中查找 rpi
。
默认的覆盖`dts`文件位于 arch/arm/boot/dts/overlays
。这些覆盖文件是创建自己的覆盖文件的良好起点。要将这些 dts
文件编译成 dtb
文件,请使用 设备树编译器 dtc
。
构建自己的内核时,构建主机需要使用 scripts/dtc
中的设备树编译器。要自动编译覆盖层,请将其添加到 arch/arm/boot/dts/overlays/Makefile
中的 dtbs
。
设备树调试
启动 Linux 内核时,GPU 会提供使用基本 dts
和任何覆盖创建的完整组装设备树。这个完整的设备树可以通过 Linux proc
界面的 `/proc/device-tree`获得。节点变成目录,属性变成文件。
你可以使用 dtc
将其写成人类可读的 dts
文件,以便调试。要查看完整的设备树,请运行以下命令:
$ dtc -I fs -O dts -o proc-dt.dts /proc/device-tree
pinctrl
提供 GPIO 引脚的状态。如果似乎出了什么问题,请尝试转储 GPU 日志信息:
$ sudo vclog --msg
Tip
|
要在输出中包含更多诊断信息,请在 config.txt 中添加 dtdebug=1 。
|
使用 Device Tree Raspberry Pi 论坛 询问与 Device Tree 相关的问题或报告问题。
示例
以下示例使用的是通过跳线连接外设的 IO 板。我们假定使用 CM1+CMIO 或 CM3+CMIO3,运行已安装的 Raspberry Pi OS Lite。这里的示例需要互联网连接,因此我们建议将 USB 集线器、键盘和无线局域网或以太网加密狗插入 IO 板 USB 端口。
将 I2C RTC 连接到第 1 组引脚
在本例中,我们将把 NXP PCF8523 实时时钟 (RTC) 连接到 IO 板第 1 组 GPIO 引脚: 3V3、GND、GPIO44 上的 I2C1_SDA 和 GPIO45 上的 I2C1_SCL。
下载 minimal-cm-dt-blob.dts
,并将其复制到 /boot/firmware/
中的启动分区。
编辑 minimal-cm-dt-blob.dts
,将 GPIO44 和 45 的引脚状态改为带上拉的 I2C1:
$ sudo nano /boot/firmware/minimal-cm-dt-blob.dts
替换以下几行:
pin@p44 { function = "input"; termination = "pull_down"; }; // DEFAULT STATE WAS INPUT NO PULL
pin@p45 { function = "input"; termination = "pull_down"; }; // DEFAULT STATE WAS INPUT NO PULL
上拉定义如下
pin@p44 { function = "i2c1"; termination = "pull_up"; }; // SDA1
pin@p45 { function = "i2c1"; termination = "pull_up"; }; // SCL1
我们可以使用 dt-blob.dts
而不做任何更改,因为 Linux 设备树会在 Linux 内核启动期间加载特定驱动程序时重新配置这些引脚。但是,如果配置了 dt-blob.dts
,GPIO 就会在 GPU 启动阶段尽快达到最终状态。在某些情况下,必须在 GPU 启动时配置引脚,以便它们在 Linux 驱动程序加载时处于特定状态。例如,复位线可能需要保持正确的方向。
运行以下命令编译 dt-blob.bin
:
$ sudo dtc -I dts -O dtb -o /boot/firmware/dt-blob.bin /boot/firmware/minimal-cm-dt-blob.dts
下载 example1-overlay.dts
,将其复制到 /boot/firmware/
中的启动分区,然后用以下命令编译:
$ sudo dtc -@ -I dts -O dtb -o /boot/firmware/overlays/example1.dtbo /boot/firmware/example1-overlay.dts
-@
标记用于编译带有外部引用的 dts
文件。这通常是必要的。
在 /boot/firmware/config.txt
中添加以下一行:
dtoverlay=example1
最后,使用 sudo reboot
重启。
重启后,你应该会在 /dev`中看到一个 `rtc0
条目。运行以下命令查看硬件时钟时间:
$ sudo hwclock
在组 0 上添加 ENC28J60 SPI 以太网控制器
在本示例中,我们使用已在 `/boot/firmware/overlays`中定义的覆盖层,将ENC28J60 SPI 以太网控制器添加到第 0 行。以太网控制器使用 SPI 引脚 CE0、MISO、MOSI 和 SCLK(分别为 GPIO8-11),GPIO25 用于下降沿中断,此外还有 GND 和 3.3V。
在本例中,我们不会更改 dt-blob.bin
。相反,在 `/boot/firmware/config.txt`中添加以下一行:
dtoverlay=enc28j60
使用 sudo reboot
重新启动。
现在你应该能在 /dev`中看到一个 `rtc0
条目。运行以下命令查看硬件时钟时间:
$ sudo hwclock
您还应该有以太网连接。运行以下命令测试连接性:
$ ping 8.8.8.8
运行以下命令显示 GPIO 功能;GPIO8-11 现在应提供 ALT0(SPI)功能:
$ pinctrl
添加树莓派相机模块
在 GitHub 上修改
计算模块有两个CSI-2相机接口:CAM1和CAM0。本节介绍如何使用带有计算模块I/O板的CAM1和CAM0接口将一个或两个Raspberry Pi相机连接到计算模块。
连接一个摄像头
要将单个相机连接到计算模块,请完成以下步骤:
-
断开计算模块的电源。
-
使用RPI-CAMERA板或Raspberry Pi Zero相机电缆将相机模块连接到CAM1端口。
-
(仅限CM1、CM3、CM3+和CM4S) :用电缆连接以下GPIO引脚:
-
0
到CD1_SDA
-
1
到CD1_SCL
-
2
到CAM1_I01
-
3
到CAM1_I00
-
-
重新连接计算模块以供电。
-
在
/boot/firmware/config.txt
中删除(或用前缀#
注释掉)以下行(如果存在):camera_auto_detect=1
dtparam=i2c_arm=on
-
(仅限CM1、CM3、CM3+和CM4S):将以下指令添加到
/boot/firmware/config.txt
以适应I/O板上交换后的GPIO引脚分配:dtoverlay=cm-swap-i2c0
-
(仅限CM1、CM3、CM3+和CM4S):将以下指令添加到
/boot/firmware/config.txt
以将GPIO 3分配为CAM1:dtparam=cam1_reg
-
将适当的指令添加到
/boot/firmware/config.txt
以手动配置相机型号的驱动程序:camera model directive v1 camera
dtoverlay=ov5647,cam1
v2 camera
dtoverlay=imx219,cam1
v3 camera
dtoverlay=imx708,cam1
HQ camera
dtoverlay=imx477,cam1
GS camera
dtoverlay=imx296,cam1
-
使用
sudo reboot
重新启动您的计算模块。 -
运行以下命令检查检测到的摄像机列表:
$ rpicam-hello --list
您应该在输出中看到您的相机型号,由上表中的驱动程序指令引用。
连接两个摄像头
要将两个摄像头连接到计算模块,请完成以下步骤:
-
按照上面的单摄像头说明进行操作。
-
断开计算模块的电源。
-
使用RPI-CAMERA板或Raspberry Pi Zero相机电缆将相机模块连接到CAM0端口。
-
(仅限CM1、CM3、CM3+和CM4S):用跨接电缆连接以下GPIO引脚:
-
28
至CD0_SDA
-
29
至CD0_SCL
-
30
至CAM0_I01
-
31
至CAM0_I00
-
-
(CM4和CM5):用两个vertical-orientation跳线连接J6 GPIO引脚。
-
重新连接计算模块以供电。
-
(仅限CM1、CM3、CM3+和CM4S):将以下指令添加到
/boot/firmware/config.txt
以将GPIO 31分配为CAM0:dtparam=cam0_reg
-
将适当的指令添加到
/boot/firmware/config.txt
以手动配置相机型号的驱动程序:camera model directive v1 camera
dtoverlay=ov5647,cam0
v2 camera
dtoverlay=imx219,cam0
v3 camera
dtoverlay=imx708,cam0
HQ camera
dtoverlay=imx477,cam0
GS camera
dtoverlay=imx296,cam0
-
使用
sudo reboot
重新启动您的计算模块。 -
运行以下命令检查检测到的摄像机列表:
rpicam-hello --list
您应该在输出中看到上表中驱动程序指令引用的两种相机型号。
软件
Raspberry Pi OS包含 libcamera
库,可帮助您使用Raspberry Pi拍摄图像。
拍张照片
使用以下命令立即拍照并将其保存到使用 MMDDhhmmss
日期格式作为文件名的PNG编码文件中:
rpicam-still --datetime -e png
使用 -t
选项添加以毫秒为单位的延迟。
使用 --width
和 --height
选项指定图像的宽度和高度。
指定使用哪个相机
默认情况下,"libcamera "总是使用"--list-cameras "列表中索引为 "0 "的摄像机。 要指定摄像机选项,可通过以下命令获取每台摄像机的索引值:
$ rpicam-hello --list-cameras
Available cameras
-----------------
0 : imx477 [4056x3040] (/base/soc/i2c0mux/i2c@1/imx477@1a)
Modes: 'SRGGB10_CSI2P' : 1332x990 [120.05 fps - (696, 528)/2664x1980 crop]
'SRGGB12_CSI2P' : 2028x1080 [50.03 fps - (0, 440)/4056x2160 crop]
2028x1520 [40.01 fps - (0, 0)/4056x3040 crop]
4056x3040 [10.00 fps - (0, 0)/4056x3040 crop]
1 : imx708 [4608x2592] (/base/soc/i2c0mux/i2c@0/imx708@1a)
Modes: 'SRGGB10_CSI2P' : 1536x864 [120.13 fps - (768, 432)/3072x1728 crop]
2304x1296 [56.03 fps - (0, 0)/4608x2592 crop]
4608x2592 [14.35 fps - (0, 0)/4608x2592 crop]
在上述输出中:
-
imx477
是指索引为0
的HQ相机 -
imx708
是指索引为1
的v3相机
要使用HQ相机,请将其索引( 0
)传递给 libcamera
的 --camera
选项:
rpicam-hello --camera 0
要使用v3相机,请将其索引( 1
)传递给 libcamera
的 --camera
选项:
$ rpicam-hello --camera 1
GPIO引脚的I2C映射
默认情况下,所提供的摄像头驱动程序假定 CAM1 使用 i2c-10
,CAM0 使用 i2c-0
。计算模块 I/O 板将以下 GPIO 引脚映射到 i2c-10
和 i2c-0
:
I/O Board Model |
i2c-10 pins |
i2c-0 pins |
---|---|---|
CM4 I/O Board |
GPIOs 44,45 |
GPIOs 0,1 |
CM1, CM3, CM3+, CM4S I/O Board |
GPIOs 0,1 |
GPIOs 28,29 |
要将摄像机连接到CM1、CM3、CM3+和CM4S I/O板,请将以下指令添加到 /boot/firmware/config.txt
以适应交换的引脚分配:
dtoverlay=cm-swap-i2c0
其他电路板可能使用其他引脚分配。请查阅电路板的相关文档,并根据自己的布局使用以下替代重写:
Swap | Override |
---|---|
Use GPIOs 0,1 for i2c0 |
|
Use GPIOs 28,29 for i2c0 (default) |
|
Use GPIOs 44&45 for i2c0 |
|
Use GPIOs 0&1 for i2c10 (default) |
|
Use GPIOs 28&29 for i2c10 |
|
Use GPIOs 44&45 for i2c10 |
|
用于关机的GPIO引脚
对于相机关机,Device Tree 使用由 cam1_reg
和 cam0_reg
覆盖分配的引脚。
CM4 IO 板为两个别名提供一个 GPIO 引脚,因此两个摄像头共享同一个调节器。
CM1、CM3、CM3+ 和 CM4S I/O 板没有为 "cam1_reg "和 "cam0_reg "提供 GPIO 引脚,因此这些板上的调节器被禁用。不过,您可以在 /boot/firmware/config.txt
中使用以下指令启用它们:
-
dtparam=cam1_reg
-
dtparam=cam0_reg
要将 cam1_reg
和 cam0_reg
指定给定制电路板上的特定引脚,请在 /boot/firmware/config.txt
中使用以下指令:
-
dtparam=cam1_reg_gpio=<pin number>
-
dtparam=cam0_reg_gpio=<pin number>
例如,要将引脚 42 用作 CAM1 的稳压器,可在 /boot/firmware/config.txt
中添加指令 dtparam=cam1_reg_gpio=42
。
这些指令仅适用于直接连接到 SoC 的 GPIO 引脚,不适用于 GPIO 扩展引脚。
连接官方 7 英寸显示屏
在 GitHub 上修改
在开始之前,请将系统软件和固件更新到最新版本。 计算模块大多使用相同的流程,但有时物理差异会迫使特定型号发生变化。
将显示器连接到 DISP1
Note
|
Raspberry Pi Zero 摄像头电缆不能用作 RPI-DISPLAY 适配器的替代品。这两根电缆有不同的接线。 |
要将显示器连接到 DISP1:
-
断开计算模块的电源。
-
通过 22W 至 15W 显示适配器将显示器连接到计算模块 IO 板上的 DISP1 端口。
-
(仅限 CM1、CM3、CM3+ 和 CM4S):使用跳线连接以下 GPIO 引脚:
-
0
到CD1_SDA
-
1
到CD1_SCL
-
-
将计算模块重新上电。
-
将以下行添加到
/boot/firmware/config.txt
:dtoverlay=vc4-kms-dsi-7inch
-
使用
sudo reboot
重新启动计算模块。您的设备应检测到并开始将输出显示到您的显示器。
将显示器连接到 DISP0
要将显示器连接到 DISP0:
-
通过 22W 至 15W 显示适配器将显示器连接到计算模块 IO 板上的 DISP0 端口。
-
(仅限 CM1、CM3、CM3+ 和 CM4S):使用跳线连接以下 GPIO 引脚:
-
28
连接到CD0_SDA
-
29
连接到CD0_SCL
-
-
将计算模块重新上电。
-
将以下行添加到
/boot/firmware/config.txt
:dtoverlay=vc4-kms-dsi-7inch
-
使用
sudo reboot
重新启动计算模块。您的设备应检测并开始将输出显示到您的显示器。
规格
在 GitHub 上修改
计算模块 4S datasheet
计算模块 4S (CM4S) 以 CM1、CM3 和 CM3+ 的 DDR2-SODIMM 外形提供 CM4 的内部结构。要了解有关 CM4S 的更多信息,请参阅以下文档:
计算模块 3+ datasheet
Compute Module 3+ (CM3+) 是受支持的产品,其生命周期(EOL)终止日期不早于 2028 年 1 月。要了解有关 CM3+ 及其相应 IO 板的更多信息,请参阅以下文档:
计算模块 1 和计算模块 3 datasheet
Raspberry Pi 计算模块 1(CM1)和计算模块 3(CM3)是受支持的产品,其生命周期(EOL)终止日期不早于 2026 年 1 月。要了解有关 CM1 和 CM3 的更多信息,请参阅以下文档:
计算模块 IO 板原理图
计算模块 IO 板 (CMIO) 为 CM1、CM3、CM3+ 和 CM4S 提供各种接口。计算模块 IO 板有两个版本: 版本 1 和版本 3。版本 1 仅与 CM1 兼容。版本 3 与 CM1、CM3、CM3+ 和 CM4S 兼容。计算模块 IO 板版本 3 有时简称为 CMIO3。要了解有关 CMIO1 和 CMIO3 的更多信息,请参阅以下文档: