Raspberry Pi 硬件
简介
在 GitHub 上修改
Raspberry Pi 电脑分为几个不同的系列:
-
旗舰 系列通常简称为 "Raspberry Pi",提供高性能硬件、完整的 Linux 操作系统和各种常用端口,外形尺寸与信用卡差不多。
-
Keyboard 系列提供高性能旗舰硬件、完整的 Linux 操作系统,并在键盘外形中捆绑了各种常用端口。
-
Zero 系列提供完整的 Linux 操作系统和基本端口,价格实惠,外形小巧,功耗低。
-
计算模块 系列,通常简称为 "CM",在适合工业和嵌入式应用的最小外形中提供高性能硬件和完整的 Linux 操作系统。Compute Module 型号的硬件与相应的旗舰型号相当,但端口较少,没有板载 GPIO 引脚。用户应将计算模块连接到一个单独的底板上,该底板可提供特定应用所需的端口和引脚。
此外,Raspberry Pi 还生产 Pico 系列小巧、多功能的 微控制器板。Pico 型号不运行 Linux,也不允许使用可移动存储器,而是允许通过将二进制文件闪存到板载Flash上进行编程。
旗舰系列
型号 B 表示有以太网端口。 型号 A 表示成本较低的型号,外形较小,没有以太网端口,内存减少,USB 端口减少,以限制电路板高度。
Model | SoC | Memory | GPIO | Connectivity |
---|---|---|---|---|
![]() Raspberry Pi Model B
|
256MB 512MB |
26-pin GPIO header |
|
|
![]() Raspberry Pi Model A
|
256MB |
26-pin GPIO header |
|
|
![]() Raspberry Pi Model B+
|
512MB |
40-pin GPIO header |
|
|
![]() Raspberry Pi Model A+
|
256MB 512MB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 2 Model B
|
1 GB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 3 Model B
|
1 GB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 3 Model B+
|
1GB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 3 Model A+
|
512 MB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 4 Model B
|
1GB 2GB 4GB 8GB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 5
|
2GB 4GB 8GB 16GB |
40-pin GPIO header |
|
有关 Raspberry Pi 旗舰系列端口的更多信息,请参阅 原理图和机械图纸。
Keyboard series
键盘系列设备使用形式为 <X00>
的型号标识符,其中 X
表示相应的旗舰系列设备。例如,"Raspberry Pi 500" 是 Raspberry Pi 5 的键盘版本。
Model | SoC | Memory | GPIO | Connectivity |
---|---|---|---|---|
![]() Raspberry Pi 400
|
4GB |
40-pin GPIO header |
|
|
![]() Raspberry Pi 500
|
8GB |
40-pin GPIO header |
|
Zero series
后缀为 H 的型号已将针脚预焊在 GPIO 针脚上。没有 H 后缀的型号没有连接到 GPIO 针座的针座引脚;用户必须手动焊接引脚或安装第三方引脚套件。
所有 Zero 型号都具有以下连接功能:
-
a microSD card slot
-
a mini HDMI port
-
2× micro USB ports (one for input power, one for external devices)
Since version 1.3 of the original Zero, all Zero models also include:
-
a mini 22-pin, 0.5mm (fine) pitch, 11.5mm width, CSI (camera) port
Model | SoC | Memory | GPIO | Wireless Connectivity |
---|---|---|---|---|
![]() Raspberry Pi Zero
|
512MB |
40-pin GPIO header (unpopulated) |
none |
|
![]() Raspberry Pi Zero W
|
512MB |
40-pin GPIO header (unpopulated) |
|
|
![]() Raspberry Pi Zero WH
|
512MB |
40-pin GPIO header |
|
|
![]() Raspberry Pi Zero 2 W
|
512MB |
40-pin GPIO header (unpopulated) |
|
|
![]() Raspberry Pi Zero 2 WH
|
512MB |
40-pin GPIO header |
|
Compute Module series
Model | SoC | Memory | Storage | Form factor | Wireless Connectivity |
---|---|---|---|---|---|
![]() Raspberry Pi Compute Module 1
|
512MB |
4GB |
DDR2 SO-DIMM |
none |
|
![]() Raspberry Pi Compute Module 3
|
1GB |
0GB (Lite) 4GB |
DDR2 SO-DIMM |
none |
|
![]() Raspberry Pi Compute Module 3+
|
1GB |
0GB (Lite) 8GB 16GB 32GB |
DDR2 SO-DIMM |
none |
|
![]() Raspberry Pi Compute Module 4S
|
1GB 2GB 4GB 8GB |
0GB (Lite) 8GB 16GB 32GB |
DDR2 SO-DIMM |
none |
|
![]() Raspberry Pi Compute Module 4
|
1GB 2GB 4GB 8GB |
0GB (Lite) 8GB 16GB 32GB |
dual 100-pin high density connectors |
optional:
|
|
![]() Raspberry Pi Compute Module 5
|
2GB 4GB 8GB |
0GB (Lite) 16GB 32GB 64GB |
dual 100-pin high density connectors |
optional:
|
Note
|
使用 DDR2 SO-DIMM 物理外形尺寸的计算模块与 DDR2 SO-DIMM 电气规格 不 兼容。 |
有关 Raspberry Pi 计算模块的更多信息,请参阅 计算模块文档。
Pico microcontrollers
后缀为 H 的型号已将针脚预焊在 GPIO 针脚上。没有 H 后缀的型号没有连接到 GPIO 针座的针座引脚;用户必须手动焊接引脚或安装第三方引脚套件。
Model | SoC | Memory | Storage | GPIO | Wireless Connectivity |
---|---|---|---|---|---|
![]() Raspberry Pi Pico
|
264KB |
2MB |
two 20-pin GPIO headers (unpopulated) |
none |
|
![]() Raspberry Pi Pico H
|
264KB |
2MB |
two 20-pin GPIO headers |
none |
|
![]() Raspberry Pi Pico W
|
264KB |
2MB |
two 20-pin GPIO headers (unpopulated) |
* 2.4GHz single-band 802.11n Wi-Fi (10Mb/s) * Bluetooth 5.2, Bluetooth Low Energy (BLE) |
|
![]() Raspberry Pi Pico WH
|
264KB |
2MB |
two 20-pin GPIO headers |
* 2.4GHz single-band 802.11n Wi-Fi (10Mb/s) * Bluetooth 5.2, Bluetooth Low Energy (BLE) |
|
![]() Raspberry Pi Pico 2
|
520KB |
4MB |
two 20-pin GPIO headers (unpopulated) |
none |
|
![]() Raspberry Pi Pico 2 W
|
520KB |
4MB |
two 20-pin GPIO headers (unpopulated) |
|
有关 Raspberry Pi Pico 型号的更多信息,请参阅 Pico 文档。
Schematics and mechanical drawings
在 GitHub 上修改
Schematics for the various Raspberry Pi board versions:
Raspberry Pi 5
-
STEP file for Raspberry Pi 5
Raspberry Pi 1 Model A+
Note
|
Mechanical drawings for the Raspberry Pi 3 Model A+ are also applicable to the Raspberry Pi 1 Model A+. |
Raspberry Pi Zero 2 W
Test pad locations
The Raspberry Pi Zero 2 W has a number of test pad locations used during production of the board.

Label | Function | X (mm from origin) | Y (mm from origin) |
---|---|---|---|
STATUS_LED |
Power state of LED (LOW = ON) |
5.15 |
8.8 |
CORE |
Processor power |
6.3 |
18.98 |
RUN |
Connect to GND to reset |
8.37 |
22.69 |
5V |
5V input |
8.75 |
11.05 |
5V |
5V input |
11.21 |
6.3 |
GND |
Ground pin |
10.9 |
3.69 |
GND |
Ground pin |
17.29 |
2.41 |
USB_DP |
USB port |
22.55 |
1.92 |
USB_DM |
USB port |
24.68 |
1.92 |
OTG |
On-the-go ID pin |
39.9 |
7.42 |
1V8 |
1.8V analog supply |
42.03 |
8.42 |
TV |
Composite TV out |
45.58 |
3.17 |
GND |
Ground pin |
49.38 |
3.05 |
GND |
Ground pin |
55.99 |
22.87 |
3V3 |
3.3V I/O supply |
48.55 |
22.44 |
SD_CLK |
SD Card clock pin |
60.95 |
18.45 |
SD_CMD |
SD Card command pin |
58.2 |
16.42 |
SD_DAT0 |
SD data pin |
58.13 |
20.42 |
SD_DAT1 |
SD data pin |
60.65 |
21.1 |
SD_DAT2 |
SD data pin |
57.78 |
13.57 |
SD_DAT3 |
SD data pin |
60.8 |
15.22 |
BT_ON |
Bluetooth power status |
25.13 |
19.55 |
WL_ON |
Wireless LAN power status |
27.7 |
19.2 |
产品合规性和安全性
在 GitHub 上修改
所有Raspberry Pi产品都经过了广泛的合规性测试。有关详细信息,请参阅 产品信息门户。
树莓派合规支持
合规性支持计划旨在消除浏览合规性问题的负担,并使公司更容易将新产品带给消费者。它提供了在合规性测试期间为我们的树莓派工作的相同测试工程师的访问权限,将用户与 UL 的一个专门团队联系起来,该团队通过他们对树莓派的深入了解来评估和测试用户的产品。
了解有关 Raspberry Pi合规支持计划 的更多信息。
由树莓派提供支持
树莓派计划为希望使用树莓派标志的公司提供了一个流程,涵盖了内部有树莓派电脑或silicon的产品,以及树莓派提供的服务。如果你想开始申请,你可以 在线 申请。
认可的设计合作伙伴
我们的 认可设计合作伙伴 名单提供了一系列我们密切合作和支持的咨询公司,因此他们可以在硬件、软件和机械领域提供付费设计服务。
频率管理和热控制
在 GitHub 上修改
所有Raspberry Pi型号都执行一定程度的热管理,以避免在重载下过热。SoC有一个内部温度传感器,GPU上的软件会轮询该传感器以确保温度不超过我们定义的所有型号的85°C限制。可以将其设置为较低的值,但不能设置为较高的值。随着设备接近极限,芯片(Arm、GPU)上使用的各种频率有时甚至电压都会降低。这减少了产生的热量,保持了温度可控。
当内核温度在80°C到85°C之间时,Arm内核将逐步节流。如果温度达到85°C,Arm内核和GPU都将被节流。
对于Raspberry Pi 3 Model B+,PCB技术进行了更改,以提供更好的散热和增加的热质量。此外,还引入了软温度限制,目标是最大限度地延长设备在达到85°C的硬限制之前可以 冲刺
的时间。当达到软限制时,时钟速度从1.4GHz降低到1.2GHz,工作电压略有降低。这降低了温度上升的速度:我们将1.4GHz的短周期换成1.2GHz的较长周期。默认情况下,软限制为60°C,这可以通过 config.txt 中的 temp_soft_limit
设置进行更改。
Raspberry Pi 4 Model B继续采用与Raspberry Pi 3 Model B+相同的PCB技术,以帮助散发多余的热量。目前没有定义软限制。
使用DVFS
Note
|
DVFS的讨论仅适用于4-系列产品(Raspberry Pi 4 Model B、Raspberry Pi 400 和 Compute Module 4,Pi 400)。 |
Raspberry Pi 4设备实现动态电压和频率缩放(DVFS)。这种技术允许Raspberry Pi 4设备在较低温度下运行,同时仍能提供相同的性能。
SoC 内部的各种时钟(如 Arm、Core、V3D、ISP、H264、HEVC)都受到固件的监控,只要它们不是以全速运行,提供给由时钟驱动的芯片特定部分的电压就会相对于全速降低。实际上,只需提供足够的电压,就能保证模块以特定的速度正常运行。这可以显著降低 SoC 的功耗,从而减少产生的总热量。
由于低电压运行可能涉及系统稳定性问题,尤其是在使用低电压固定时钟外设(如 PCIe)时,因此有三种 DVFS 模式可用,可在 /boot/firmware/config.txt
中使用以下属性进行配置。大多数系统应使用 dvfs=3
,无显示器系统可能会因使用 dvfs=1
而略微降低功耗,但有可能出现 PCIe 稳定性问题。
属性=值 | 描述 |
---|---|
|
允许欠压 |
|
默认工作频率的固定电压 |
|
如果在 |
Note
|
此设置已在5-系列设备上删除,并且实际上始终处于模式3。 |
此外,更步进的中央处理器调速器也用于对ARM核心频率进行更细粒度的控制,这意味着DVFS更有效。这些步骤现在是1500MHz、1000MHz、750MHz和600MHz。当SoC被节流时,这些步骤也会有所帮助,这意味着一路节流回600MHz的可能性要小得多,从而全面提高满载性能。
默认 CPU 调速器为 ondemand
。可以使用 cpufreq-set
命令(来自 cpufrequtils
软件包)手动更改调速器,以减少空闲功耗:
$ sudo apt install cpufrequtils
$ sudo cpufreq-set -g powersave
测量温度
由于树莓派设备上使用的SoC的架构,以及树莓派操作系统发行版中上游温度监控代码的使用,基于Linux的温度测量可能不准确。然而, vcgencmd
命令提供当前SoC温度的准确瞬时读数,因为它直接与GPU通信:
$ vcgencmd measure_temp
风扇外壳
为确保 Raspberry Pi 的最佳性能,请使用主动冷却解决方案,如风扇。Raspberry Pi 固件可管理所有官方风扇的转速。
Raspberry Pi 4 风扇
对于 Raspberry Pi 4,将 Raspberry Pi 4 外壳风扇 添加到 Raspberry Pi 4 外壳的盖子上。
Raspberry Pi 5 风扇
Raspberry Pi 5可以使用下列选项之一来帮助冷却:
Raspberry Pi 5 的两个风扇选项都插入了位于电路板右上方 40 针 GPIO 接头和 USB 2 端口之间的四针 JST-SH PWM 风扇接头。风扇连接器的电流限制与 USB 外围设备相同。我们向超频者推荐 Active Cooler 机箱,因为它能提供更好的散热性能。
当 Raspberry Pi 5 的温度升高时,风扇的反应如下:
-
50°C以下,风扇停止(0%转速)
-
50°C,风扇低速开启(30%转速)
-
在60°C时,风扇转速增加到中速(50%转速)
-
在67.5°C时,风扇转速提升至高速(70%转速)
-
在75°C风扇增加到全速(100%速度)
温度降低使用具有5°C滞后的相同映射;当温度下降到低于上述每个阈值的5°C时,风扇速度会降低。
启动时风扇打开,转速表输入检查风扇是否在旋转。如果是,则启用 cooling_fan
设备树overlay。默认情况下,此overlay位于 bcm2712-rpi-5-b.dtb
中,但带有 status=disabled
。
树莓派启动EEPROM
在 GitHub 上修改
以下 Raspberry Pi 型号使用 EEPROM 启动系统:
-
自 Raspberry Pi 4B 起的旗舰机型
-
从 CM4 开始的计算模块型号(包括 CM4S)
-
自 Pi 400 起带键盘的型号
所有其他型号的 Raspberry Pi 计算机都使用位于启动文件系统中的 bootcode.bin
文件。
Note
|
您可以在 rpi-eeprom GitHub存储库 中找到用于创建 rpi-eeprom 的脚本和预编译二进制文件。
|
更新引导加载程序
有多种方法可以更新Raspberry Pi的引导加载程序。
旗舰型号自 Raspberry Pi 4B 开始;计算模块自 CM5 开始;键盘型号自 Pi 400 开始
Raspberry Pi OS 会自动更新引导加载程序以修复重要错误。要手动更新引导加载器或更改启动顺序,请使用 raspi-config。
Note
|
计算模块 4 和计算模块 4S 不支持自动引导加载程序更新,因为引导rom 无法从 eMMC 加载`recovery.bin`文件。推荐的更新机制是 rpiboot 或通过 flashrom - 请参阅 rpi-eeprom-update -h 获取更多信息。
|
使用 Raspberry Pi Imager 更新引导加载程序
Raspberry Pi Imager提供了一个用于更新引导加载程序和选择引导模式的GUI。
-
选择一张备用 SD 卡(引导加载程序映像会格式化整张卡)
-
启动 Raspberry Pi Imager
-
选择
Choose OS
-
选择
Misc utility images
-
为您的 Raspberry Pi 版本选择
Bootloader
(Pi 400 属于 4 系列)。 -
选择启动模式:
SD
(推荐),USB
或Network
-
选择
SD card
,然后选择Write
-
单击
Yes
继续 -
使用新映像启动树莓派,等待至少十秒钟
-
当绿色活动 LED 以稳定模式闪烁且 HDMI 显示屏显示绿色屏幕时,您已成功写入引导加载程序。
-
关闭 Raspberry Pi 电源并取出 SD 卡
使用 raspi-config
更新引导加载程序
要从Raspberry Pi OS中更改引导模式或引导加载程序版本,请运行 raspi-config。
-
Update Raspberry Pi OS 获取最新版本的
rpi-eeprom
软件包。 -
运行
sudo raspi-config
。 -
选择
Advanced Options
。 -
选择
Bootloader Version
. -
选择
Default
(出厂默认设置)或Latest
(最新的引导加载程序版本)。 -
使用
sudo reboot
重新启动。
更新引导加载程序配置
引导加载程序的 default
版本代表最新的出厂默认固件镜像。它更新以提供关键bug修复、硬件支持,并在 latest
版本中测试功能后定期更新。
latest
引导加载程序更频繁地更新以包含最新的修复和改进。
高级用户可以切换到 latest
引导加载程序以获取最新功能。
首先确保你的设备正在使用最新的软件,运行下面命令升级软件:
运行以下命令启动 raspi-config
。
$ sudo apt update && sudo apt full-upgrade
然后使用以下命令打开 raspi-config
:
$ sudo raspi-config
导航到 Advanced Options
,然后导航到 Bootloader Version
。选择 Latest
并选择 Yes
以确认。选择 Finish
并确认您要重新启动。重新启动后,再次打开命令提示符并更新您的系统:
$ sudo apt update
如果您运行 sudo rpi-eeprom-update
,您应该会看到引导加载程序的最新版本可用,并且是最新版本。
*** UPDATE AVAILABLE *** BOOTLOADER: update available CURRENT: Thu 18 Jan 13:59:23 UTC 2024 (1705586363) LATEST: Mon 22 Jan 10:41:21 UTC 2024 (1705920081) RELEASE: latest (/lib/firmware/raspberrypi/bootloader-2711/latest) Use raspi-config to change the release. VL805_FW: Using bootloader EEPROM VL805: up to date CURRENT: 000138c0 LATEST: 000138c0
现在您可以更新您的引导加载程序。
$ sudo rpi-eeprom-update -a
$ sudo reboot
重新启动,然后运行 sudo rpi-eeprom-update
。您现在应该看到 CURRENT
日期已更新到引导加载程序的最新版本:
BOOTLOADER: up to date CURRENT: Mon 22 Jan 10:41:21 UTC 2024 (1705920081) LATEST: Mon 22 Jan 10:41:21 UTC 2024 (1705920081) RELEASE: latest (/lib/firmware/raspberrypi/bootloader-2711/latest) Use raspi-config to change the release. VL805_FW: Using bootloader EEPROM VL805: up to date CURRENT: 000138c0 LATEST: 000138c0
自动更新
rpi-eeprom-update
systemd
服务在启动时运行,并在有新镜像可用时应用更新,自动迁移当前引导加载程序配置。
要禁用自动更新:
$ sudo systemctl mask rpi-eeprom-update
要重新启用自动更新:
$ sudo systemctl unmask rpi-eeprom-update
Note
|
如果设置了 FREEZE_VERSION bootloader配置,则更新服务将跳过任何自动更新。如果安装了多个操作系统或交换SD卡,则无需单独禁用更新服务。 |
rpi-eeprom-update
Raspberry Pi OS使用 rpi-EEPROM-update
脚本来实现 [automaticupdates,automatic update] 服务。该脚本还可交互运行或封装,以创建自定义引导程序更新服务。
阅读当前引导加载程序版本:
$ vcgencmd bootloader_version
检查是否有可用的更新:
$ sudo rpi-eeprom-update
安装更新:
$ sudo rpi-eeprom-update -a
$ sudo reboot
取消待处理的更新:
$ sudo rpi-eeprom-update -r
安装特定的引导加载程序镜像:
$ sudo rpi-eeprom-update -d -f pieeprom.bin
-d
标志指示 rpi-eeprom-update
使用指定镜像文件中的配置,而不是自动迁移当前配置。
显示内置的文档:
$ rpi-eeprom-update -h
引导加载程序发布状态
固件发布状态对应于引导加载程序固件镜像的特定子目录( /lib/firmware/raspberrypi/bootloader/...
),并且可以更改以选择不同的发布流。
-
default
- 更新了新的硬件支持,关键bug修复和定期更新的新功能,已通过最新版本测试 -
latest
- 新功能可用时更新
由于发布状态字符串只是一个子目录名称,因此可以创建您自己的发布流,例如固定版本或自定义网络启动配置。
更改引导加载程序版本
Note
|
您可以通过编辑 /etc/default/rpi-eeprom-update 文件并将 FIRMWARE_RELEASE_STATUS 条目更改为适当的流来更改更新期间要使用的发布流。
|
更新引导加载程序镜像文件中的引导加载程序配置
以下命令将 pieeprom.bin
中的引导加载程序配置替换为 boot.conf
并将新镜像写入 new.bin
:
$ rpi-eeprom-config --config boot.conf --out new.bin pieeprom.bin
recovery.bin
开机时,BCM2711 和 BCM2712 上的 ROM 会在 SD 卡启动分区的根目录下查找名为 recovery.bin
的文件。如果找到有效的 recovery.bin
文件,ROM 将执行该文件而不是 EEPROM 的内容。这种机制可确保引导加载器flash镜像始终可以重置为具有出厂默认设置的有效镜像。
引导加载程序更新文件
文件名 |
目的 |
|
引导加载程序恢复可执行文件 |
|
引导加载程序EEPROM镜像 |
|
引导加载程序EEPROM镜像 - 与pieeprom.upd相同,但会更改recovery.bin行为 |
|
引导加载程序镜像的sha256校验和 (pieeprom.upd/pieeprom.bin) |
|
VLI805 USB固件EEPROM镜像 - 树莓派4B修订版1.3及更早版本。 |
|
vl805.bin的sha256校验和 |
-
如果引导加载程序更新映像名为
pieeprom.upd
,那么更新完成后,recovery.bin
将更名为recovery.000
,然后系统重新启动。由于recovery.bin
已不存在,ROM 将从 SPI 闪存加载新更新的引导加载程序,操作系统将正常启动。 -
如果引导加载程序更新映像名为
pieeprom.bin
,则recovery.bin
将在更新完成后停止。更新成功时,HDMI 输出为绿色,绿色活动 LED 快速闪烁。如果更新失败,HDMI 输出将变为红色,活动 LED 将显示 错误代码。 -
.sig
文件包含相应映像文件的十六进制 sha256 校验和;将来可能会添加其他字段。 -
BCM2711 和 BCM2712 上的 ROM 不支持从 USB 大容量存储器或 TFTP 加载
recovery.bin
。相反,较新版本的引导加载程序支持自更新机制,引导加载程序能够自行重新刷新 SPI 闪存。请参阅 bootloader 配置 页面上的ENABLE_SELF_UPDATE
。 -
启动时,临时 EEPROM 更新文件会被
rpi-eeprom-update
服务自动删除。
有关 rpi-eeprom-update
配置文件的更多信息,请参阅 rpi-eeprom-update -h
。
EEPROM写保护
引导加载程序和 VLI EEPROM 都支持硬件写保护。 请参阅 eeprom_write_protect
选项,了解如何在烧录 EEPROM 时启用硬件写保护。
启动诊断
在 GitHub 上修改
从Raspberry Pi 4引导加载程序的版本2020-04-16开始,可以在启动时在HDMI显示器上显示诊断信息。要查看此诊断信息,请关闭Raspberry Pi 4电源,取出SD卡,然后重新启动。显示器上应显示类似于以下的诊断显示。

如果引导加载程序无法从插入的SD卡引导,或无法进行网络引导;例如,如果卡上没有可引导映像,或者它有缺陷,或者网络引导参数不正确,也会出现此诊断页面。
显示诊断页面后,只有通过拔掉设备电源然后重新插入电源才能重新启动。
顶部一行描述Raspberry Pi的型号及其内存容量。二维码是指向 downloads page 的链接。
诊断信息如下:
Line | Information |
---|---|
|
Bootloader git version - RO (if EEPROM is write protected) - software build date |
|
the timestamp corresponding to when the EEPROM configuration was updated; this timestamp is checked in self-update mode to avoid updating to an old configuration |
|
If secure-boot is enabled, displays the processor revision (B0/C0) and signed-boot status flags; otherwise, this line is blank |
|
Board revision - serial number - Ethernet MAC address |
|
mode (current boot mode name and number) order (the BOOT ORDER configuration) retry (retry count in the current boot mode) restart (number of cycles through the list of boot modes) |
|
The SD card detect status (detected/not detected). |
|
Master Boot Record primary partitions type:LBA |
|
Filename for |
|
Network boot: link status (up/down), client IP address (ip), subnet (sn), default gateway (gw) |
|
Network boot: TFTP server IP address |
|
Indicates whether hotplug was detected ( |
要禁用诊断显示,请使用 bootloader 配置中的 DISABLE_HDMI
选项。
树莓派启动模式
在 GitHub 上修改
树莓派有许多不同的引导阶段。本文档解释了引导模式的工作原理,以及Linux引导支持哪些模式。
指定 bootcode.bin
- 仅引导模式
USB主机和以太网引导可以通过基于BCM2837的Raspberry Pi来执行 - 即Raspberry Pi 2B V1.2、Raspberry Pi 3B和Raspberry Pi 3B+(Raspberry Pi 3A+不能网络引导,因为它没有内置的以太网接口)。此外,Raspberry Pi 4之前的所有Raspberry Pi型号都可以使用 bootcode.bin
方法来启用USB主机引导。
Note
|
自 Raspberry Pi 4 起,旗舰设备不再使用 bootcode.bin 文件。相反,这些设备使用板载 EEPROM 芯片中的引导加载程序。有关详细信息,请参阅 EEPROM 启动流程 和 SPI 启动 EEPROM 文档。
|
将 SD 卡格式化为 FAT32,并复制最新的 bootcode.bin
。SD 卡必须存在于 Raspberry Pi 中才能启动。从 SD 卡加载 bootcode.bin
后,Raspberry Pi 将继续使用 USB 主机模式启动。
这对于基于 BCM2835 和 BCM2836 芯片的 Raspberry Pi 1、2 和 Zero 型号以及 Raspberry Pi 3 无法启动的情况都很有用(与烧入 BCM2837A0 的启动代码相比,最新的 bootcode.bin
包括针对 Raspberry Pi 3B 的额外错误修复)。
如果您遇到大容量存储设备仍然无法工作的问题,即使有了 bootcode.bin
,也可以在 SD 卡中添加一个名为 "timeout" 的新文件。这将把等待大容量存储设备初始化的时间延长至六秒。
启用 bootcode.bin
UART
Note
|
适用于 Raspberry Pi 4 之前发布的电路板。 |
有关使用 EEPROM 引导加载程序启用 UART 的信息,请参阅 引导加载程序配置 文档。
可以启用早期阶段的 UART 来调试启动问题(对于上述仅使用 bootcode.bin
的启动模式很有用)。要做到这一点,请确保您已获得最新版本的固件(包括 bootcode.bin
)。检查当前固件是否支持 UART:
$ strings bootcode.bin | grep BOOT_UART
从 bootcode.bin
启用 UART:
$ sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin
接下来,将合适的 USB 串口电缆连接到主机(Raspberry Pi 也可以,不过您可能会发现最简单的方法是使用 USB 串口电缆,因为它开箱即可使用,无需任何烦人的 config.txt 设置)。在 Raspberry Pi 或计算模块上使用标准引脚 6、8 和 10(GND、GPIO14、GPIO15)。
然后使用 Linux 或 macOS 上的 screen
或 Windows 上的 putty
连接到串口。
将串口设置为以 115200-8-N-1 的速度接收,然后启动 Raspberry Pi。 当 bootcode.bin
运行时,你应该能立即从设备获得串口输出。
USB启动模式
在 GitHub 上修改
USB 有两种不同的启动模式:
-
USB 设备启动
-
USB 主机启动
固件会根据 OTP 位在启动时选择这两种模式。有两个位控制 USB 启动。第一个位启用 USB 设备启动,默认为启用;第二个位启用 USB 主机启动。
如果 USB 主机启动模式位被设置,处理器就会读取 OTGID 引脚,以决定是作为主机启动(与任何 Raspberry Pi Model B/B+ 一样驱动为零)还是作为设备启动(保持浮动)。Raspberry Pi Zero 可以通过 USB 连接器访问 OTGID 引脚;而 Compute Module 则可以访问边缘连接器上的 OTGID 引脚。
其他一些 OTP 位允许某些 GPIO 引脚选择启动模式。
USB设备启动模式
Note
|
USB 设备启动在 计算模块系列、Zero系列 和 Model A 旗舰系列变体 上可用。 |
当启动模式被激活时(通常是在从SD卡启动失败后),树莓派将其USB端口置于设备模式,并等待主机的USB重置。可以在 Github 找到显示主机需要如何与树莓派对话的示例代码。
主机首先通过控制端点 0 向设备发送一个结构,其中包含引导的大小和签名(未启用安全功能,因此不需要签名)。其次,向端点 1 发送代码(bootcode.bin)。 最后,设备将回复一个成功代码:
-
0
- 成功 -
0x80
- 失败
USB主机启动模式
Note
|
Compute Module 系列(自 Compute Module 3 起)、Zero 系列(自 Zero 2 W 起)、Raspberry Pi 2B(1.2 版)、Raspberry Pi 3B 和 所有旗舰系列设备(自 Raspberry Pi 3B+ 起)支持主机启动。Raspberry Pi 3A+ 支持大容量存储器启动,但不支持网络启动。 |
USB主机启动模式遵循以下顺序:
在 Raspberry Pi 3B、3A+ 和 3B+ 上,主机启动默认为禁用。要启用 USB 主机启动,请在 /boot/firmware/config.txt
的末尾添加一行包含 program_usb_boot_mode=1
的内容。
Warning
|
您对 OTP 所做的任何更改都是永久性的,无法撤销。 在 Raspberry Pi 3A+ 上,将 OTP 位设置为启用 USB 主机启动模式将永久阻止 Raspberry Pi 以 USB 设备模式启动。 |
USB大容量存储启动
在 GitHub 上修改
Note
|
适用于 自 Compute Module 3 起的 Compute Module 系列、自 Zero 2 W 起的 Zero 系列 和 自 Raspberry Pi 2B(1.2 版)起的所有旗舰系列设备。 |
USB 大容量存储启动让您可以从闪存盘或 USB 磁盘等 USB 大容量存储设备启动 Raspberry Pi。在连接 USB 设备(尤其是硬盘和固态硬盘)时,请注意它们的电源要求。连接一个以上的磁盘通常需要额外的外部电源,这些电源可以来自供电的磁盘盒或供电的 USB 集线器。
Note
|
Models prior to Raspberry Pi 4B have known issues which prevent booting with some USB devices. |
带有 EEPROM 引导加载程序的设备
只要在 BOOT_ORDER
配置中指定 USB 启动,Raspberry Pi 4 和更新的旗舰系列设备以及 Compute Module 4 和 4S 之后的 Compute Module 设备默认支持 USB 启动。
Note
|
早期版本的 Raspberry Pi 4 可能需要 bootloader update 才能从 USB 启动。 |
Note
|
早期版本的 Compute Module 4 可能需要 bootloader update 才能从 USB 启动。 |
Raspberry Pi 2B, 3A+, 3B, CM3, CM3+, Zero 2 W
在 Raspberry Pi 2B v1.2、3A+、3B、Zero 2 W 以及 Compute Module 3 和 3+上,必须首先启用 USB主机启动模式。这允许 USB 大容量存储器启动和 网络启动。
Note
|
Raspberry Pi 3A+或Zero 2 W不支持网络启动。 |
要在这些设备上启用 USB 主机启动模式,请在 OTP(一次性可编程)内存中设置 USB 主机位。要设置该位,请从 SD 卡启动,其中 /boot/firmware/config.txt
包含 program_usb_boot_mode=1
行。一旦设置了该位,就可以不使用 SD 卡而通过 USB 启动。
启用带 OTP 的 USB 主机启动模式
Warning
|
对 OTP(一次性可编程)内存所做的任何更改都是永久性的,无法撤销。 在 Raspberry Pi 3A+ 上,设置 OTP 位以启用 USB 主机启动模式将永久阻止 Raspberry Pi 以 USB 设备模式启动。 |
使用任何已刷新 Raspberry Pi OS 的 SD 卡来编程 OTP 位。
要启用 USB 主机启动模式,请在 config.txt
中添加以下一行:
program_usb_boot_mode=1
然后,使用 sudo reboot
重启 Raspberry Pi。要检查 OTP 编程是否正确,请运行以下命令:
$ vcgencmd otp_dump | grep 17:
17:3020000a
检查是否显示输出 0x3020000a
。如果不是,则说明OTP位没有成功编程。在这种情况下,请再次进行编程过程。如果该位仍未设置,这可能表明Raspberry Pi硬件本身存在故障。
您现在可以像从SD卡启动一样从USB大容量存储设备启动。有关详细信息,请参阅以下部分。
从USB大容量存储启动
过程 与SD卡相同 - 只需将USB存储设备镜像为操作系统镜像。
准备好存储设备后,连接驱动器并启动Raspberry Pi,同时了解外部驱动器的额外USB电源要求。
5到10秒后,Raspberry Pi应该开始启动并在连接的显示器上显示彩虹启动屏幕。确保您没有在Raspberry Pi中插入SD卡,因为如果您这样做了,它将首先启动。
请参阅 引导模式文档 了解引导顺序和替代引导模式(网络、USB设备、GPIO或SD引导)。
已知问题
-
检查可启动USB设备的默认超时时间为两秒。一些闪存驱动器和硬盘启动速度太慢。可以将此超时时间延长至五秒(向SD卡添加新文件
timeout
),但请注意,某些设备需要更长的时间才能响应。 -
某些闪存驱动器具有非常特定的协议要求,引导代码无法处理,因此可能不兼容。
指定的 bootcode.bin
-仅引导模式
Important
|
这 不 适用于Raspberry Pi 4 Model B。 |
如果您无法使用特定的USB设备来启动Raspberry Pi,另一种选择(适用于Raspberry Pi2Bv1.2、3A+、3B和3B+)是使用特殊的 bootcode.bin-only
启动模式。Raspberry Pi仍将从SD卡启动,但 bootcode.bin
是唯一从中读取的文件。
硬件兼容性
在尝试从USB大容量存储设备启动之前,建议验证设备在Linux下是否正常工作。使用SD卡启动并插入USB大容量存储设备。这应该显示为可移动驱动器。这对于USB SATA适配器尤其重要,引导加载程序在大容量存储模式下可能支持它,但如果Linux选择 USB Attached SCSI-UAS,则会失败。
机械硬盘几乎总是需要一个供电的 USB 集线器。即使看起来一切正常,如果没有供电的 USB 集线器,也可能会遇到间歇性故障。
多个可启动驱动器
在搜索可启动分区时,引导程序会并行扫描所有 USB 大容量存储设备,并选择第一个作出响应的设备。如果引导分区不包含合适的 start.elf
文件,则会选择下一个可用设备。 没有根据 USB 拓扑指定启动设备的方法,因为这会减慢启动速度,并增加不必要且难以支持的复杂配置。
Note
|
config.txt 文件 条件筛选器 可用于在复杂设备配置中选择备用固件。
|
网络启动
在 GitHub 上修改
本节介绍如何在Raspberry Pi 3B、3B+ 和 2B v1.2上启动网络。
在 Pi 4 和 Pi 5 上,网络启动是通过 EEPROM 中的第二阶段引导加载器实现的。更多信息,请参阅 Raspberry Pi 引导加载器配置。
我们还有一个 关于设置网络引导系统的教程。
网络引导仅适用于上述型号的Raspberry Pi内置的有线适配器。不支持通过无线LAN引导,也不支持从任何其他有线网络设备引导。
网络启动流程
要进行网络引导,引导ROM执行以下操作:
-
初始化板载以太网设备(微芯片LAN9500或LAN7500)
-
发送DHCP请求(供应商类别标识符DHCP选项60设置为
PXEClient:Arch:00000:UNDI:002001
) -
收到DHCP回复
-
接收DHCP代理回复(可选)
-
ARP到tftpboot服务器
-
ARP回复包括tftpboot服务器以太网地址
-
TFTP RRQ
bootcode.bin
-
找不到文件:服务器回复TFTP错误响应和文本错误消息
-
文件存在:服务器将回复文件的第一个数据块(512字节),标题中包含块号
-
Raspberry Pi回复包含块号的TFTP确认字符包,并重复直到最后一个不是512字节的块
-
-
-
TFTP RRQ
bootsig.bin
-
这通常会导致错误
未找到文件
。这是意料之中的,TFTP引导服务器应该能够处理它。
-
从这里开始, bootcode.bin
代码继续加载系统。它将尝试访问的第一个文件是 <serial_number>/start.elf
。如果这不会导致错误,那么任何其他要读取的文件都将附加 serial_number
。这很有用,因为它使您能够为Raspberry Pis创建具有单独 start.elf
/ 内核的单独目录。
要获取设备的序列号,你可以尝试这种启动模式,并使用 tcpdump / wireshark 查看访问了哪些文件,或者运行标准的 Raspberry Pi OS SD 卡并 cat /proc/cpuinfo
。
如果您将所有文件放入TFTP目录的根目录,则将从那里访问所有以下文件。
调试网络启动模式
首先要检查的是OTP位是否正确编程。为此,您需要将 program_usb_boot_mode=1
添加到 config.txt
并重新启动(使用可以正确启动到Raspberry Pi OS的标准SD卡)。完成此操作后,您应该能够:
$ vcgencmd otp_dump | grep 17:
如果第17行包含 3020000a
,则OTP已正确编程。您现在应该能够取出SD卡,插入以太网,然后以太网LED应该在Raspberry Pi通电后大约5秒点亮。
要在服务器上捕获以太网数据包,请在tftpboot服务器(或DHCP服务器,如果它们不同)上使用tcpdump。您需要在那里捕获数据包,否则您将无法看到直接发送的数据包,因为网络交换机不是集线器!
$ sudo tcpdump -i eth0 -w dump.pcap
这会将eth0中的所有内容写入名为 dump.pcap
的文件。然后,您可以对数据包进行后处理或将其上传到cloud dshark进行通信。
DHCP请求/回复
您至少应该看到如下所示的DHCP请求和回复:
6:44:38.717115 IP (tos 0x0, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 348) 0.0.0.0.68 > 255.255.255.255.67: [no cksum] BOOTP/DHCP, Request from b8:27:eb:28:f6:6d, length 320, xid 0x26f30339, Flags [none] (0x0000) Client-Ethernet-Address b8:27:eb:28:f6:6d Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Discover Parameter-Request Option 55, length 12: Vendor-Option, Vendor-Class, BF, Option 128 Option 129, Option 130, Option 131, Option 132 Option 133, Option 134, Option 135, TFTP ARCH Option 93, length 2: 0 NDI Option 94, length 3: 1.2.1 GUID Option 97, length 17: 0.68.68.68.68.68.68.68.68.68.68.68.68.68.68.68.68 Vendor-Class Option 60, length 32: "PXEClient:Arch:00000:UNDI:002001" END Option 255, length 0 16:44:41.224619 IP (tos 0x0, ttl 64, id 57713, offset 0, flags [none], proto UDP (17), length 372) 192.168.1.1.67 > 192.168.1.139.68: [udp sum ok] BOOTP/DHCP, Reply, length 344, xid 0x26f30339, Flags [none] (0x0000) Your-IP 192.168.1.139 Server-IP 192.168.1.1 Client-Ethernet-Address b8:27:eb:28:f6:6d Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Offer Server-ID Option 54, length 4: 192.168.1.1 Lease-Time Option 51, length 4: 43200 RN Option 58, length 4: 21600 RB Option 59, length 4: 37800 Subnet-Mask Option 1, length 4: 255.255.255.0 BR Option 28, length 4: 192.168.1.255 Vendor-Class Option 60, length 9: "PXEClient" GUID Option 97, length 17: 0.68.68.68.68.68.68.68.68.68.68.68.68.68.68.68.68 Vendor-Option Option 43, length 32: 6.1.3.10.4.0.80.88.69.9.20.0.0.17.82.97.115.112.98.101.114.114.121.32.80.105.32.66.111.111.116.255 END Option 255, length 0
Vendor-Option Option 43
包含回复的重要部分,这必须包含字符串"Raspberry Pi Boot",由于引导ROM中的bug,您可能需要在字符串末尾添加三个空格。
TFTP 文件读取
当供应商选项被正确指定时,您将看到一个后续的TFTP RRQ数据包正在发送。RRQ可以通过第一个数据块或错误说找不到文件来回复。在一些情况下,他们甚至收到了第一个数据包,然后Raspberry Pi中止了传输(当检查文件是否存在时会发生这种情况)。下面的示例只有三个数据包:原始读取请求、第一个数据块(总是516字节,包含一个排针和512字节的数据,尽管最后一个块总是小于512字节,可能是零长度)和第三个数据包(包含帧号以匹配数据块中的帧号的确认字符)。
16:44:41.224964 IP (tos 0x0, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 49) 192.168.1.139.49152 > 192.168.1.1.69: [no cksum] 21 RRQ "bootcode.bin" octet 16:44:41.227223 IP (tos 0x0, ttl 64, id 57714, offset 0, flags [none], proto UDP (17), length 544) 192.168.1.1.55985 > 192.168.1.139.49152: [udp sum ok] UDP, length 516 16:44:41.227418 IP (tos 0x0, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 32) 192.168.1.139.49152 > 192.168.1.1.55985: [no cksum] UDP, length 4
GPIO启动模式
在 GitHub 上修改
Note
|
GPIO启动模式仅适用于Raspberry Pi 3A+、3B、3B+、Compute Module 3和3+。 |
早期的Raspberry Pis可以配置为允许使用连接到GPIO连接器的硬件在开机时选择引导模式。这是通过在SoC的OTP内存中设置位来完成的。一旦设置了这些位,它们就会永久分配五个GPIO以允许进行此选择。一旦设置了OTP位,它们就不能被取消设置。您应该仔细考虑启用此功能,因为这五个GPIO线将始终控制引导。虽然一旦Raspberry Pi启动,您可以将GPIO用于其他一些功能,但您必须设置它们,以便它们在Raspberry Pi启动时启用所需的引导模式。
要启用GPIO启动模式,请将以下行添加到 config.txt
文件中:
program_gpio_bootmode=n
其中 n
是您希望使用的 GPIO 组。然后重启一次 Raspberry Pi,用此设置对 OTP 进行编程。第 1 组是 GPIO 22-26,第 2 组是 GPIO 39-43。除非您有 Compute Module,否则必须使用第 1 组:第 2 组中的 GPIO 仅在 Compute Module 上可用。由于 OTP 位的排列方式,如果首先为第 1 组 的 GPIO 启动模式编程,那么稍后就可以选择第 2 组。反之则不行:一旦为 GPIO 启动模式选择了第 2 组,就不能再选择第 1 组。
启用GPIO启动模式后,Raspberry Pi将不再启动。您必须拉起至少一个启动模式GPIO引脚才能让Raspberry Pi启动。
引脚分配
Raspberry Pi 3B 和 Compute Module 3
Bank 1 | Bank 2 | 引导类型 |
---|---|---|
22 |
39 |
SD0 |
23 |
40 |
SD1 |
24 |
41 |
NAND (no Linux support at present) |
25 |
42 |
SPI (no Linux support at present) |
26 |
43 |
USB |
后来的 Raspberry Pi 3B(带金属盖的 BCM2837B0)、Raspberry Pi 3A+、3B+ 和Compute Module 3+
Bank 1 | Bank 2 | 引导类型 |
---|---|---|
20 |
37 |
SD0 |
21 |
38 |
SD1 |
22 |
39 |
NAND (no Linux support at present) |
23 |
40 |
SPI (no Linux support at present) |
24 |
41 |
USB device |
25 |
42 |
USB host - mass storage device |
26 |
43 |
USB host - Ethernet |
Note
|
按照GPIO线的数字顺序尝试各种引导模式,即SD0、SD1、NAND等。 |
Boot flow
SD0 是 Broadcom SD 卡/MMC 接口。SoC 内的启动 ROM 运行时,总是将 SD0 连接到内置 microSD 卡插槽。在带有 eMMC 设备的 Compute Modules 上,SD0 与 eMMC 设备相连;在 Compute Modules Lite 上,SD0 位于边缘连接器上,与 CMIO 载板上的 microSD 卡插槽相连。SD1 是 Arasan SD 卡/MMC 接口,也能使用 SDIO。所有内置无线局域网的 Raspberry Pi 型号都使用 SD1 通过 SDIO 连接到无线芯片。
GPIO 线路的默认上拉电阻为 50KΩ,如 BCM2835 ARM 外围设备datasheet 第 102 页所述。建议将 GPIO 线路的上拉电阻设为 5KΩ:这将让 GPIO 正常工作,也不会消耗过多的功率。
NVMe SSD启动
在 GitHub 上修改
NVMe(Non-Volatile Memory express)是通过 PCIe 总线访问外部存储的标准。您可以通过计算模块 4 IO 板上的 PCIe 插槽、计算模块 5 IO 板上的 M.2 插槽以及使用 M.2 HAT+ 的 Raspberry Pi 5 连接 NVMe 硬盘。通过一些额外的配置,您可以从 NVMe 驱动器启动。
先决条件
硬件
-
NVMe M.2 SSD
-
从PCIe转换为M.2标准的适配器。
-
对于Raspberry Pi 5,我们推荐 M.2 HAT+,它从Raspberry Pi的 PCIe FFC 插槽转换为M Key接口。
-
对于CM4,搜索"PCI-E 3.0×1 通道到 M.2 NGFF M-Key SSD NVMe PCI Express适配器卡"
-
要检查您的NVMe驱动器连接是否正确,请从另一个存储设备(例如SD卡)启动Raspberry Pi并运行 ls -l /dev/nvme*
。示例输出如下所示。
crw------- 1 root root 245, 0 Mar 9 14:58 /dev/nvme0 brw-rw---- 1 root disk 259, 0 Mar 9 14:58 /dev/nvme0n1
Edit the bootloader boot priority
使用树莓派配置工具来更新bootloader:
$ sudo raspi-config
在 Advanced Options
> Bootloader Order
下,指定引导加载程序应首先尝试从 NVMe
启动: 。
运行以下命令将固件更新到最新版本:
$ sudo rpi-eeprom-update -a
然后,使用 sudo reboot
重新启动。您的Raspberry Pi 应该从NVMe启动。
对于CM4,使用 rpiboot
更新引导加载程序。您可以在 USB boot GitHub存储库 中找到构建 rpiboot
和配置IO板以将ROM切换到usbboot模式的说明。
对于带有 eMMC 的 CM4 版本,请确保在启动顺序中将 NVMe 设为第一。记住在 recovery/boot.conf
中的 BOOT_ORDER
中添加 NVMe 启动模式 6
。
当SD卡插槽为空时,CM4 Lite会自动从NVMe启动。
NVMe BOOT_ORDER
EEPROM配置中的 BOOT_ORDER
设置控制引导行为。
对于NVMe引导,使用引导模式 6
。有关详细信息,请参阅 Raspberry Pi引导加载程序配置。
示例
以下是引导加载程序检测到NVMe驱动器时通用异步收发设备输出的示例:
Boot mode: SD (01) order f64 Boot mode: USB-MSD (04) order f6 Boot mode: NVME (06) order f VID 0x144d MN Samsung SSD 970 EVO Plus 250GB NVME on
然后它会找到一个FAT分区并加载 start4.elf
:
Read start4.elf bytes 2937840 hnd 0x00050287 hash ''
然后它将加载内核并启动操作系统:
MESS:00:00:07.096119:0: brfs: File read: /mfs/sd/kernel8.img MESS:00:00:07.098682:0: Loading 'kernel8.img' to 0x80000 size 0x1441a00 MESS:00:00:07.146055:0:[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
在Linux系统中 SSD显示为 /dev/nvme0
,命名空间显示为 /dev/nvme0n1
。将有两个分区 /dev/nvme0n1p1
(FAT)和 /dev/nvme0n1p2
(EXT4)。使用 lsblk
检查分区分配:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 232.9G 0 disk ├─nvme0n1p1 259:1 0 256M 0 part /boot/firmware └─nvme0n1p2 259:2 0 232.6G 0 part /
故障排除
如果启动过程失败,请在 rpi-eeprom GitHub存储库 上提交问题,确保在启动期间附上控制台的副本和屏幕上显示的任何内容。
HTTP启动
在 GitHub 上修改
网络安装功能通过以太网使用 HTTP 在 Raspberry Pi 上安装系统 Raspberry Pi Imager。
除了网络安装之外,您还可以使用通过 HTTP下载的文件显式引导设备,并使用 boot-mode 7
。即使 启动时的网络安装被禁用,您仍然可以使用它。
例如,您可以将其作为后备引导方法添加到您的 BOOT_ORDER
中,或者将其放在GPIO条件之后,以便在GPIO引脚拉低时从您自己的服务器启动 HTTP引导。
例如,如果您将以下内容添加到EEPROM配置中,并且GPIO 8(默认状态为1或HIGH)被拉低,则文件 http://downloads.raspberrypi.org:80/net_install/boot.img
和 http://downloads.raspberrypi.org:80/net_install/boot.sig
将被下载。如果启动时启用网络安装,它将使用相同的URL。如果GPIO 8没有被拉低,行为将保持不变。
[gpio8=0]
BOOT_ORDER=0xf7
HTTP_HOST=downloads.raspberrypi.org
NET_INSTALL_ENABLED=0
boot.img
和 boot.sig
签名文件是包含启动文件系统的内存盘。有关详细信息,请参阅 boot_ramdisk.
如果启用了安全引导并且没有设置 HTTP_HOST, BOOT_ORDER
中的 HTTP将被忽略。
要求
要使用HTTP引导, update 到2022年3月10日或更高版本发布的引导加载程序。HTTP启动需要有线以太网连接。
要使用自定义CA证书,请将 update 到2024年4月5日或更高版本发布的引导加载程序。只有运行BCM2712 CPU的设备支持自定义CA证书。
Keys
所有 HTTP下载都必须签名。引导加载程序包含默认主机 fw-download-alias1.raspberrypi.com
上文件的公钥。此密钥将用于验证网络安装镜像,_除非_您设置 HTTP_HOST_并且_在EEPROM中包含公钥。这允许您在自己的服务器上托管Raspberry Pi网络安装镜像。
Warning
|
使用您自己的网络安装镜像需要您对镜像进行签名并将您的公钥添加到EEPROM。如果您随后应用公共EEPROM更新,您的密钥将丢失,需要重新添加。 |
USBBOOT
拥有编写公钥所需的所有工具。
使用以下命令将公钥添加到 EEPROM 中。boot.conf
包含你的修改:
$ rpi-eeprom-config -c boot.conf -p mypubkey.pem -o pieeprom.upd pieeprom.original.bin
使用以下命令为 EEPROM 生成签名:
$ rpi-eeprom-digest -i pieeprom.upd -o pieeprom.sig
然后,使用以下命令用私钥签署网络安装映像:
$ rpi-eeprom-digest -i boot.img -o boot.sig -k myprivkey.pem
最后,将 boot.img
和 boot.sig
放在网络服务器上,以使用自己签名的网络安装映像。
证书
为了安全起见,Network Install使用 HTTPS从Raspberry Pi网站下载操作系统镜像。此功能使用引导加载程序中包含的我们自己的CA根目录来验证主机。
您可以将您自己的自定义CA证书添加到您的设备EEPROM,以安全地从您自己的网站下载图像。使用 rpi-eeprom-config
的 --cacertder
选项添加DER编码的证书。您必须在EEPROM配置设置中放置证书的哈希值,以确保证书不被修改。
运行以下命令以生成DER编码的证书:
$ openssl x509 -in your_ca_root_cert.pem -out cert.der -outform DER
然后,运行以下命令生成证书的SHA-256哈希:
$ sha256sum cert.der
您应该会看到类似于以下内容的输出:
701bd97f67b0f5483a9734e6e5cf72f9a123407b346088638f597878563193fc cert.der
接下来,更新 boot.conf
以包含证书的哈希值:
$ sudo rpi-eeprom-config --edit
在 [gpio8=0]
部分配置以下设置,替换:
-
<your_website>
与 您的网站,例如yourserver.org
-
<path_to_files>
与 路径到您的操作系统镜像 托管在您的网站上,例如path/to/files
-
<hash>
与您上面生成的哈希值,例如701bd97f67b0f5483a9734e6e5cf72f9a123407b346088638f597878563193fc
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf461
[gpio8=0]
BOOT_ORDER=0xf7
NET_INSTALL_ENABLED=0
HTTP_HOST=<your_website>
HTTP_PATH=<path_to_files>
HTTP_CACERT_HASH=<hash>
当您指定 HTTP_CACERT_HASH
时,Network Install通过端口443使用 HTTPS下载镜像。如果没有哈希,Network install通过端口80使用 HTTP下载镜像。
最后,使用以下命令将所有内容加载到 EEPROM 中:
$ rpi-eeprom-config -c boot.conf -p mypubkey.pem -o pieeprom.bin --cacertder cert.der pieeprom.original.bin
$ rpi-eeprom-digest -k myprivkey.pem -i pieeprom.bin -o pieeprom.sig
在网络启动期间,您的Raspberry Pi应该使用 HTTPS而不是 HTTP。要查看Network Install解析的完整 HTTPS URL以供下载,请检查启动输出:
Loading boot.img ... HTTP: GET request for https://yourserver.org:443/path/to/files/boot.sig HTTP: GET request for https://yourserver.org:443/path/to/files/boot.img
引导顺序
在 GitHub 上修改
Important
|
以下启动顺序仅适用于基于 BCM2837 和 BCM2837B0 的 Raspberry Pi 型号。在此之前的型号上,Raspberry Pi 将尝试使用 SD 卡启动,然后使用 USB 设备模式启动。有关 Raspberry Pi 4 和 Raspberry Pi 5 的启动顺序,请参阅 EEPROM 启动流程 部分。 |
Raspberry Pi 3 上的 USB 启动默认值取决于使用的版本。有关在默认情况下未启用 USB 启动模式的信息,请参阅 page 。
当 BCM2837 启动时,它会使用两个不同的来源来确定要启用哪些启动模式。首先,检查一次性可编程 (OTP) 存储器块,查看启用了哪些启动模式。如果启用了 GPIO 启动模式设置,则会测试相关的 GPIO 线路,以选择应尝试哪些启用了 OTP 的启动模式。请注意,GPIO 启动模式只能用于选择 OTP 中已启用的启动模式。有关配置 GPIO 启动模式的详情,请参阅 GPIO 启动模式。GPIO 启动模式默认为禁用。
接下来,引导 ROM 会检查每个引导源是否有一个名为 bootcode.bin
的文件;如果有,它就会将代码加载到本地 128K 缓存中并跳转到该文件。整个启动模式过程如下:
-
BCM2837 启动
-
读取 OTP 以确定要启用的启动模式
-
如果启用了 GPIO 启动模式,则使用 GPIO 启动模式完善启用的启动模式列表
-
如果已启用:检查 GPIO 48-53 上主 SD 的 bootcode.bin
-
成功 - 启动
-
失败 - 超时(五秒)
-
-
如果启用:检查辅助 SD
-
成功 - 启动
-
失败 - 超时(五秒)
-
-
如果启用:检查 NAND
-
如果启用:检查 SPI
-
如果启用:检查 USB
-
如果 OTG 引脚 == 0
-
启用 USB,等待有效的 USB 2.0 设备(两秒)
-
找到设备:
-
如果设备类型 == 集线器
-
搜索每个端口
-
-
如果设备类型 == (大容量存储器或 LAN951x)
-
存储在设备列表中
-
-
-
-
对每个 MSD 进行递归
-
如果发现 bootcode.bin 引导
-
-
对每个 LAN951x 进行搜索
-
DHCP / TFTP 启动
-
-
-
否则(设备模式启动)
-
启用设备模式并等待主机 PC 枚举
-
我们回复电脑的 VID:
0a5c
PID:0x2763
(Raspberry Pi 1 或 Raspberry Pi 2) 或0x2764
(Raspberry Pi 3)
-
-
Note
|
|
主 SD 卡启动模式按标准设置为 GPIO 49-53。可以通过第二组引脚从 SD 卡启动,即在 GPIO 引脚上添加 SD 卡。不过,我们尚未启用这一功能。
NAND 启动和 SPI 启动模式虽然还不能完全支持 GPU,但也能正常工作。
USB 设备启动模式在生产时默认已启用,但 USB 主机启动模式只有在 program_usb_boot_mode=1
时才能启用。启用后,处理器将使用处理器上 OTGID 引脚的值来决定这两种模式。在任何 Raspberry Pi Model B/B+ 上,OTGID 引脚都被驱动为 0,因此一旦启用,将只能通过主机模式启动(由于 LAN951x 设备的阻碍,无法通过设备模式启动)。
如果 OTGID 引脚处于浮动状态(例如插入 PC 时),USB 将在 Raspberry Pi Zero 或 Compute Module 上作为 USB 设备启动,因此您可以将 bootcode.bin
添加到该设备。这样做的 usbboot
代码是 可在 GitHub 上获取。
EEPROM 启动流程
在 GitHub 上修改
自 Raspberry Pi 4 起,Raspberry Pi 旗舰设备开始使用 EEPROM 引导加载程序。
这些产品与以前产品的主要区别在于,第二级引导加载程序是从 SPI Flash EEPROM 加载的,而不是以前产品使用的 bootcode.bin
文件。
第一阶段bootloader
ROM(第一阶段)的引导流程如下:
-
SoC通电
-
读取OTP以确定是否配置了
nRPIBOOT
GPIO -
If
nRPIBOOT
GPIO为高或OTP未定义nRPIBOOT
GPIO-
检查OTP以查看是否可以从SD/EMMC加载
recovery.bin
-
If 启用了SD
recovery.bin
,则检查主SD/EMMC的`recovery.bin`-
成功 - 运行
recovery.bin
并更新SPI EEPROM -
失败 - 继续
-
-
-
检查第二阶段的SPI EEPROM
-
成功 - 运行第二阶段bootloader
-
失败 - 继续
-
-
-
While True
-
尝试从 USB 设备 加载
recovery.bin
-
成功 - 运行
recovery.bin
并更新SPI EEPROM或切换到USB大容量存储设备模式 -
失败 - 重试USB设备启动
-
-
Note
|
recovery.bin 是用于重新刷新bootloader SPI EEPROM映像的最小第二阶段程序。
|
第二阶段bootloader
本节介绍第二阶段bootloader的高级流程。
有关每种启动模式的更多信息,请参阅 引导加载器配置 页面;有关此阶段加载的 GPU 固件文件的描述,请参阅 boot folder 页面。
-
初始化时钟和 SDRAM
-
读取 EEPROM 配置文件
-
检查寄存器
PM_RSTS
以确定是否请求 HALT-
检查
POWER_OFF_ON_HALT
和WAKE_ON_GPIO
EEPROM 配置设置 -
If
POWER_OFF_ON_HALT
为1
,且WAKE_ON_GPIO
为0
,则-
使用 PMIC 关闭系统电源
-
-
Else ,If
WAKE_ON_GPIO
为1
-
If GPIO3 被拉低,则启用 GPIO3 上的下降沿中断来唤醒系统
-
-
睡眠
-
-
While True
-
从 EEPROM 配置文件中的 BOOT_ORDER 参数读取下一个启动模式。
-
If 引导模式 ==
RESTART
-
跳回
BOOT_ORDER
字段中的第一个启动模式
-
-
Else if 引导模式 ==
STOP
-
显示 start.elf 未找到 错误模式,并永远等待。
-
-
Else if 引导模式 ==
SD CARD
-
尝试从 SD 卡加载固件
-
成功 - 运行固件
-
失败 - 继续
-
-
-
Else if 引导模式 ==
NETWORK
则-
使用 DHCP 协议请求 IP 地址
-
从 DHCP 或静态定义的 TFTP 服务器加载固件
-
If 未找到固件或发生超时或网络错误,则继续
-
-
Else if 引导模式 ==
USB-MSD
或引导模式 ==BCM-USB-MSD
那么-
If USB 发现未超时
-
检查 USB 大容量存储设备
-
If 发现新的大容量存储设备,则
-
对于每个驱动器(LUN)
-
尝试加载固件
-
成功 - 运行固件
-
失败 - 进入下一个 LUN
-
-
-
-
-
-
Else if 引导模式 ==
NVME
,则-
扫描 PCIe 以查找 NVMe 设备,If 找到
-
尝试从 NVMe 设备加载固件
-
成功 - 运行固件
-
失败 - 继续
-
-
-
-
Else if 引导模式 ==
RPIBOOT
则-
尝试使用 USB 设备模式从 USB OTG 端口加载固件 - 参见 USB启动。RPIBOOT模式没有超时。
-
-
Bootloader更新
如果找到 pieeprom.upd
文件,bootloader也可以在固件启动前更新。有关bootloader更新的更多信息,请参阅 bootloader EEPROM 页面。
故障安全操作系统更新( tryboot
)
bootloader/firmware提供了一个一次性标志,如果设置了该标志,则会被清除,但会加载 tryboot.txt
,而不是 config.txt
。该备用配置将指定待更新的操作系统固件、cmdline、kernel和 os_prefix 参数。由于该标记会在启动固件前被清除,因此宕机或重置后,下次重启时将加载原始的 config.txt
文件。
要设置 tryboot
标志,请在 reboot
命令中的分区号之后添加 tryboot
。通常,分区号默认为零,但如果添加额外参数,则必须指定它。向 reboot
传递参数时一定要使用引号:它只接受一个参数:
$ sudo reboot '0 tryboot'
所有Raspberry Pi型号都支持 tryboot
,但是,在Raspberry Pi 4 Model B 修订版 1.0 和 1.1 上,EEPROM不得设置写保护。这是因为较旧的Raspberry Pi 4B 设备必须断开电源(来取消tryboot状态),因此将其存储在EEPROM中。
如果启用了 secure-boot
,则 tryboot
模式将导致加载 tryboot.img
而不是 boot.img
。
tryboot_a_b
模式
如果 autoboot.txt 中的 tryboot_a_b
属性设置为 1
,则将加载 config.txt
而不是 tryboot.txt
。这是因为 tryboot
开关已在更高一级(分区)完成,因此没有必要在备用分区内设置 tryboot.txt
文件。
从 boot.img
ramdisk 中加载文件时,tryboot_a_b
属性被隐式设置为 1
。
树莓派 bootloader 配置
在 GitHub 上修改
编辑配置
在编辑 bootloader 配置之前,请使用 update your system 获取最新版本的 rpi-eeprom
软件包。
要查看当前EEPROM配置,请运行以下命令:
$ rpi-eeprom-config
要编辑当前EEPROM配置并将更新应用于最新的EEPROM版本,请运行以下命令:
$ sudo -E rpi-eeprom-config --edit
有关EEPROM更新过程的详细信息,请参阅 boot EEPROM。
配置属性
本节介绍bootloader中可用的所有配置项。语法与 config.txt相同,但属性特定于bootloader。条件过滤器 也受支持,除了EDID。
UART_BAUD
仅限树莓派5。
更改bootloader通用异步收发设备的波特率。
支持的值: 9600
、 19200
、 38400
、 57600
、 115200
、 230400
、 460800
、921600
默认值: 115200
WAKE_ON_GPIO
如果 1
,则 sudo halt
将在低功耗模式下运行,直到GPIO3或GLOBAL_EN短路接地。
此设置与Raspberry Pi 5之后的旗舰机型、CM5 之后的计算模块以及 Pi 500 之后的键盘机型无关无关,因为 电源按钮 总是可以用于从 HALT
或 STANDBY
唤醒。
默认值: 1
POWER_OFF_ON_HALT
如果 1
和 WAKE_ON_GPIO=0
,则 sudo停止
将关闭所有PMIC输出。这是停止的最低功率状态,但可能会导致某些HAT出现问题,因为5V仍将开启。 GLOBAL_EN
必须短路到地才能启动。
Raspberry Pi 400有一个指示电源按钮,即使处理器关闭也能运行。默认情况下启用此行为,但是, WAKE_ON_GPIO=2
可以设置为使用外部GPIO电源按钮而不是电源按钮。
从Raspberry Pi 5及Pi 500键盘系列开始,这会将PMIC置于 待机
模式,所有输出都将关闭。无需设置 WAKE_ON_GPIO
,按下 电源按钮 将启动设备。
默认值: 在 CM5 和键盘型号之后的计算模块上为 “1”;否则为 "0
BOOT_ORDER
BOOT_ORDER
设置允许灵活配置不同引导模式的优先级。它表示为一个 32 位无符号整数,其中每个位代表一种启动模式。启动模式按从最低有效位到最高有效位的顺序尝试。
BOOT_ORDER
fields
BOOT_ORDER
属性定义了不同启动模式的顺序。从右向左读取,最多可定义八位数。
Value | Mode | Description |
---|---|---|
|
|
尝试使用 SD 卡,然后等待卡检测到卡已更改。由于 |
|
|
SD card (or eMMC on Compute Module 4). |
|
|
Network boot - See Network boot server tutorial. |
|
|
RPIBOOT - See usbboot. |
|
|
USB mass storage boot - See USB mass storage boot. |
|
|
USB 2.0 boot from USB Type C socket (CM4: USB type A socket on CM4IO board). Not available on Raspberry Pi 5. |
|
|
CM4 and Pi 5 only: boot from an NVMe SSD connected to the PCIe interface. See NVMe boot for more details. |
|
|
HTTP boot over ethernet. See HTTP boot for more details. |
|
|
Stop and display error pattern. A power cycle is required to exit this state. |
|
|
从 |
RPIBOOT
旨在与 Compute Module 4 一起使用,以加载自定义调试映像(例如Linux RAM-disk),而不是正常启动。这应该是最后一个启动选项,因为它当前不支持超时或重试。
MAX_RESTARTS
如果遇到RESTART( 0xf
)启动模式超过MAX_RESTARTS次,则会触发看门狗重置。不建议一般使用,但对于需要完全重置以解决硬件或网络接口问题的测试或远程系统可能很有用。
默认值: -1
(infinite)
TFTP_IP
TFTP服务器的可选带点十进制ip地址(例如192.168.1.99),它覆盖DHCP请求中的server-ip。
这在家庭网络上可能很有用,因为可以使用tftpd-hpa代替dnsmasq,其中宽带路由器是DHCP服务器。
默认值: ""
TFTP_PREFIX
为了支持每个 Raspberry Pi 独特的 TFTP 启动目录,引导加载程序会在文件名前加上设备特定目录的前缀。如果在前缀目录中既找不到 start4.elf 也找不到 start.elf,那么前缀就会被清除。
在早期型号上,序列号被用作前缀,但在 Raspberry Pi 4 和 5 上,MAC 地址不再由序列号生成,因此很难通过检查 DHCPDISCOVER 数据包在服务器上自动创建 tftpboot 目录。为了支持这一点,TFTP_PREFIX 可以自定义为 MAC 地址、固定值或序列号(默认值)。
Value | Description |
---|---|
0 |
Use the serial number e.g. |
1 |
使用 |
2 |
Use the MAC address e.g. |
默认值:0
TFTP_PREFIX_STR
指定当 TFTP_PREFIX
设置为 1 时使用的自定义目录前缀字符串。例如:- TFTP_PREFIX_STR=tftp_test/
默认值: ""
最大长度:32个字符
PXE_OPTION43
用不同的字符串覆盖 PXE Option43 匹配字符串。通常情况下,对 DHCP 服务器进行定制比改变客户端行为要好,但在无法做到这一点的情况下,我们提供了这个选项。
默认值: Raspberry Pi Boot
DHCP_OPTION97
在早期版本中,客户端 GUID(Option97)只是重复四次的序列号。默认情况下,新的 GUID 格式是四字符代码(FourCC)(Raspberry Pi 4 为 RPi4
0x34695052
或 Raspberry Pi 5 为 RPi5
0x35695052
)、电路板修订版(例如 0x00c03111
或 0x00d04170
)(4 个字节)、mac 地址的最小有效 4 个字节和 4 个字节序列号的连接。
这样做的目的是使其具有唯一性,同时也为 DHCP 服务器提供结构化信息,从而无需依赖以太网 MAC OUID 就能识别 Raspberry Pi 4 和 5 计算机。
指定 DHCP_OPTION97=0
可恢复旧的行为,或指定一个非零十六进制值来指定自定义的 4 字节前缀。
默认值: 0x34695052
MAC_ADDRESS_OTP
使用存储在 客户OTP 寄存器中的值覆盖Raspberry Pi以太网MAC地址。
例如,使用存储在 Customer OTP
的第0行和第1行中的MAC地址。
MAC_ADDRESS_OTP=0,1
第一个值(示例中的第 0 行)包含 OUI 和 MAC 地址最重要的 8 位。第二个值(示例中的第 1 行)存储 MAC 地址的剩余 16 位。 这与 Raspberry Pi 制造时编程的 MAC 地址格式相同。
可以按任一顺序选择和组合任何两个客户行。
在 vcgencmd otp_dump
输出中, Customer OTP
行是 OTP 寄存器 36 至 43,因此如果对前两行进行如下编程,那么 MAC_ADDRESS_OTP=0,1
将给出一个 MAC 地址 e4:5f:01:20:24:7e
。
36:247e0000 37:e45f0120
默认值: ""
ENABLE_SELF_UPDATE
使bootloader能够从TFTP或USB大容量存储设备(MSD)引导文件系统更新自身。
如果启用了自我更新,引导加载程序将在引导文件系统中查找更新文件(.sig/.upd)。如果更新映像与当前映像不同,则应用更新并重置系统。否则,如果 EEPROM 映像字节对字节完全相同,则引导继续正常进行。
注意事项:
-
2021 年之前的引导加载程序版本不支持
自我更新
。 -
2022 年之前,SD 启动时未启用自我更新。在 Raspberry Pi 4 上,ROM 已经可以从 SD 卡加载 recovery.bin。在 CM4 上,self-update 和 recovery.bin 都不起作用,需要 USB 启动(参见 计算模块 EEPROM 启动加载程序文档)。
-
对于网络启动,请确保 TFTP
boot
目录可以通过 NFS 挂载,并且rpi-eeprom-update
可以写入该目录。
默认值: 1
FREEZE_VERSION
以前只有 rpi-eeprom-update
脚本会检查该属性。但现在启用了自我更新后,引导加载程序也会检查该属性。如果设置为 1,它将覆盖 ENABLE_SELF_UPDATE
以停止自动更新。要禁用 FREEZE_VERSION
,必须使用 recovery.bin 的 SD 卡启动。
自定义EEPROM更新脚本也必须检查此标志。
默认值: 0
HTTP_HOST
如果启动了网络安装或 HTTP引导,则会从此服务器下载 boot.img
和 boot.sig
。
无效的主机名将被忽略。它们只能包含小写字母数字字符和 -
或 .
。
如果设置了 HTTP_HOST
,则禁用 HTTPS,而使用普通 HTTP。
可以指定一个 IP 地址,以避免 DNS 查找。
主机名中不要包含 HTTP 或任何正斜杠符号。
默认值: fw-download-alias1.raspberrypi.com
HTTP_PORT
您可以使用此属性更改用于网络安装和 HTTP 启动的端口。使用默认主机 fw-download-alias1.raspberrypi.com
时,将启用 HTTPS。如果更改了 HTTP_HOST
,则会禁用 HTTPS,而使用普通 HTTP。
禁用 HTTPS 后,即使将 HTTP_PORT
更改为 443
,仍将使用普通 HTTP。
默认值: 443
,如果启用 HTTPS,则为 80
HTTP_PATH
用于网络安装和 HTTP引导的路径。
区分大小写。 使用Linux斜杠作为路径分隔符。 不需要前导和尾随正斜杠。
如果未设置 HTTP_HOST
,则忽略 HTTP_PATH
,URL 将是 https://fw-download-alias1.raspberrypi.com:443/net_install/boot.img
。如果设置了 HTTP_HOST
,URL 将是: http://<HTTP_HOST>:<HTTP_PORT>/<HTTP_PATH>/boot.img
。
默认值: net_install
IMAGER_REPO_URL
嵌入式 Raspberry Pi Imager 应用程序是通过启动时下载的 JSON 文件配置的。
您可以更改嵌入式 Raspberry Pi Imager 应用程序使用的 JSON 文件的 URL,让它提供您自己的图像。
您可以使用标准 Raspberry Pi Imager 应用程序通过 --repo
参数传递 URL 进行测试。
默认值: http://downloads.raspberrypi.org/os_list_imagingutility_v3.json
NET_INSTALL_ENABLED
启用网络安装后,如果bootloader检测到键盘,它会在引导时显示网络安装屏幕。
要启用网络安装,请添加 NET_INSTALL_ENABLED=1
,或禁用网络安装,请添加 NET_INSTALL_ENABLED=0
。
如果设置了 DISABLE_HDMI=1
,则忽略此设置并禁用网络安装。
为了检测键盘,网络安装必须初始化USB控制器并枚举设备。这将启动时间增加大约1秒,因此在某些嵌入式应用程序中禁用网络安装可能是有利的。
默认值:Raspberry Pi 4B和Raspberry Pi 400上的 1
, Compute Module 4 上的 0
。
NET_INSTALL_KEYBOARD_WAIT
如果启用了网络安装,bootloader会尝试检测键盘和 SHIFT
键以启动网络安装。您可以使用此属性以毫秒为单位更改此等待的长度。
将此设置为 0
会禁用键盘等待,尽管如果没有找到引导文件并且USB引导模式 4
处于 BOOT_ORDER
中,仍然可以启动网络安装。
Note
|
测试表明键盘和SHIFT检测至少需要750毫秒。 |
默认值: 900
NETCONSOLE
- 高级日志记录
NETCONSOLE
将调试消息复制到网络接口。IP地址和端口由 NETCONSOLE
字符串定义。
Note
|
NETCONSOLE 会阻塞,直到以太网链接建立或超时。超时值为 DHCP_TIMEOUT ,但除非请求网络启动,否则不会尝试 DHCP。
|
格式
更多信息,请参阅 Netconsole 文档。
src_port@src_ip/dev_name,dst_port@dst_ip/dst_mac
E.g. 6665@169.254.1.1/,6666@/
为了简化解析,引导加载程序要求每个分隔符都必须存在。您必须指定源 IP 地址,但可以将以下字段留空以使用其默认值:
-
src_port
-6665
-
dev_name
-""
(the device name is always ignored) -
dst_port
-6666
-
dst_ip
-255.255.255.255
-
dst_mac
-00:00:00:00:00
查看数据的一种方法是将测试的 Raspberry Pi 4 连接到另一个运行 WireShark 的 Raspberry Pi,选择 udp.srcport == 6665
作为过滤器,然后选择 Analyze → Follow → UDP stream 以 ASCII 日志的形式查看。
默认情况下不应启用 NETCONSOLE
,因为它可能会导致网络问题。可以通过GPIO过滤器按需启用它:
# Enable debug if GPIO 7 is pulled low
[gpio7=0]
NETCONSOLE=6665@169.254.1.1/,6666@/
默认: ""
(未启用)
最大长度:32个字符
PARTITION
如果没有通过 reboot
命令(例如 sudo reboot N
)或 autoboot.txt
中的 boot_partition=N
明确设置引导分区号,可以使用 PARTITION
选项指定引导分区号。
如果用户按下按钮,这可用于从应急分区启动。
# Boot from partition 2 if GPIO 7 is pulled low
[gpio7=0]
PARTITION=2
默认值:0
PSU_MAX_CURRENT
仅限树莓派5。
如果设置了该属性,固件就会跳过 USB 供电协商,并假定已连接到具有给定额定电流的电源。
通常情况下,该属性应设置为 3000
或 5000
,即低电流或高电流电源。
默认值: ""
USB_MSD_EXCLUDE_VID_PID
最多四个VID/PID对的列表,指定bootloader应忽略的设备。如果这与HUB匹配,则不会枚举HUB,从而导致排除所有下游设备。 这旨在允许在引导枚举期间忽略有问题的(例如枚举非常慢)设备。这是特定于bootloader的,不会传递给操作系统。
该格式是以逗号分隔的十六进制值列表,其中VID为最重要的半字节。不允许空格。
例如。 034700a0,a4231234
默认值: ""
USB_MSD_DISCOVER_TIMEOUT
如果在此超时时间内未找到USB大容量存储设备,则USB-MSD将停止并选择下一个启动模式。
最低: 5000
(5秒)
默认值: 20000
(20秒)
USB_MSD_LUN_TIMEOUT
在进入下一个 LUN(如多插槽 SD 卡读卡器)之前等待的时间(以毫秒为单位)。虽然还在调整中,但如果连接的是老式/慢速设备以及包含操作系统的快速 USB-MSD 设备,这可能有助于加快启动速度。
最小值: 100
默认值: 2000
(2秒)
USB_MSD_PWR_OFF_TIME
仅限树莓派4。
当 Pi 重新启动电源时,硬件会关闭 USB 电源。较短的断电时间可能会导致某些 USB 设备出现问题,因此可以使用此参数强制较长时间的断电,就像电缆被物理移除一样。
在 RaspberryPi 4 1.3 及更旧版本上,可配置/长时间断电要求启用 XHCI 控制器,因此实际上是先短时间断电,然后再长时间配置断电。通过将该参数设置为零,可以跳过较长的可配置断电时间。
在较新的版本中,硬件会确保 USB 电源在重启后关闭,引导加载程序仅在超时后才会启用电源。这是在内存初始化确保 USB 电源关闭至少两秒后发生的。因此,该参数通常对较新的硬件版本没有影响。
最小值: 0
最大: 5000
默认值: 1000
(1秒)
USB_MSD_STARTUP_DELAY
如果已定义,则会在USB主机控制器初始化后延迟给定超时的USB枚举。如果USB硬盘驱动器需要很长时间才能初始化并触发USB超时,则可以使用此延迟为驱动程序提供额外的初始化时间。还可能需要增加整体USB超时( USB_MSD_DISCOVER_TIMEOUT
)。
最小值: 0
最大: 30000
(30秒)
默认值: 0
VL805
仅在 Compute Module 4 上。
如果 VL805
属性设置为 1
,则bootloader将搜索VL805 PCIe XHCI控制器,并尝试使用嵌入在bootloaderEEPROM中的VL805固件对其进行初始化。这使工业设计能够使用VL805 XHCI控制器,而无需为VL805固件提供专用的SPI 则必须重新刷写bootloader EEPROM
-
在 Compute Module 4 上,引导加载程序从不写入专用的 VL805 SPI EEPROM。该选项只是将控制器配置为从 SDRAM 加载固件。
-
如果 VL805 XHCI 控制器有专用 EEPROM,请勿使用该选项。它将无法初始化,因为 VL805 ROM 会尝试使用专用的 SPI EEPROM(如果已安装)。
-
嵌入式 VL805 固件假定 USB 配置与 Raspberry Pi 4B 相同(两个 USB 3.0 端口和四个 USB 2.0 端口)。不支持加载其他 VL805 固件映像,此类配置应使用专用的 VL805 SPI EEPROM。
默认值: 0
XHCI_DEBUG
此属性是一个位字段,用于控制大容量存储启动模式下USB调试消息的详细程度。启用所有这些消息会生成大量日志数据,这将减慢启动速度,甚至可能导致启动失败。对于详细日志,最好使用 NETCONSOLE
。
Value | Log |
---|---|
|
USB descriptors |
|
Mass storage mode state machine |
|
Mass storage mode state machine - verbose |
|
All USB requests |
|
Device and hub state machines |
|
All xHCI TRBs (VERY VERBOSE) |
|
All xHCI events (VERY VERBOSE) |
要组合值,请将它们添加在一起。例如:
# Enable mass storage and USB descriptor logging
XHCI_DEBUG=0x3
默认值: 0x0
(未启用USB调试消息)
[config.txt]
部分
读取 config.txt
文件后,GPU 固件 start4.elf
会读取bootloader EEPROM 配置,并检查是否存在名为 [config.txt]
的部分。如果存在 [config.txt]
部分,则会在内存中将从该部分开始到文件结束的内容添加到从引导分区读取的 config.txt
文件内容中。 这可用于自动将设置应用到每个操作系统,例如 dtoverlays。
Warning
|
如果使用无效配置配置引 导加载程序,导致引导失败,则必须重新刷新引导加载程序 EEPROM,使用有效配置引导。 |
Tip
|
某些配置属性存在于 config.txt 中。有关这些属性的更多信息,请参阅 配置属性。
|
显示并行接口 (DPI)
在 GitHub 上修改
所有带有 40 路接头的 Raspberry Pi 电路板和计算模块都有一个 24 位的并行 RGB 接口。该接口允许将并行 RGB 显示器连接到 Raspberry Pi GPIO,可以是 RGB24(8 位红、绿、蓝)或 RGB666(每种颜色 6 位)或 RGB565(5 位红、6 位绿、5 位蓝)。
该接口由 GPU 固件控制,用户可通过指定的 config.txt
参数和启用正确的 Linux 设备树overlay对其进行修改。
GPIO引脚
Raspberry Pi GPIO 第 0 组可选择的备用功能之一是 DPI(显示并行接口),它是一个简单的时钟并行接口(最多 8 位 R、G 和 B;时钟、使能、hsync 和 vsync)。该接口可作为 GPIO Bank 0 上的备用功能 2 (ALT2):
GPIO | ALT2 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note
|
在 565、666 或 24 位模式下,有多种方式可以在 DPI 输出引脚上显示颜色值(请参阅下表和下面 dpi_output_format 参数中的 output_format 部分):
|
Mode |
RGB bits |
GPIO |
|||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
||
1 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
2 |
565 |
- |
- |
- |
- |
- |
- |
- |
- |
7 |
6 |
5 |
4 |
3 |
7 |
6 |
5 |
4 |
3 |
2 |
7 |
6 |
5 |
4 |
3 |
3 |
565 |
- |
- |
- |
7 |
6 |
5 |
4 |
3 |
- |
- |
7 |
6 |
5 |
4 |
3 |
2 |
- |
- |
- |
7 |
6 |
5 |
4 |
3 |
4 |
565 |
- |
- |
7 |
6 |
5 |
4 |
3 |
- |
- |
- |
7 |
6 |
5 |
4 |
3 |
2 |
- |
- |
7 |
6 |
5 |
4 |
3 |
- |
5 |
666 |
- |
- |
- |
- |
- |
- |
7 |
6 |
5 |
4 |
3 |
2 |
7 |
6 |
5 |
4 |
3 |
2 |
7 |
6 |
5 |
4 |
3 |
2 |
6 |
666 |
- |
- |
7 |
6 |
5 |
4 |
3 |
2 |
- |
- |
7 |
6 |
5 |
4 |
3 |
2 |
- |
- |
7 |
6 |
5 |
4 |
3 |
2 |
7 |
888 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
禁用其他GPIO外设
必须禁用所有其他使用冲突 GPIO 引脚的 overlay。在 config.txt
中,请注意注释掉或关闭任何启用I2C或SPI的 dtparams :
dtparam=i2c_arm=off
dtparam=spi=off
配置显示器
内核模式设置 (KMS) 通用显示接口可向任意显示器输出,只要有适当的驱动程序即可。
自动检测
自动检测允许您的Raspberry Pi与显示器连接,而无需手动配置设备树overlay。
默认情况下启用自动检测。您可以通过在 config.txt
中添加以下行来启用显示自动检测:
display_auto_detect=1
用 0
代替 1
以禁用自动检测。
在启用自动检测的情况下连接 Raspberry Pi 官方显示屏时,KMS 会自动确定显示屏型号并配置相应的显示屏设置。
手动配置显示器
Note
|
在 Raspberry Pi OS Bookworm 或更高版本中,以前用于设置 DPI 的 config.txt 中的 dpi_output_format 和 dpi_timings 已被 vc4-kms-dpi-generic overlay 取代。
|
要使用 Raspberry Pi 官方显示屏以外的任何显示屏,必须在 config.txt
中指定一个 dtoverlay
条目。面板制造商应在 Linux 内核代码中为你的显示器配置时序,并提供一个 overlay 来启用这些设置。有关示例,请参阅 Adafruit Kippah 显示器条目。下面的示例演示了如何在 /boot/firmware/config.txt
文件中为 Kippah 显示器设置 dtoverlay
条目:
dtoverlay=vc4-kms-kippah-7inch-overlay
显示时序通常在内核中定义,但也可以在提供的 panel-dpi
驱动程序中定义。如果你的面板在内核代码中没有定义覆盖,你可以使用 panel-dpi
驱动程序将显示时序定义为参数。这样就可以为任何显示器手动配置设备树。
以下示例演示了如何使用设备树参数定义计时:
dtoverlay=vc4-kms-v3d
dtoverlay=vc4-kms-dpi-generic,hactive=480,hfp=26,hsync=16,hbp=10
dtparam=vactive=640,vfp=25,vsync=10,vbp=16
dtparam=clock-frequency=32000000,rgb666-padhi
Note
|
设备树行长度不得超过80个字符。当设置需要超过80个字符的行时,将该参数的分配拆分为多行。 |
参数显示树定义支持以下选项:
Option | Description |
---|---|
|
Display clock frequency (Hz) |
|
Horizontal active pixels |
|
Horizontal front porch |
|
Horizontal sync pulse width |
|
Horizontal back porch |
|
Vertical active lines |
|
Vertical front porch |
|
Vertical sync pulse width |
|
Vertical back porch |
|
Horizontal sync active low |
|
Vertical sync active low |
|
Data Enable active low |
|
Negative edge pixel clock |
|
Defines the screen width in millimetres |
|
Defines the screen height in millimetres |
|
Change to RGB565 output on GPIOs 0-19 |
|
Change to RGB666 output on GPIOs 0-9, 12-17, and 20-25 |
|
Change to RGB888 output on GPIOs 0-27 |
|
Override the bus format for a MEDIA_BUS_FMT_* value, also overridden by rgbXXX overrides |
|
Defines a GPIO to be used for backlight control (default value: none) |
GPIO 和 40 引脚接头
在 GitHub 上修改
目前所有 Raspberry Pi 电路板上都有一个 40 针 GPIO(通用输入/输出)针座。所有电路板上的 GPIO 针座的针距都是 0.1 英寸(2.54 毫米)。
Note
|
在没有 "H" 后缀的 Zero 和 Pico 设备上,报头没有填充(没有报头)。 |

通用 I/O (GPIO) 引脚可配置为通用输入、通用输出或多达六种特殊备用设置之一,其功能取决于引脚。

Note
|
GPIO 引脚编号方案不按数字顺序排列。电路板上有 GPIO 引脚 0 和 1(物理引脚 27 和 28),但这两个引脚是为高级用途预留的。 |
Inputs
被指定为输入引脚的 GPIO 引脚可读作高电平(3.3V)或低电平(0V)。使用内部上拉或下拉电阻可以更方便地实现这一功能。GPIO2 和 GPIO3 引脚具有固定的上拉电阻,其他引脚可通过软件进行配置。
查看 Raspberry Pi 的 GPIO 引脚图
在 Raspberry Pi 上打开终端窗口并运行 pinout
命令,即可访问 GPIO 参考。该工具由 GPIO Zero Python 库提供,Raspberry Pi OS 默认安装了该库。
WARNING: 将简单元件连接到 GPIO 引脚是安全的,但要注意接线方式。LED 应使用电阻器来限制通过它们的电流。不要将 5V 电压用于 3.3V 元件。不要将电机直接连接到 GPIO 引脚,而应使用 H 桥电路或电机控制器板。
GPIO引脚
BCM2835 封装上的 GPIO 连接有时在外设datasheet中称为 "引脚",这是一个半导体设计术语,意思是 "芯片与外界的连接"。
引脚是可配置的 CMOS 推挽输出驱动器/输入缓冲器。基于寄存器的控制设置可用于
-
内部上拉/下拉启用/禁用
-
输出 驱动强度
-
输入施密特触发滤波
中断
每个GPIO引脚在配置为通用输入时,都可以配置为Arm的中断源。几个中断生成源是可配置的:
-
电平敏感(高/低)
-
上升/下降沿
-
异步上升/下降沿
电平中断保持中断状态,直到系统软件清除电平(例如,通过服务附加的外围设备生成中断)。
正常的上升/下降沿检测在检测中内置了少量的同步。在系统时钟频率下,对引脚进行采样,中断产生的标准是三个周期窗口内的稳定过渡,即记录为1 0 0或0 1 1。异步检测绕过这种同步,能够检测非常狭窄的事件。
替代功能
几乎所有 GPIO 引脚都有替代功能。SoC 内部的外设块可以选择出现在一组 GPIO 引脚中的一个或多个引脚上,例如,I2C 总线可以配置到至少三个独立的位置。当引脚被配置为替代功能时,引脚控制(如驱动强度或施密特滤波)仍然适用。
有些功能适用于所有引脚,有些则适用于特定引脚:
-
PWM (pulse-width modulation)
-
Software PWM available on all pins
-
Hardware PWM available on GPIO12, GPIO13, GPIO18, GPIO19
-
-
SPI
-
SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7)
-
SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16)
-
-
I2C
-
Data: (GPIO2); Clock (GPIO3)
-
EEPROM Data: (GPIO0); EEPROM Clock (GPIO1)
-
-
Serial
-
TX (GPIO14); RX (GPIO15)
-
电压规格
电路板上有两个 5V 引脚和两个 3.3V 引脚,以及一些无法重新配置的接地引脚 (GND)。其余引脚均为通用 3.3V 引脚,即输出设置为 3.3V,输入为 3.3V 容差。
下表给出了 BCM2835、BCM2836、BCM2837 和基于 RP3A0 的产品(如 Raspberry Pi Zero 或 Raspberry Pi 3+)的 GPIO 引脚的各种电压规格。有关计算模块的信息,请参阅 相关datasheet。
Symbol | Parameter | Conditions | Min | Typical | Max | Unit |
---|---|---|---|---|---|---|
VIL |
Input Low Voltage |
- |
- |
- |
0.9 |
V |
VIH |
Input high voltagea |
- |
1.6 |
- |
- |
V |
IIL |
Input leakage current |
TA = +85◦C |
- |
- |
5 |
µA |
CIN |
Input capacitance |
- |
- |
5 |
- |
pF |
VOL |
Output low voltageb |
IOL = -2mA |
- |
- |
0.14 |
V |
VOH |
Output high voltageb |
IOH = 2mA |
3.0 |
- |
- |
V |
IOL |
Output low currentc |
VO = 0.4V |
18 |
- |
- |
mA |
IOH |
Output high currentc |
VO = 2.3V |
17 |
- |
- |
mA |
RPU |
Pullup resistor |
- |
50 |
- |
65 |
kΩ |
RPD |
Pulldown resistor |
- |
50 |
- |
65 |
kΩ |
a 启用滞后
b 默认驱动强度(8mA)
c 最大驱动强度(16mA)
下表给出了基于 BCM2711 的产品(4-系列产品)上 GPIO 引脚的电压规格。有关计算模块的信息,请参阅 相关datasheet。
Symbol | Parameter | Conditions | Min | Typical | Max | Unit |
---|---|---|---|---|---|---|
VIL |
Input Low Voltage |
- |
- |
- |
0.8 |
V |
VIH |
Input high voltagea |
- |
2.0 |
- |
- |
V |
IIL |
Input leakage current |
TA = +85◦C |
- |
- |
10 |
µA |
VOL |
Output low voltageb |
IOL = -4mA |
- |
- |
0.4 |
V |
VOH |
Output high voltageb |
IOH = 4mA |
2.6 |
- |
- |
V |
IOL |
Output low currentc |
VO = 0.4V |
7 |
- |
- |
mA |
IOH |
Output high currentc |
VO = 2.6V |
7 |
- |
- |
mA |
RPU |
Pullup resistor |
- |
33 |
- |
73 |
kΩ |
RPD |
Pulldown resistor |
- |
33 |
- |
73 |
kΩ |
a 启用滞后
b 默认驱动强度 (4mA)
c 最大驱动强度 (8mA)
GPIO引脚控制
在 GitHub 上修改
GPIO驱动强度并不表示最大电流,而是引脚仍然符合规格的最大电流。您应该设置GPIO驱动强度以匹配所连接的设备,以便设备正常工作。
驱动强度如何控制
焊盘内部并联了许多驱动器。如果驱动强度设置为低 (0b000
),这些驱动器大多为三态,因此不会增加输出电流。如果驱动强度增加,并联的驱动器就会越来越多。下图显示了这种行为。
Warning
|
对于4-系列产品,当前级别为图表中所示值的一半。 |

当前值
电流值规定了焊盘仍能满足规格要求的最大电流。
电流值不是引脚将输出的电流,也不是电流限制。
引脚输出为电压源:
-
如果设置为高电平,引脚将尝试将输出驱动到轨电压(3.3V)
-
如果设置低,引脚将尝试将输出驱动到地(0V)
引脚将尝试驱动输出高或低。成功将取决于连接的要求。如果引脚短路接地,它将无法驱动高。它将尝试提供尽可能多的电流,电流仅受内阻的限制。
如果引脚被驱动到高电平并短路到地面,在适当的时候它会失效。如果您将其连接到3.3V并将其驱动到低电平,情况也是如此。
满足规格取决于保证的电压电平。因为引脚是数字的,所以有两个电压电平,高电平和低电平。I/O端口有两个处理输出电平的参数:
-
VOL,最大低电平电压(3.3V VDD IO 时为 0.14V)
-
VOH,最低高电平电压(3.3V VDD IO 时为 3.0V)
VOL=0.14V 表示如果输出为低电平,则电压将<= 0.14V。 VOH=3.0V 表示如果输出为高电平,则电压将 >= 3.0V。
举例来说,驱动强度为 16mA 意味着,如果将引脚设置为高电平,则可以消耗高达 16mA 的电流,而输出电压保证 >=VOH。这也意味着,如果您设置的驱动强度为 2mA,而电流为 16mA,电压将**不是 VOH,而是更低。事实上,它可能还不够高,以至于外部设备无法将其视为高电平。
有更多关于GPIO引脚的 物理特性 的信息。
Note
|
在计算模块设备上,可以将 VDD IO 从标准的 3.3V 改为 3.3V。在这种情况下,VOL 和 VOH 将根据 GPIO 部分中的表格进行更改。 |
为什么我不能将所有引脚设置为最大电流?
Raspberry Pi 3.3V 电源的设计最大电流为每个 GPIO 引脚约 3mA。如果为每个引脚加载 16mA 电流,则总电流为 272mA。在这种负载水平下,3.3V 电源将崩溃。会出现大电流尖峰,尤其是在有电容负载的情况下。尖峰电流会在其附近的所有其他引脚上反弹。这很可能会对 SD 卡甚至 SDRAM 行为造成干扰。
什么是安全电流?
所有焊盘电子元件的设计电流均为 16mA。这是一个不会损坏设备的安全值。即使将驱动强度设置为 2mA,然后加载到 16mA 输出,也不会损坏器件。除此之外,没有保证的最大安全电流。
GPIO地址
-
0x 7e10 002c PADS(GPIO 0-27)
-
0x 7e10 0030 PADS(GPIO 28-45)
-
0x 7e10 0034 PADS(GPIO 46-53)
Bits | Field name | Description | Type | Reset |
---|---|---|---|---|
31:24 |
PASSWRD |
Must be 0x5A when writing; accidental write protect password |
W |
0 |
23:5 |
Reserved - Write as 0, read as don’t care |
|||
4 |
SLEW |
Slew rate; 0 = slew rate limited; 1 = slew rate not limited |
RW |
0x1 |
3 |
HYST |
Enable input hysteresis; 0 = disabled; 1 = enabled |
RW |
0x1 |
2:0 |
DRIVE |
Drive strength, see breakdown list below |
RW |
0x3 |
请注意同时开关输出(SSO)的限制,它不仅取决于设备,还取决于印刷电路板的质量和布局、去耦电容器的数量和质量、引脚上的负载类型(电阻、电容)以及 Raspberry Pi 无法控制的其他因素。
Raspberry Pi的工业用途
在 GitHub 上修改
Raspberry Pi经常被用作其他产品的一部分。此文档描述了一些可用于使用Raspberry Pi其他功能的额外功能。
一次性可编程设置
有许多 OTP 值可以使用。要查看所有 OTP 值 的列表,请运行以下命令:
$ vcgencmd otp_dump
这个转储中的一些重要的行是:
-
28 - 序列号
-
29 - 序列号的补码
-
30 - 电路板修订号
此外,从36到43(包括),有8行32位可供客户使用。
Note
|
在BCM2712设备上,这些数字是不同的。第31行是序列号,第32行是电路板修订号。客户行包括77到84行。 |
vcmailbox应用程序可以直接从Raspberry Pi OS上的命令行使用。一个示例用法是:
$ vcmailbox 0x00010004 8 8 0 0
…它将返回如下内容:
0x00000020 0x80000000 0x00010004 0x00000008 0x800000008 0xnnnnnnnn 0x00000000 0x00000000
上面使用 邮箱属性接口 GET_BOARD_SERIAL
,请求大小为8字节,响应大小为8字节(为请求0、0发送两个整数)。对此的响应将是两个整数(0x00000020和0x80000000),后跟标签代码、请求长度、响应长度(设置第31位以指示它是响应),然后是64位序列号(其中MS 32位始终为0)。
写入和读取客户OTP值
Warning
|
OTP值是一次性可编程的。一旦位从0更改为1,它就不能更改回来。 |
要设置客户OTP值,您需要使用 SET_CUSTOMER_OTP
(0x38021)标记,如下所示:
$ vcmailbox 0x00038021 [8 + number * 4] [8 + number * 4] [start_num] [number] [value] [value] [value] ...
-
start_num
= 从0-7编程的第一行 -
number
=要编程的行数 -
value
= 要编程的每个值
因此,要将OTP客户行4、5和6分别编程为0x11111111、0x222222、0x33333333,您将使用:
$ vcmailbox 0x00038021 20 20 4 3 0x11111111 0x22222222 0x33333333
然后这将对第40、41和42行进行编程。
要读回值,您可以使用:
$ vcmailbox 0x00030021 20 20 4 3 0 0 0
这应该显示:
0x0000002c 0x80000000 0x00030021 0x00000014 0x80000014 0x00000000 0x00000003 0x11111111 0x22222222 0x33333333
如果您想将此功能集成到您自己的代码中,您应该能够通过使用vcmailbox.c代码作为示例来实现这一点。
在非BCM2712设备上锁定OTP
可以锁定OTP更改以避免它们再次被编辑。
这可以使用带有OTP写入邮箱的特殊参数来完成:
$ vcmailbox 0x00038021 8 8 0xffffffff 0xaffe0000
一旦锁定,客户OTP值就不能再更改。请注意,此锁定操作是不可逆的。
在BCM2712设备上锁定OTP
可以使用以下命令将客户区域标记为只读。
$ vcmailbox 0x00030086 4 4 0
OTP 仅在设备重置前锁定,因此每次启动时都需要重新应用 OTP 锁。
使非 BCM2712 设备上的客户 OTP 位不可读
可以完全阻止读取客户 OTP 位。这可以通过使用 OTP 写入邮箱的特殊参数来实现:
$ vcmailbox 0x00038021 8 8 0xffffffff 0xaffebabe
此操作不太可能对绝大多数用户有用,并且不可逆。
BCM2712 设备上的客户 MAC 地址
在 BCM2712 设备上,以太网、Wi-Fi 和蓝牙 MAC 地址设置在 OTP 内存中。这些值可以随客户值而变化。
获取客户的 mac 地址 vcmailbox 0x00030082/3/4 6 6 0 0
,其中 2 代表以太网,3 代表 Wi-Fi,4 代表蓝牙:
$ vcmailbox 0x00030083 6 6 0 0
0x00000020 0x80000000 0x00030083 0x00000006 0x80000006 0xddccbbaa 0x0000ffee 0x00000000
要设置客户 MAC 地址,必须以两个 32 字节的形式发送,字节顺序要正确。您可以运行命令检查格式是否正确:
$ vcmailbox 0x00030085 6 6 0x44332211 0x6655
检查日志,查看 MAC 地址是否符合您的预期:
$ sudo vclog -m
1057826.701: read mac address 11:22:33:44:55:66
多播地址不被视为有效。MAC 地址最高有效八位字节中的最低有效位是多播位,因此请确保未设置该位。
然后,您可以使用命令 vcmailbox 0x00038082/3/4 6 6 <row1> <row0>
设置客户 MAC 地址:
$ vcmailbox 0x00038082 6 6 0x44332211 0x6655
如果客户 MAC 地址被设置为 ff:ff:ff:ff:ff:ff
,则会被忽略。
设备专用私钥
使用 Broadcom BCM2712 处理器的设备有 16 行 OTP 数据(512 位),支持文件系统加密。
不使用 BCM2712 的设备有 8 行 OTP 数据(256 位)可用作设备专用私钥。
可以使用与管理客户 OTP 行类似的 vcmailbox
命令对这些行进行编程和读取。如果
不需要安全启动/文件系统加密,则设备私钥行可用于存储通用信息。
-
设备私钥行只能通过
vcmailbox
命令读取,该命令需要访问/dev/vcio
,而该权限仅限于 Raspberry Pi OS 上的video
组。 -
Raspberry Pi 计算机没有硬件保护的密钥存储。建议将此功能与 安全启动 结合使用,以限制对此数据的访问。
-
Raspberry Pi OS 不支持加密的根文件系统。
有关开源磁盘加密的更多信息,请参阅 Cryptsetup。
使用 rpi-otp-private-key
烧录密钥
rpi-otp-private-key
脚本包装了设备私钥 vcmailbox
API,以便更轻松地以 OpenSSL 格式读取和写入密钥。
Note
|
usbboot 存储库包含您需要的所有工具,包括 rpi-eeprom 作为 Git 子模块。
|
将 32 字节密钥读取为 64 个字符的十六进制数字:
$ cd usbboot/tools
$ rpi-otp-private-key
Example:
f8dbc7b0a4fcfb1d706e298ac9d0485c2226ce8df7f7596ac77337bd09fbe160
将 32 字节随机生成的数字写入设备私钥。
Warning
|
此操作无法撤消。 |
$ rpi-otp-private-key -w $(openssl rand -hex 32)
Note
|
要指定要使用的 OTP 行数,请传递 -l <word count> 。要指定密钥存储中的起始位置,请传递 -o <word offset> 。
|
用于读取/写入密钥的邮箱 API。
读取所有行。
$ vcmailbox 0x00030081 40 40 0 8 0 0 0 0 0 0 0 0
Example:
0x00000040 0x80000000 0x00030081 0x00000028 0x80000028 0x00000000 0x00000008 0xf8dbc7b0 0xa4fcfb1d 0x706e298a 0xc9d0485c 0x2226ce8d 0xf7f7596a 0xc77337bd 0x09fbe160 0x00000000
写入所有行(将尾随的八个零替换为密钥数据):
$ vcmailbox 0x00038081 40 40 0 8 0 0 0 0 0 0 0 0
写入上例中显示的密钥:
$ vcmailbox 0x38081 40 40 0 8 0xf8dbc7b0 0xa4fcfb1d 0x706e298a 0xc9d0485c 0x2226ce8d 0xf7f7596a 0xc77337bd 0x09fbe160
OTP寄存器和位定义
在 GitHub 上修改
Raspberry Pi 系列使用的所有 SoC 都有一个内置的一次性可编程 (OTP) 存储块。少数位置有出厂编程数据。
OTP内存大小:
-
非BCM2712设备:66个32位值
-
BCM2712设备:192个32位值
要显示 OTP 的内容,请运行以下命令:
$ vcgencmd otp_dump
非BCM2712设备上的OTP寄存器
此列表包含寄存器上的公开可用信息。如果此处未定义寄存器或位,则它不是公开的。
16
-
OTP 控制寄存器 - BCM2711
-
位 26:禁用 VC JTAG
-
第 27 位: 禁用 VC JTAG
-
17
-
启动模式寄存器
-
位 1:将振荡器频率设置为 19.2MHz
-
位 3:启用 SDIO 引脚上的上拉功能
-
位 15:禁用 ROM RSA 密钥 0 -(如果设置,则启用安全启动)(BCM2711)
-
位 19:启用 GPIO 启动模式
-
位 20:设置检查 GPIO 启动模式的存储体
-
位 21:启用从 SD 卡启动
-
位 22:设置从 SD 卡启动的存储体
-
位 28:启用 USB 设备启动
-
位 29 :启用 USB 主机启动(以太网和大容量存储器)
-
Note
|
在 BCM2711 上,引导模式由 bootloader EEPROM 配置 定义,而不是 OTP。 |
18
-
引导模式寄存器副本
28
-
序列号
29
-
~(序列号)
30
33
-
板修订扩展 - 含义取决于板型号。 可通过
/proc/device-tree/chosen/rpi-boardrev-ext
中的 device-tree 获取,出于测试目的,可通过在config.txt
中设置board_rev_ext
来临时覆盖此 OTP 值。-
Compute Module 4
-
第 30 位:计算模块是否安装了 Wi-Fi 模块
-
0 - Wi-Fi
-
1 - 无 Wi-Fi
-
-
第 31 位:计算模块是否安装了 EMMC 模块
-
0 - EMMC
-
1 - 无 EMMC(精简版)
-
-
-
树莓派 400
-
位 0-7: piwiz 使用的默认键盘国家代码。
-
-
36-43
45
-
MPG2解码密钥
46
-
WVC1 解码密钥
47-54
-
用于安全启动的 RSA 公钥的 SHA256
55
-
安全启动标志(保留给启动加载程序使用)
56-63
-
256 位设备专用私钥
64-65
-
MAC 地址;如果设置,系统将优先使用该地址,而不是根据序列号自动生成的地址
66
-
高级启动寄存器(非 BCM2711)
-
第 0-6 位:ETH_CLK 输出引脚的 GPIO
-
第 7 位:启用 ETH_CLK 输出
-
第 8-14 位:LAN_RUN 输出引脚的 GPIO
-
位 15:启用 LAN_RUN 输出
-
位 24:扩展 USB HUB 超时参数
-
第 25 位:ETH_CLK 频率:
-
0 - 25MHz
-
1 - 24MHz
-
-
1还包含用于禁用过压、OTP编程和OTP读取的位。
BCM2712设备上的OTP寄存器
此列表包含寄存器上的公开可用信息。如果此处未定义寄存器或位,则它不是公开的。
22
-
引导模式寄存器
-
位 1:从 SD 卡启动
-
位 2-4 :从 SPI EEPROM 启动(以及哪些 GPIO)
-
位 10:禁止从 SD 卡启动
-
位 11:禁止从 SPI 启动
-
位 12:禁止从 USB 启动
-
23
-
复制引导模式寄存器
29
-
高级启动模式
-
位 0-7 :用于 SD 卡检测的 GPIO
-
位 8-15: 用于 RPIBOOT 的 GPIO
-
31
-
序列号的低 32 位
32
33
-
板属性 - 含义取决于板型号。 可通过
/proc/device-tree/chosen/rpi-boardrev-ext
中的 device-tree 获取。 35
-
序列号的上 32 位 完整的 64 位序列号在
/proc/device-tree/serial-number
中提供 50-51
-
以太网 MAC 地址 在设备树中传递给操作系统,例如
/proc/device-tree/axi/pcie@120000/rp1/ether@100000/local-mac-address
。 52-53
-
Wi-Fi MAC 地址 在设备树中传递给操作系统,例如
/proc/device-tree/axi/mmc@1100000/wifi@1/local-mac-address
。 54-55
-
蓝牙 MAC 地址 这将在设备树中传递给操作系统,例如
/proc/device-tree/soc/serial@7d50c000/bluetooth/local-bd-address
。 77-84
86
-
board country - piwiz 使用的默认键盘国家代码。 如果已设置,则可通过
/proc/device-tree/chosen/rpi-country-code
中的设备树查看。 87-88
-
customer Ethernet MAC address 如果已设置,则覆盖 OTP 第 50-51 行
89-90
-
customer Wi-Fi MAC address 如果设置,则覆盖 OTP 第 52-53 行
89-90
-
customer Bluetooth MAC address 如果设置,则覆盖 OTP 第 54-55 行
109-114
-
出厂设备 UUID 目前是一个 16 位数字 ID,应与设备上的条形码相匹配。用 0 字符填充并用 c40 编码。
可通过 /proc/device-tree/chosen/rpi-duid
中的 device-tree 获取。
用于PCIe的树莓派连接器
在 GitHub 上修改

Raspberry Pi 5在电路板的右侧有一个FPC连接器。该连接器为快速外围设备提供了PCIe Gen 2.0×1接口。
要连接PCIe HAT+设备,请将其连接到您的Raspberry Pi。您的Raspberry Pi应该会自动检测到该设备。要连接非HAT+设备,请将其连接到您的Raspberry Pi,然后[enable-pcie,手动启用PCIe]。
有关PCIe FPC连接器引脚和创建第三方设备、附件和HAT所需的其他详细信息,请参阅 Raspberry Pi Connector for PCIe标准文档。它应与 Raspberry Pi HAT+规范 一起阅读。
Note
|
只有某些设备 支持 枚举 Switch 后面的 PCIe 设备。 |
启用PCIe
默认情况下,除非连接到HAT+设备,否则不会启用PCIe连接器。要启用连接器,请将以下行添加到 /boot/firmware/config.txt
:
dtparam=pciex1
使用 sudo reboot
重新启动以使配置更改生效。
Note
|
您也可以使用别名 nvme 。
|
从PCIe启动
默认情况下,Raspberry Pi设备不从PCIe存储启动。要启用从PCIe启动,请更改引导加载程序配置中的 BOOT_ORDER
。使用以下命令编辑EEPROM配置:
$ sudo rpi-eeprom-config --edit
将 BOOT_ORDER
行替换为以下行:
BOOT_ORDER=0xf416
要从非HAT+设备启动,还需要添加以下行:
PCIE_PROBE=1
保存更改后,使用 sudo reboot
重新启动Raspberry Pi以更新EEPROM。
PCIe Gen 3.0
Warning
|
Raspberry Pi 5未通过Gen 3.0速度认证。PCIe Gen 3.0连接可能不稳定。 |
默认情况下,Raspberry Pi 5 使用 Gen 2.0 速度(5 GT/s)。使用以下方法之一来强制使用 Gen 3.0(8 GT/s):
-
config.txt
-
raspi-config
连接已通过Gen 2.0速度(5 GT/sec)认证,但您可以强制执行Gen 3.0(10 GT/sec)速度。要启用PCIe Gen 3.0速度,请将以下行添加到 /boot/firmware/config.txt
:
dtparam=pciex1_gen=3
使用 sudo reboot
重新启动您的Raspberry Pi以使这些设置生效。
运行以下命令打开 Raspberry Pi 配置 CLI:
$ sudo raspi-config
完成以下步骤,启用 PCIe Gen 3.0 速度:
-
选择
Advanced Options
. -
选择
PCIe Speed
. -
选择
Yes
以启用 PCIe Gen 3 模式. -
选择
Finish
退出. -
使用
sudo reboot
重启 Raspberry Pi,使这些设置生效。
电源按钮
在 GitHub 上修改
Note
|
本节仅适用于带有电源按钮的Raspberry Pi型号,例如Raspberry Pi 5。 |
当您第一次将Raspberry Pi插入电源时,它会自动打开并启动到操作系统,而无需按下按钮。
如果您运行Raspberry Pi Desktop,您可以通过短暂按下电源按钮来启动彻底关闭。将出现一个窗口,询问您是要关闭、重新启动还是注销。
选择一个选项或再次按下电源按钮以启动干净的关机。
Note
|
如果您运行Raspberry Pi Desktop,您可以快速连续按两次电源按钮以关闭。如果您在没有桌面的情况下运行Raspberry Pi OS Lite,请按一次电源按钮以启动关机。 |
电源
在 GitHub 上修改
电源要求因Raspberry Pi型号而异。所有型号都需要5.1V电源,但所需电流通常会根据型号而增加。Raspberry Pi 3之前的所有型号都需要micro USB电源连接器,而Raspberry Pi 4、Raspberry Pi 400和Raspberry Pi 5使用USB-C连接器。
每个Raspberry Pi消耗的电流取决于连接的外围设备。
推荐电源
对于树莓派1、树莓派2和树莓派3,我们推荐 2.5A micro USB电源。对于树莓派4和树莓派400,我们推荐 树莓派4的3A USB-C电源。对于树莓派5,我们推荐 27W USB-C电源。
Note
|
没有Raspberry Pi型号支持USB-PPS。 |
Note
|
如果您使用第三方USB-PD多端口电源,则在连接Raspberry Pi时将额外设备插入电源会导致电源和Raspberry Pi之间的重新协商。如果Raspberry Pi通电,则会无缝发生这种情况。如果Raspberry Pi断电,这种重新协商可能会导致Raspberry Pi启动。 |
以太网供电(PoE)

Raspberry Pi 5上的以太网插孔支持PoE+,支持IEEE 802.3at-2009 PoE标准。
Raspberry Pi4B和Pi3B+上的以太网插孔支持PoE,支持IEEE 802.3af-2003 PoE标准。
典型功率要求
产品 | 推荐的PSU电流容量 | 最大总USB外设电流消耗 | 典型裸板有源电流消耗 |
---|---|---|---|
Raspberry Pi 1 Model A |
700mA |
500mA |
200mA |
Raspberry Pi 1 Model B |
1.2A |
500mA |
500mA |
Raspberry Pi 1 Model A+ |
700mA |
500mA |
180mA |
Raspberry Pi 1 Model B+ |
1.8A |
1.2A |
330mA |
Raspberry Pi 2 Model B |
1.8A |
1.2A |
350mA |
Raspberry Pi 3 Model B |
2.5A |
1.2A |
400mA |
Raspberry Pi 3 Model A+ |
2.5A |
仅受PSU、电路板和连接器额定值限制。 |
350mA |
Raspberry Pi 3 Model B+ |
2.5A |
1.2A |
500mA |
Raspberry Pi 4 Model B |
3.0A |
1.2A |
600mA |
Raspberry Pi 5 |
5.0A |
1.6A (如果使用3A电源,则为600mA) |
800mA |
Pi 400 |
3.0A |
1.2A |
800mA |
Pi 500 |
5.0A |
1.6A (600mA if using a 3A power supply) |
800mA |
Zero |
1.2A |
仅受PSU、电路板和连接器额定值限制 |
100mA |
Zero W |
1.2A |
仅受PSU、电路板和连接器额定值限制。 |
150mA |
Zero 2 W |
2A |
仅受PSU、电路板和连接器额定值限制。 |
350mA |
Note
|
当连接到+5V(25W)时,Raspberry Pi 5为下游USB外围设备提供1.6A的电源。当连接到任何其他兼容电源时,Raspberry Pi 5将下游USB设备的功率限制为600mA。 |
大多数Raspberry Pi为USB外围设备提供足够的电流,为大多数USB设备供电,包括键盘、鼠标和适配器。但是,一些设备需要额外的电流,包括调制解调器、外部磁盘和大功率天线。要连接功率要求超过上表中指定的值的USB设备,请使用外部供电的USB集线器进行连接。
随着您使用树莓派上的各种接口,树莓派的电源要求会增加。结合起来,GPIO引脚可以安全地绘制50mA;每个引脚可以单独绘制高达16mA。HDMI端口使用50mA。相机模块需要250mA。USB键盘和鼠标可以使用100mA或高达1000mA。检查您计划连接到树莓派的设备的额定功率,并相应地购买电源。如果您不确定,请使用外部供电的USB集线器。
运行以下命令检查 USB 端口的电源输出状态:
$ vcgencmd get_config usb_max_current_enable
下表描述了不同Raspberry Pi型号在各种工作负载期间消耗的电量(以安培为单位):
Raspberry Pi 1B+ |
Raspberry Pi 2B |
Raspberry Pi 3B |
Raspberry Pi Zero |
Raspberry Pi 4B |
||
Boot |
Max |
0.26 |
0.40 |
0.75 |
0.20 |
0.85 |
Avg |
0.22 |
0.22 |
0.35 |
0.15 |
0.7 |
|
Idle |
Avg |
0.20 |
0.22 |
0.30 |
0.10 |
0.6 |
Video playback (H.264) |
Max |
0.30 |
0.36 |
0.55 |
0.23 |
0.85 |
Avg |
0.22 |
0.28 |
0.33 |
0.16 |
0.78 |
|
Stress |
Max |
0.35 |
0.82 |
1.34 |
0.35 |
1.25 |
Avg |
0.32 |
0.75 |
0.85 |
0.23 |
1.2 |
|
Halt current |
0.10 |
0.055 |
0.023 |
注:这些测量使用了标准的 Raspberry Pi 操作系统镜像(截至 2016 年 2 月 26 日,Raspberry Pi 4 则截至 2019 年 6 月),在室温下进行,Raspberry Pi 与 HDMI 显示器、USB 键盘和 USB 鼠标相连。Raspberry Pi 3 Model B 连接到无线局域网接入点,Raspberry Pi 4 连接到以太网。所有这些功率测量值都是近似值,没有考虑额外 USB 设备的功耗;如果多个额外 USB 设备或 HAT 连接到 Raspberry Pi,功耗很容易超过这些测量值。
电源警告
自 Raspberry Pi B+(2014 年)以来,除 Zero 系列外,所有型号的 Raspberry Pi 都有低电压检测电路,可检测电源电压是否降至 4.63V 以下(±5%)。这将会在内核日志中添加一条记录。
如果您看到警告,请切换到更高质量的电源和电缆。低质量的电源可能会损坏存储或导致Raspberry Pi中的不可预测行为。
电压可能会因多种原因下降。您可能插入了太多高要求的USB设备。电源可能不足。或者电源电缆可能使用太细的电线。
电源和树莓派操作系统
引导程序通过设备树 /proc/device-tree/chosen/power
传递有关电源的信息。用户通常不会直接读取。
- max_current
-
以mA为单位的最大电流
- uspd_power_data_objects
-
PDO的转储-高级用户的调试
- usb_max_current_enable
-
限流器设置为高还是低
- usb_over_current_detected
-
在将控制权转移到操作系统之前,引导期间是否发生任何USB过流
- reset_event
-
PMIC复位原因,例如看门狗、过压或欠压、过温
PMIC 内置 ADC,除其他外,可以测量电源电压 EXT5V_V
。使用以下命令查看 ADC 测量值:
$ vcgencmd pmic_read_adc
你看不到 USB 电流或其他直接连接到 5V 的电流,因为这会绕过 PMIC。你不应该指望它增加到源电源的功率。不过,这对监控内核电压等情况还是很有用的。
实时时钟(RTC)
在 GitHub 上修改
Raspberry Pi 5包括一个RTC模块。这可以通过位于USB-C电源连接器右侧的板上的J5(BAT)连接器由电池供电。

您可以设置唤醒闹钟,将电路板切换到极低功耗状态(约 3mA)。达到闹钟时间后,电路板将重新开启。这对延时摄影等周期性工作非常有用。
要支持唤醒警报的低功耗模式,请编辑引导加载程序配置:
$ sudo -E rpi-eeprom-config --edit
adding the following two lines.
POWER_OFF_ON_HALT=1
WAKE_ON_GPIO=0
您可以使用以下方法测试功能:
$ echo +600 | sudo tee /sys/class/rtc/rtc0/wakealarm
$ sudo halt
这将使电路板停止进入非常低的功耗状态,然后唤醒并在10分钟后重新启动。
RTC还提供启动时间,例如在 dmesg
中,对于无法访问NTP的用例:
[ 1.295799] rpi-rtc soc:rpi_rtc: setting system clock to 2023-08-16T15:58:50 UTC (1692201530)
Note
|
即使没有连接到J5连接器的备用电池,RTC仍然可用。 |
添加备用电池

官方电池部分是可充电锂锰纽扣电池,带有预装的两针JST-SH插头和粘合剂安装垫。这适用于在板的主电源断开时为RTC供电。由于断电时的电流消耗以个位数µA为单位,因此保持时间以月为单位。
Note
|
我们不建议将初级(不可充电)锂电池用于RTC。RTC备用电流消耗高于大多数专用RTC模块,并将导致较短的使用寿命。 |
Warning
|
请勿将锂离子电池用于RTC。 |
启用电池充电
RTC配备了一个恒流(3mA)恒压充电器。
默认情况下禁用电池充电。有显示充电电压和限制的 sysfs
文件:
/sys/devices/platform/soc/soc:rpi_rtc/rtc/rtc0/charging_voltage:0 /sys/devices/platform/soc/soc:rpi_rtc/rtc/rtc0/charging_voltage_max:4400000 /sys/devices/platform/soc/soc:rpi_rtc/rtc/rtc0/charging_voltage_min:1300000
要以设定电压为电池充电,请将 rtc_bbat_vchg
添加到 /boot/firmware/config.txt
:
dtparam=rtc_bbat_vchg=3000000
使用 sudo reboot
重新启动以使用新的电压设置。检查 sysfs
文件以确保充电电压设置正确。
禁用电池充电
要停止充电,请从 config.txt
中删除任何包含 rtc_bbat_vchg
的行。
串行外设接口(SPI)
在 GitHub 上修改
树莓派计算机配备了许多 SPI 总线。SPI可用于连接各种外围设备——显示器、网络控制器(以太网、CAN总线)、UART等。这些设备最好由内核设备驱动程序支持,但 spidev
应用编程接口允许用多种语言编写用户空间驱动程序。
SPI硬件
Raspberry Pi Zero、1、2和3有三个SPI控制器:
-
SPI0
,具有两个硬件芯片选择,可用于所有 Raspberry Pi 的排针;还有一个替代映射,仅在 Compute Module 上可用。 -
SPI1
具有三种硬件芯片选择,适用于除原始Raspberry Pi 1 Model A和Model B之外的所有Raspberry Pi型号。 -
SPI2
也有三种硬件芯片选择,仅在 Compute Module 1、3和3+上可用。
在树莓派4、400和 Compute Module 4 上,有四个额外的SPI总线:SPI3到SPI6,每个都有两个硬件芯片选择。这些额外的SPI总线可通过某些GPIO引脚上的备用功能分配获得。有关详细信息,请参阅 BCM2711 Arm外围设备 datasheet。
https://datasheets.raspberrypi.com/bcm2835/bcm2835-peripherals.pdf[BCM2835 Arm外设] datasheet中的第10章描述了主控制器。第2.3章描述了辅助控制器。
引脚/GPIO映射
SPI0
SPI function | Header pin | Broadcom pin name | Broadcom pin function |
---|---|---|---|
|
19 |
|
|
|
21 |
|
|
|
23 |
|
|
|
24 |
|
|
|
26 |
|
|
SPI0备用映射(仅 Compute Module ,CM4除外)
SPI function | Broadcom pin name | Broadcom pin function |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SPI1
SPI function | Header pin | Broadcom pin name | Broadcom pin function |
---|---|---|---|
|
38 |
|
|
|
35 |
|
|
|
40 |
|
|
|
12 |
|
|
|
11 |
|
|
|
36 |
|
|
SPI2(仅 Compute Module ,CM4除外)
SPI function | Broadcom pin name | Broadcom pin function |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SPI3(仅限BCM2711)
SPI function | Header pin | Broadcom pin name | Broadcom pin function |
---|---|---|---|
|
03 |
|
|
|
28 |
|
|
|
05 |
|
|
|
27 |
|
|
|
18 |
|
|
SPI4(仅限BCM2711)
SPI function | Header pin | Broadcom pin name | Broadcom pin function |
---|---|---|---|
|
31 |
|
|
|
29 |
|
|
|
26 |
|
|
|
07 |
|
|
|
22 |
|
|
主模式
信号名称缩写
Signal name abbreviations:
- SCLK
-
serial clock
- CE
-
chip enable (often called chip select)
- MOSI
-
master out slave in
- MISO
-
master in slave out
- MOMI
-
master out master in
低速串行接口(LoSSI)模式
LoSSI 标准允许向外围设备(LCD)发出命令,并将数据传输到外围设备。LoSSI 命令和参数的长度为 8 位,但有一个额外位用于指示字节是命令还是参数/数据。数据时,该额外位设置为高电平;命令时,该额外位设置为低电平。由此产生的 9 位值被序列化到输出端。LoSSI 通常与 MIPI DBI 类型 C 兼容的 LCD 控制器一起使用。
Note
|
某些命令会触发 SPI 控制器的自动读取,因此此模式不能用作多用途 9 位 SPI。 |
速度
CLK 寄存器的时钟分频器 (CDIV) 字段设置 SPI 时钟速度:
- SCLK
-
Core Clock / CDIV
如果 CDIV 设置为 0,则除数为 65536。除数必须是 2 的倍数,奇数向下舍入。请注意,由于模拟电气问题(上升时间、驱动强度等),并非所有可能的时钟速率都可用。
有关更多信息,请参阅 Linux driver 部分。
SPI 软件
Linux driver
默认的 Linux 驱动程序是 spi-bcm2835
。
SPI0 默认禁用。要启用它,请使用 raspi-config,或确保 /boot/firmware/config.txt
中的 dtparam=spi=on
行未注释。默认情况下,它使用两条芯片选择线,但可以使用 dtoverlay=spi0-1cs
将其减少为一条。此外还有 dtoverlay=spi0-2cs
;不带任何参数的情况下,它等同于 dtparam=spi=on
。
要启用 SPI1,可以使用 1、2 或 3 条芯片选择线。在 /boot/firmware/config.txt
中添加相应行:
#1 chip select
dtoverlay=spi1-1cs
#2 chip select
dtoverlay=spi1-2cs
#3 chip select
dtoverlay=spi1-3cs
SPI2、SPI3、SPI4、SPI5 和 SPI6 也有类似的overlays。
由于某些限制,该驱动程序不使用硬件芯片选择线。相反,它可以使用任意数量的 GPIO 作为软件/GPIO 片选。这意味着你可以自由选择任何空闲的 GPIO 作为 CS 线路,而且所有这些 SPI 覆盖都包含该控制 - 详情请参见 /boot/firmware/overlays/README
,或运行(例如) dtoverlay -h spi0-2cs
( dtoverlay -a | grep spi
可能有助于列出所有这些线路)。
速度
驱动程序支持内核时钟整除的所有速度,但如上所述,由于 GPIO 和所连接设备的限制,并非所有这些速度都能支持数据传输。根据经验,任何超过 50MHz 的速度都不可能工作,但具体情况可能会有所不同。
支持的模式位
- SPI_CPOL
-
clock polarity
- SPI_CPHA
-
clock phase
- SPI_CS_HIGH
-
chip select active high
- SPI_NO_CS
-
1 device per bus, no Chip select
- SPI_3WIRE
-
bidirectional mode, data in and out pin shared
双向模式也称为 3 线模式,由 spi-bcm2835
内核模块支持。请注意,在这种模式下,spi_transfer
结构的 tx
或 rx
字段必须是空指针,因为只能进行半双工通信。否则,传输将失败。spidev_test.c
源代码没有正确考虑这一点,因此在三线模式下根本无法工作。
SPI 驱动程序延迟
此 thread 讨论了延迟问题。
spidev
spidev
为单个 SPI CS 线路提供了一个基于 ioctl
的用户空间接口。设备树用于指示 CS 线路是由内核驱动模块驱动,还是由 spidev
代表用户管理;两者不可能同时进行。请注意,Raspberry Pi 自己的内核对于使用设备树来启用 spidev
比较宽松 - 上游内核会对此类使用发出警告,最终可能会完全禁止使用。
从 C 使用 spidev
Linux 文档中有一个环回测试程序可以用作起点。请参阅 Troubleshooting 部分。
从 Python 使用 spidev
有多个 Python 库提供对 spidev
的访问,包括 spidev
( pip install spidev
- 请参阅 https://pypi.org/project/spidev/)和 SPI-Py
(https://github.com/lthiery/SPI-Py)。
故障排除
环回测试
这可以用来测试SPI发送和接收。在MOSI和MISO之间放一根电线。它不测试CE0和CE1。
$ wget https://raw.githubusercontent.com/raspberrypi/linux/rpi-6.1.y/tools/spi/spidev_test.c
$ gcc -o spidev_test spidev_test.c
$ ./spidev_test -D /dev/spidev0.0
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D
以上部分内容抄自 elinux SPI 页面,该页面也借鉴了此处内容。两者均采用 CC-SA 许可。
通用串行总线(USB)
在 GitHub 上修改
一般来说,Linux 支持的所有设备都可以与 Raspberry Pi 一起使用,但 Raspberry Pi 4 之前的型号有一些限制。
最大功率输出
与所有电脑一样,Raspberry Pi 上的 USB 端口提供的功率是有限的。USB 设备的问题通常是由电源问题引起的。要排除电源不足的原因,请使用供电集线器将 USB 设备连接到 Raspberry Pi。
Model | Max power output of USB ports |
---|---|
Raspberry Pi Zero, 1 |
500mA per port1 |
Raspberry Pi 2, 3, 4 |
1200mA total across all ports |
Raspberry Pi 5 |
600mA if using a 3A supply, 1600mA if using a 5A supply |
-
对于原始 Raspberry Pi 1 Model B,每个端口的限制电流为 100mA。
Raspberry Pi 5
Raspberry Pi 5 需要能够在 +5V 电压下提供 3A 电流(15W)的优质 USB-C 电源才能启动。不过,使用这样的电源会限制外设的电流消耗。如果您使用的电源无法在首次启动时以 +5V 电压提供 5A 电流,则操作系统会警告您外围设备的电流将限制在 600mA。
对于希望驱动大功率外设(如硬盘和固态硬盘),同时为峰值工作负载保留余量的用户,应使用能够在 +5V 电压下提供 5A 电流(25W)的支持 USB-PD 的电源。如果 Raspberry Pi 5 固件检测到这样的电源,就会将外围设备的 USB 电流限制增加到 1.6A,为下游 USB 设备提供 5W 的额外电源,并提供 5W 的额外板载电源余量。
Note
|
电源余量由 USB 端口和风扇共享。 |
Raspberry Pi 4
Raspberry Pi 4 提供两个 USB 3.0 端口和两个 USB 2.0 端口,它们与 VL805 USB 控制器相连。所有四个端口的 USB 2.0 线路都连接到 VL805 中的一个 USB 2.0 集线器。这就将 USB 1.1 和 USB 2.0 设备的总可用带宽限制为单个 USB 2.0 端口的带宽。
在 Raspberry Pi 4 上,以前型号使用的 USB 控制器位于 USB Type C 端口上,默认情况下被禁用。
Raspberry Pi Zero, 1, 2 and 3
Raspberry Pi 1 Model B+、Raspberry Pi 2 和 Raspberry Pi 3 板提供四个 USB 2.0 端口。Raspberry Pi Zero 板有一个微型 USB on-the-go (OTG) 端口。
Raspberry Pi 4 之前型号的 USB 控制器对某些设备只有基本的支持,因此软件处理开销较大。它还只支持一个根 USB 端口:来自连接设备的所有流量都通过这条单一总线传输,其最高运行速度为 480Mbps。
USB 2.0 规范定义了三种设备速度—低速、全速和高速。大多数鼠标和键盘为低速,大多数 USB 音效设备为全速,大多数视频设备(网络摄像头或视频采集)为高速。
一般来说,将多个高速 USB 设备连接到 Raspberry Pi 不会有任何问题。
与低速和全速设备通信时产生的软件开销意味着同时激活低速和全速设备的数量受到限制。少量这些类型的设备连接到 Raspberry Pi 不会造成任何问题。
已知的 USB 问题
与 USB 3.0 集线器的互操作性
在使用全速或低速设备(包括大多数鼠标和键盘)时,USB 3.0 集线器存在一个问题。大多数 USB 3.0 集线器硬件中的一个错误意味着 Raspberry Pi 4 之前的型号无法与连接到 USB 3.0 集线器的全速或低速设备对话。
通过 USB 3.0 集线器连接 USB 2.0 高速设备(包括 USB 2.0 集线器)时可正常运行。
避免将低速或全速设备连接到 USB 3.0 集线器。作为一种变通方法,将 USB 2.0 集线器插入 USB 3.0 集线器的下游端口并连接低速设备,或在 Raspberry Pi 和 USB 3.0 集线器之间使用 USB 2.0 集线器,然后将低速设备插入 USB 2.0 集线器。
树莓派修订代码
在 GitHub 上修改
每个不同的Raspberry Pi模型修订版都有一个唯一的修订版代码。您可以通过运行以下命令来查找Raspberry Pi的修订代码:
$ cat /proc/cpuinfo
最后三行显示硬件类型、修订代码和Raspberry Pi的唯一序列号。例如:
Hardware : BCM2835 Revision : a02082 Serial : 00000000765fc593
Note
|
所有Raspberry Pi计算机都报告 BCM2835 ,即使是带有BCM2836、BCM2837、BCM2711和BCM2712处理器的计算机。您不应该使用此字符串来检测处理器。使用以下信息或 cat /sys/firmware/devicetree/base/model 解码修订代码。
|
老式修订代码
第一组Raspberry Pi型号被赋予了从 0002
到 0015
的顺序十六进制修订代码:
Code | Model | Revision | RAM | Manufacturer |
---|---|---|---|---|
0002 |
B |
1.0 |
256MB |
Egoman |
0003 |
B |
1.0 |
256MB |
Egoman |
0004 |
B |
2.0 |
256MB |
Sony UK |
0005 |
B |
2.0 |
256MB |
Qisda |
0006 |
B |
2.0 |
256MB |
Egoman |
0007 |
A |
2.0 |
256MB |
Egoman |
0008 |
A |
2.0 |
256MB |
Sony UK |
0009 |
A |
2.0 |
256MB |
Qisda |
000d |
B |
2.0 |
512MB |
Egoman |
000e |
B |
2.0 |
512MB |
Sony UK |
000f |
B |
2.0 |
512MB |
Egoman |
0010 |
B+ |
1.2 |
512MB |
Sony UK |
0011 |
CM1 |
1.0 |
512MB |
Sony UK |
0012 |
A+ |
1.1 |
256MB |
Sony UK |
0013 |
B+ |
1.2 |
512MB |
Embest |
0014 |
CM1 |
1.0 |
512MB |
Embest |
0015 |
A+ |
1.1 |
256MB/512MB |
Embest |
新式修订代码
随着Raspberry Pi 2的推出,引入了新式的修订代码。十六进制代码的每一位不是顺序的,而是代表有关修订的一条信息:
NOQuuuWuFMMMCCCCPPPPTTTTTTTTRRRR
Part | Represents | Options |
---|---|---|
N (bit 31) |
Overvoltage |
0: Overvoltage allowed |
1: Overvoltage disallowed |
||
O (bit 30) |
OTP Program1 |
0: OTP programming allowed |
1: OTP programming disallowed |
||
Q (bit 29) |
OTP Read1 |
0: OTP reading allowed |
1: OTP reading disallowed |
||
uuu (bits 26-28) |
Unused |
Unused |
W (bit 25) |
Warranty bit2 |
0: Warranty is intact |
1: Warranty has been voided by overclocking |
||
u (bit 24) |
Unused |
Unused |
F (bit 23) |
New flag |
1: new-style revision |
0: old-style revision |
||
MMM (bits 20-22) |
Memory size |
0: 256MB |
1: 512MB |
||
2: 1GB |
||
3: 2GB |
||
4: 4GB |
||
5: 8GB |
||
6: 16GB |
||
CCCC (bits 16-19) |
Manufacturer |
0: Sony UK |
1: Egoman |
||
2: Embest |
||
3: Sony Japan |
||
4: Embest |
||
5: Stadium |
||
PPPP (bits 12-15) |
Processor |
0: BCM2835 |
1: BCM2836 |
||
2: BCM2837 |
||
3: BCM2711 |
||
4: BCM2712 |
||
TTTTTTTT (bits 4-11) |
Type |
0x00: A |
0x01: B |
||
0x02: A+ |
||
0x03: B+ |
||
0x04: 2B |
||
0x05: Alpha (early prototype) |
||
0x06: CM1 |
||
0x08: 3B |
||
0x09: Zero |
||
0x0a: CM3 |
||
0x0c: Zero W |
||
0x0d: 3B+ |
||
0x0e: 3A+ |
||
0x0f: Internal use only |
||
0x10: CM3+ |
||
0x11: 4B |
||
0x12: Zero 2 W |
||
0x13: 400 |
||
0x14: CM4 |
||
0x15: CM4S |
||
0x16: Internal use only |
||
0x17: 5 |
||
0x18: CM5 |
||
0x19: 500 |
||
0x1a: CM5 Lite |
||
RRRR (bits 0-3) |
Revision |
0, 1, 2, etc. |
1 有关 programming the OTP bits 的信息。
2 Raspberry Pi 4 上从未设置过保修位。
正在使用的新式修订代码
Note
|
此列表并非详尽-可能有未在此表中使用的代码。有关使用修订代码识别电路板的最佳方法,请参阅下一节。 |
Code | Model | Revision | RAM | Manufacturer |
---|---|---|---|---|
900021 |
A+ |
1.1 |
512MB |
Sony UK |
900032 |
B+ |
1.2 |
512MB |
Sony UK |
900092 |
Zero |
1.2 |
512MB |
Sony UK |
900093 |
Zero |
1.3 |
512MB |
Sony UK |
9000c1 |
Zero W |
1.1 |
512MB |
Sony UK |
9020e0 |
3A+ |
1.0 |
512MB |
Sony UK |
9020e1 |
3A+ |
1.1 |
512MB |
Sony UK |
920092 |
Zero |
1.2 |
512MB |
Embest |
920093 |
Zero |
1.3 |
512MB |
Embest |
900061 |
CM1 |
1.1 |
512MB |
Sony UK |
a01040 |
2B |
1.0 |
1GB |
Sony UK |
a01041 |
2B |
1.1 |
1GB |
Sony UK |
a02082 |
3B |
1.2 |
1GB |
Sony UK |
a020a0 |
CM3 |
1.0 |
1GB |
Sony UK |
a020d3 |
3B+ |
1.3 |
1GB |
Sony UK |
a020d4 |
3B+ |
1.4 |
1GB |
Sony UK |
a02042 |
2B (with BCM2837) |
1.2 |
1GB |
Sony UK |
a21041 |
2B |
1.1 |
1GB |
Embest |
a22042 |
2B (with BCM2837) |
1.2 |
1GB |
Embest |
a22082 |
3B |
1.2 |
1GB |
Embest |
a220a0 |
CM3 |
1.0 |
1GB |
Embest |
a32082 |
3B |
1.2 |
1GB |
Sony Japan |
a52082 |
3B |
1.2 |
1GB |
Stadium |
a22083 |
3B |
1.3 |
1GB |
Embest |
a02100 |
CM3+ |
1.0 |
1GB |
Sony UK |
a03111 |
4B |
1.1 |
1GB |
Sony UK |
b03111 |
4B |
1.1 |
2GB |
Sony UK |
b03112 |
4B |
1.2 |
2GB |
Sony UK |
b03114 |
4B |
1.4 |
2GB |
a01040 |
2B |
1.0 |
1GB |
Sony UK |
a01041 |
2B |
1.1 |
1GB |
Sony UK |
a21041 |
2B |
1.1 |
1GB |
Embest |
a02042 |
2B (with BCM2837) |
1.2 |
1GB |
Sony UK |
a22042 |
2B (with BCM2837) |
1.2 |
1GB |
Embest |
900061 |
CM1 |
1.1 |
512MB |
Sony UK |
a02082 |
3B |
1.2 |
1GB |
Sony UK |
a22082 |
3B |
1.2 |
1GB |
Embest |
a32082 |
3B |
1.2 |
1GB |
Sony Japan |
a52082 |
3B |
1.2 |
1GB |
Stadium |
a22083 |
3B |
1.3 |
1GB |
Embest |
900092 |
Zero |
1.2 |
512MB |
Sony UK |
920092 |
Zero |
1.2 |
512MB |
Embest |
900093 |
Zero |
1.3 |
512MB |
Sony UK |
920093 |
Zero |
1.3 |
512MB |
Embest |
a020a0 |
CM3 |
1.0 |
1GB |
Sony UK |
a220a0 |
CM3 |
1.0 |
1GB |
Embest |
9000c1 |
Zero W |
1.1 |
512MB |
Sony UK |
a020d3 |
3B+ |
1.3 |
1GB |
Sony UK |
a020d4 |
3B+ |
1.4 |
1GB |
Sony UK |
9020e0 |
3A+ |
1.0 |
512MB |
Sony UK |
9020e1 |
3A+ |
1.1 |
512MB |
Sony UK |
a02100 |
CM3+ |
1.0 |
1GB |
Sony UK |
a03111 |
4B |
1.1 |
1GB |
Sony UK |
b03111 |
4B |
1.1 |
2GB |
Sony UK |
c03111 |
4B |
1.1 |
4GB |
Sony UK |
b03112 |
4B |
1.2 |
2GB |
Sony UK |
c03112 |
4B |
1.2 |
4GB |
Sony UK |
b03114 |
4B |
1.4 |
2GB |
Sony UK |
c03114 |
4B |
1.4 |
4GB |
Sony UK |
d03114 |
4B |
1.4 |
8GB |
Sony UK |
b03115 |
4B |
1.5 |
2GB |
Sony UK |
c03115 |
4B |
1.5 |
4GB |
Sony UK |
d03115 |
4B |
1.5 |
8GB |
Sony UK |
902120 |
Zero 2 W |
1.0 |
512MB |
Sony UK |
c03130 |
400 |
1.0 |
4GB |
Sony UK |
a03140 |
CM4 |
1.0 |
1GB |
Sony UK |
b03140 |
CM4 |
1.0 |
2GB |
Sony UK |
c03140 |
CM4 |
1.0 |
4GB |
Sony UK |
d03140 |
CM4 |
1.0 |
8GB |
Sony UK |
b04170 |
5 |
1.0 |
2GB |
Sony UK |
c04170 |
5 |
1.0 |
4GB |
Sony UK |
d04170 |
5 |
1.0 |
8GB |
Sony UK |
b04171 |
5 |
1.1 |
2GB |
Sony UK |
c04171 |
5 |
1.1 |
4GB |
Sony UK |
d04171 |
5 |
1.1 |
8GB |
Sony UK |
e04171 |
5 |
1.1 |
16GB |
Sony UK |
b04180 |
CM5 |
1.0 |
2GB |
Sony UK |
c04180 |
CM5 |
1.0 |
4GB |
Sony UK |
d04180 |
CM5 |
1.0 |
8GB |
Sony UK |
d04190 |
500 |
1.0 |
8GB |
Sony UK |
b041a0 |
CM5 Lite |
1.0 |
2GB |
Sony UK |
c041a0 |
CM5 Lite |
1.0 |
4GB |
Sony UK |
d041a0 |
使用修订代码进行板识别
从命令行我们可以使用以下内容来获取板的修订代码:
$ cat /proc/cpuinfo | grep Revision
Revision : c03111
在上面的示例中,我们有一个十六进制修订代码 c03111
。将其转换为二进制,我们得到 0 0 0 000 0 0 1 100 0000 0011 00010001
。根据上表,已插入空格以显示修订代码的每个部分之间的边界。
从最低位开始,最下面的四个(0-3)是板修订号,所以这个板的修订号为1。接下来的八个位(4-11)是板类型,在这种情况下是二进制 00010001
,十六进制 11
,所以这是一个树莓派4B。使用相同的过程,我们可以确定处理器是BCM2711,板由索尼英国制造,它有4GB的内存。
在您的程序中获取修订代码
显然有太多的编程语言,不可能给出所有的例子,但是这里有两个关于 C
和 Python
的快速例子。这两个例子都使用系统调用来运行一个bash命令,该命令获取 cpuinfo
并将结果通过管道传输到 awk
以恢复所需的修订代码。然后他们使用位操作从代码中提取 New
、 Model
和 Memory
字段。
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
FILE *fp;
char revcode[32];
fp = popen("cat /proc/cpuinfo | awk '/Revision/ {print $3}'", "r");
if (fp == NULL)
exit(1);
fgets(revcode, sizeof(revcode), fp);
pclose(fp);
int code = strtol(revcode, NULL, 16);
int new = (code >> 23) & 0x1;
int model = (code >> 4) & 0xff;
int mem = (code >> 20) & 0x7;
if (new && model == 0x11 && mem >= 3) // Note, 3 in the mem field is 2GB
printf("We are a 4B with at least 2GB of RAM!\n" );
return 0;
}
在Python中也是如此:
import subprocess
cmd = "cat /proc/cpuinfo | awk '/Revision/ {print $3}'"
revcode = subprocess.check_output(cmd, shell=True)
code = int(revcode, 16)
new = (code >> 23) & 0x1
model = (code >> 4) & 0xff
mem = (code >> 20) & 0x7
if new and model == 0x11 and mem >= 3 : # Note, 3 in the mem field is 2GB
print("We are a 4B with at least 2GB RAM!")
修订代码使用的最佳实践
为避免在创建新的董事会修订时出现问题,请不要使用修订代码(例如 c03111
)。
一个简单的实现使用支持的修订代码列表,将检测到的代码与列表进行比较以确定是否支持设备。 当新的版块版本发布或生产位置发生变化时,这种情况会中断:每个版本都会创建一个不在支持的修订代码列表中的新修订代码。这将导致同一版块类型的新修订被拒绝,尽管它们总是backwards-compatible。每次出现新修订时,您都必须发布一个包含新修订代码的新支持修订代码列表——这是一个繁重的支持负担。
相反,请使用以下方法之一:
-
通过板卡类型字段(3A、4B 等)进行筛选,该字段表示型号,但不表示修订版。
-
根据内存容量字段进行筛选,因为内存与板卡的计算能力大致对应。
例如,您可以限制对具有2GB或更多RAM的Raspberry Pi 4B型号的支持。 上一节中的示例使用这种推荐的方法。
Note
|
在检查任何其他字段之前,始终检查第23位,即’New’标志,以确保修订代码是新版本。 |
跨发行版检查Raspberry Pi型号和CPU
对 /proc/cpuinfo
的支持和格式因Linux发行版而异。要在任何Linux发行版(包括Raspberry Pi OS)上检查Raspberry Pi设备的型号或CPU,请检查设备树:
$ cat /proc/device-tree/compatible | tr '\0' '\n'
raspberrypi,5-model-b
brcm,bcm2712
这将输出两个以空分隔的字符串值,每个值都包含一个以逗号分隔的make和model。例如,Raspberry Pi 5输出上面的板和CPU字符串。这些对应于以下值:
-
raspberrypi
(board make) -
5-model-b
(board model) -
brcm
(CPU make) -
bcm2712
(CPU model)
Raspberry Pi型号具有以下设备树值:
Device Name | Make | Model | CPU Make | CPU |
---|---|---|---|---|
Pi 500 |
|
|
|
|
Compute Module 5 |
|
|
|
|
Raspberry Pi 5 |
|
|
|
|
Pi 400 |
|
|
|
|
Compute Module 4S |
|
|
|
|
Compute Module 4 |
|
|
|
|
Raspberry Pi 4 Model B |
|
|
|
|
Zero 2 W |
|
|
|
|
Compute Module 3+ |
|
|
|
|
Compute Module 3 |
|
|
|
|
Raspberry Pi 3 Model A+ |
|
|
|
|
Raspberry Pi 3 Model B+ |
|
|
|
|
Raspberry Pi 3 Model B |
|
|
|
|
Raspberry Pi 2 Model B |
|
|
|
|
Zero W |
|
|
|
|
Zero |
|
|
|
|
Compute Module 1 |
|
|
|
|
Raspberry Pi Model A+ |
|
|
|
|
Raspberry Pi Model B+ |
|
|
|
|
Raspberry Pi Model B Rev 2 |
|
|
|
|
Raspberry Pi Model A |
|
|
|
|
Raspberry Pi Model B |
|
|
|
|