树莓派硬件篇 一(2025版 约1.5万字)
树莓派论坛编写和整理,转载请注明出处和链接!(约1.5万字) 一、树莓派的分类 发展至今,树莓派有两大类别,一大类是能运行完整Linux系统的系列,另一类是类似PICO这样的微控制系列。下面分别介绍。 A、旗舰系列:受众群体最大最知名的系列,比如树莓派1代、3B+、4B、5等;该系列通常简称为“Raspberry Pi”,提供高性能硬件、完整的 Linux 操作系统,各种常用端口,其外形尺寸大约相当于信用卡大小。 B、Zero系列:以实惠的价格提供完整的Linux操作系统和基本端口,外形尺寸最小,功耗低。 C、Compute Module 系列(简称“CM”): 适用于工业和嵌入式应用的最小外形尺寸,提供高性能硬件和完整的 Linux 操作系统。CM型号与对应旗舰型号相同的硬件性能,但端口较少,并且没有板载 GPIO 引脚。相反,用户应将 Compute Modules 连接到单独的基板,该基板提供给定应用程序所需的端口和引脚。 D、Pico系列:微型多功能微控制器开发板,Pico系列不运行Linux,也不允许使用可移动存储设备;而是程序直接写到板载闪存上,当然你可以对其进行编程,以使它能为您所用。(PICO系列,我们有全面的专门的系列文档,点击这里查看) 二、各型号对比 2.1、旗舰系列 早期分A、B、B+型号,比较明显的区别是B型号有网口,而A型号则没有网口,同时RAM内存小一些,USB端口数量也少一些。到4B开始,随着性能和成本提升到了一定瓶颈,两者的差距也就小了很多,直至4B、5B开始就都只有B型号,没有B+了。 2.2、Zero系列带有H后缀的型号,表示焊接了GPIO排针。没有H的,则表示需要自己动手焊接排针;W具有蓝牙和WIFI功能;所有Zero型号都具有以下继承特性: 1个 microSD 卡插槽,1个Mini-HDMI端口,2×个micro USB端口(1 个用于输入电源,1 个用于外部设备),1个CSI(摄像头)接口。 2.3、PICO系列这个系列有明显差异,单独做了专题,点击这里查看。 2.4、各型号主要参数对比http://shumeipai.net/data/attachment/forum/202408/08/183848majrhgtauet6ubva.png 2.5、各型号图片展示http://shumeipai.net/data/attachment/forum/202408/08/184520ypcyp3nnpmp2czr3.png 2.6、CM计算模块系列(CM系列同样与旗舰系列存在明显差异,单独写了专辑文档,点此查看) 三、原理图与工程图 树莓派 5 机械图纸,PDF Raspberry Pi 5 STEP 文件 Raspberry Pi 4 B 型 原理图,修订版 4.0 机械图纸,PDF 机械图纸,DXF Raspberry Pi 3 型号 B+ 原理图,修订版 1.0 机械图纸,PDF 机械图纸,DXF 案例图纸,PDF Raspberry Pi 3 型号 A+ 原理图,修订版 1.0 机械图纸,PDF 案例图纸,PDF Raspberry Pi 3 B 型 原理图,修订版 1.2 机械图纸,PDF 机械图纸,DXF Raspberry Pi 2 B 型 原理图,修订版 1.2 Raspberry Pi 1 型号 B+ 原理图,修订版 1.2 机械图纸,PDF 机械图纸,DXF Raspberry Pi 1 型号 A+ 原理图,修订版 1.1 (Raspberry Pi 3 Model A+ 的机械图纸也适用于 Raspberry Pi 1 Model A+。) 树莓派 Zero 2 W 原理图 机械图纸,PDF 测试点位 树莓派zero 2W的板上测试点位树莓派ZERO 2W在生产过程中使用了许多测试点位,具体分布及定义如下:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241205/1733353982124056.pnghttp://shumeipai.net/source/plugin/lechen_doc/upload/image/20241205/1733358620125979.png
Raspberry Pi Zero W: 原理图,修订版 1.1 机械图纸,PDF Raspberry Pi Zero: 原理图,修订版 1.3 机械图纸,PDF 案例图纸,PDF - 空白盖子 外壳图纸,PDF - GPIO 盖 案例图纸,PDF - 相机盖 四、商品合规性和安全性 所有 Raspberry Pi 产品都经过了广泛的合规性测试。有关详细信息,请参阅产品信息门户。 4.1、可燃性等级 Raspberry Pi 设备中使用的 PCB 符合 UL94-V0 标准。这仅适用于 PCB。 4.2、Raspberry Pi 合规性支持 合规支持计划旨在消除解决合规问题的负担,并使公司更容易将新产品带给消费者。它提供对在合规性测试期间处理 Raspberry Pi 的相同测试工程师的访问,将用户与 UL 的专门团队联系起来,该团队在他们对 Raspberry Pi 的深入了解下评估和测试用户的产品。 了解有关 Raspberry Pi 合规性支持计划的更多信息。 4.3、官方提供的支持 Powered by Raspberry Pi 计划为希望使用 Raspberry Pi 徽标形式的公司提供了一个流程,涵盖内置 Raspberry Pi 计算机或芯片的产品,以及 Raspberry Pi 提供的服务。如果您想开始申请流程,您可以在线进行。 4.4、认可设计合作伙伴 我们的授权设计合作伙伴名单提供了一系列咨询公司,我们与这些公司密切合作并提供支持,以便他们能够在硬件、软件和机械领域提供付费设计服务。 五、频率管理和热控制 所有Raspberry Pi型号都执行一定程度的热管理,以避免在重负载下过热。SoC有一个内部温度传感器,GPU上的软件会轮询该传感器,以确保温度不超过我们在所有型号上都定义为85°C的限制。可以将其设置的更低,但不能超过它。随着设备接近极限,芯片(Arm、GPU)上使用的各种频率和电压会降低。这减少了产生的热量,使温度得到控制。 当核心温度在80°C至85°C之间时,将逐渐节流。如果温度达到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 Pi3 Model B+相同的PCB技术,以帮助散热。目前没有定义软限制 5.1、DVFS的使用 (注意:对 DVFS 的讨论仅适用于 Raspberry Pi 4 Model B、Raspberry Pi 400 和 Compute Module 4.) Raspberry Pi 4设备实现了动态电压和频率缩放(DVFS)。这项技术允许Raspberry Pi 4设备在较低的温度下运行,同时仍能提供相同的性能。 SoC内的各种时钟(例如Arm、Core、V3D、ISP、H264、HEVC)由固件监控,每当它们不全速运行时,提供给由时钟驱动的芯片特定部分的电压相对于全速的降低而降低。实际上,只提供足够的电压来保持块以特定的速度正确运行。这可以显著降低SoC的功耗,从而减少产生的总热量。 由于运行欠压可能会导致系统稳定性问题,特别是在使用欠压固定时钟外围设备(如PCIe)时,有三种DVFS模式可用,可以在/boot/formance/config.txt中配置以下属性。大多数系统应使用dvfs=3.无头系统可能会受益于dvfs=1的小功率降低,但存在PCIe稳定性问题的风险。http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241205/1733357785682914.png 此外,还使用了更阶梯式的CPU调速器来对ARM内核频率进行更细粒度的控制,这意味着DVFS更有效。现在的步长是1500MHz、1000MHz、750MHz和600MHz。当SoC被节流时,这些步骤也有帮助,这意味着节流回600MHz的可能性要小得多,从而整体提高了满载性能。 默认的CPU调控器是ondemand.。可以使用cpufreq set命令(来自cpufreqtils包)手动更改调速器,以降低空闲功耗:sudo apt install cpufrequtilssudo cpufreq-set -g powersave 5.2、测量温度 由于Raspberry Pi设备上使用的是SoC架构,以及Raspberry PiOS发行版中使用的是上游温度监测代码,所以基于Linux的温度测量可能不准确。不过,vcgencmd命令提供了当前SoC温度的准确和即时读数,因为它直接与GPU通信:vcgencmd measure_temp 5.3、散热器最佳安装方式 由于内置节流,无需散热器来防止 SoC 过热损坏。但是,散热器或小风扇可以减少热节流情况的出现,从而可以获得稳定的高性能运行。同等设备的情况下,垂直安装可以让Raspberry Pi更快散热。 5.4、可调速风扇的使用 为确保树莓派以最佳性能运行,请使用风扇等主动冷却方式。Raspberry Pi固件管理所有官方风扇(或一样的可调速风扇)的速度。 5.4.1、树莓派4官方风扇的使用http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733429731128901.png A、正确接线http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733429754774485.png
B、使用风扇 连接风扇后,默认情况下,只要您的 Raspberry Pi 正在运行,它就会打开。您可以将其配置为仅在 Raspberry Pi 达到您设定的温度时打开。 ①确保使用了最新版本的 Raspberry Pi OS,否则请更新: ②从开始菜单(单击左上角的 Raspberry Pi 图标)或按 Control + Alt + T 打开终端。 ③键入 sudo apt update,在更新完成后,输入 sudo apt full-upgrade。 ④然后打开 Raspberry Pi 配置工具: 单击左上角的 Raspberry Pi 图标,然后选择 Preferences,然后选择 Raspberry Pi Configuration。选择 Performance (性能) 选项卡。在 Fan 旁边,单击 Enabled。 ⑤选择您希望风扇打开的 Fan Temperature (风扇温度)。默认值为 80°C,这是性能节流上限温度,超过这个风扇才打开,这样无需一直打开风扇且不影响性能。官方文档,点此下载查看。 5.4.2、树莓派5风扇的使用http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733430302555540.png 对于Raspberry Pi 5官方风扇有两种,一种如上图的主动冷却器(可调速鼓风机风扇+氧化铝散热器,点此购买),另一种是可调速风扇+外壳(点此购买)。 两款Raspberry Pi 5风扇都插入位于板右上角40针GPIO接头和USB2.0端口之间的四针JST-SH PWM风扇连接针脚。风扇连接针脚的电流限制与USB外围设备相同。我们建议超频箱使用主动冷却器,它提供了更好的冷却性能。 随着Raspberry Pi 5温度的升高,风扇的反应如下: 低于50°C时,风扇根本不旋转(0%速度) 在50°C时,风扇以低速(30%的速度)打开 在60°C时,风扇速度增加到中速(50%速度) 在67.5°C时,风扇速度增加到高速(70%速度) 在75°C时,风扇增加到全速(100%速度) 当温度降至上述每个阈值5°C以下时,风扇速度才会降低。 启动时风扇是打开的,会检查是否要继续启动,根据上述设置而定。 5.5、树莓派5风扇连接器引脚定义 Raspberry Pi 5风扇连接器是一个1mm间距的JST-SH插座,包含以下四个引脚:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733431401911370.png 六、使用 EEPROM 启动系统 6.1、可用EEPROM启动系统的型号 树莓派4B、5,及以后的旗舰型号 CM4以来的计算模块模型(包括CM4S) Pi 400之后的键盘型号 6.2、其他型号的方式其他型号的的 Raspberry Pi 计算机都使用位于引导文件系统中的bootcode.bin文件。 注:您可以在rpi-eeprom GitHub库中找到用于创建的脚本和预编译的二进制文件 rpi eprom。 6.3、诊断 如果在启动过程中发生错误,则将通过绿色LED显示错误代码。较新版本的引导加载程序将在所有HDMI显示器上显示诊断消息。 6.4、更新引导加载程序bootloader **** Hidden Message *****http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733433034592848.png
⑤选择Misc utility imageshttp://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733433064137607.png ⑥为您的 Raspberry Pi 选择Bootloader版本(若您是Pi400请选择4系列)http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733433196140735.png ⑦选择引导模式:SD卡,USB,networkhttp://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733433419795700.png
⑧选择SD卡:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733433519120062.png ⑨点击继续 YES;使用新镜像启动 Raspberry Pi 并等待至少 10 秒;当绿色活动 LED 指示灯稳定闪烁,HDMI 显示屏显示绿屏时,表示您已成功编写引导加载程序;关闭 Raspberry Pi 电源并取出 SD 卡。 6.4.2、通过raspi-config更新引导加载程序: 要在Raspberry Pi OS中更改引导模式或引导加载程序版本,请运行raspi-config: ①更新Raspberry Pi操作系统,以获取最新版本的软件包 rpi-eeprom ②运行 sudo raspi-config ③选择 高级选项 Advanced Options ④选择 引导程序版本 Bootloader Version ⑤选择出厂默认设置,或最新引导加载程序版本,默认后者。 ⑥使用 sudo reboot 重新启动 6.5、更新bootloader配置 引导加载程序的默认版本代表最新的出厂默认固件镜像。它进行更新是为提供关键错误修复、硬件支持,并在最新版本中测试后定期进行更新。 引导加载程序会更频繁地更新,确保包含最新修复和改进。defaultlatestlatest 高级用户可以切换到最新的引导加载程序以获得最新的功能。 运行以下命令以启动raspi-config:sudo raspi-config 如上述6.4.2,导航到“高级选项”,然后导航到“引导加载程序版本”。选择“最新”,然后选择“是”进行确认。选择Finish,并确认要重新启动。重新启动后,再次打开命令提示符并更新系统:sudo apt update 如果您运行sudo rpi eeprom update,您应该看到有更新版本的引导加载程序可用,并且是最新版本:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733434954296058.png现在可以更新您的 bootloader:$ sudo rpi-eeprom-update -a$ sudo reboot 重新启动,然后运行sudo rpi eeprom update。现在,您应该看到当前日期已更新为引导加载程序的最新版本:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733435050136131.png 6.5.1、读取当前的 bootloader 配置 要查看当前正在运行的引导加载程序使用的配置,请运行以下命令: $ rpi-eeprom-config 6.5.2、从 bootloader 镜像中读取配置 要从 bootloader 镜像中读取配置: $ rpi-eeprom-config pieeprom.bin 6.5.3、编辑当前引导加载程序配置 以下命令将当前引导加载程序配置加载到文本编辑器中。当编辑器关闭时,rpi-eeprom-config会将更新的配置应用于最新可用的引导加载程序版本,并在系统重新启动时使用rpi eerom-update来安排更新: sudo -E rpi-eeprom-config --edit sudo reboot 如果更新的配置相同或为空,则不会进行任何更改。 编辑器由editor环境变量选择。 6.5.4、应用已保存的配置 以下命令将boot.conf应用于最新的可用引导加载程序映像,并使用rpi eeprom update在系统重新启动时安排更新。 sudo rpi-eeprom-config --apply boot.conf sudo reboot 6.6、自动更新 rpi eeprom update systemd服务在启动时运行,如果有新镜像可用,则应用更新,自动迁移当前的引导加载程序配置。 ①要禁用自动更新,请执行以下操作: sudo systemctl mask rpi-eeprom-update ②要重新启用自动更新,请执行以下操作: sudo systemctl unmask rpi-eeprom-update 注:如果设置了FREEZE_VERSION引导加载程序配置,则更新服务将跳过任何自动更新。这消除了在安装了多个操作系统或更换SD卡时,无需每次都单独操作禁用该服务。 6.6.1、rpi-eeprom-update Raspberry Pi OS使用rpi-eeprom-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 6.7、Bootloader 版本状态 固件发布状态对应于引导加载程序固件镜像的特定子目录(/lib/formance/raspberrypi/bootloader/…),可以更改以选择不同的发布流。 default-更新了新的硬件支持、关键错误修复以及通过最新版本测试的新功能的定期更新 latest-当新功能可用时更新 由于发布状态字符串只是一个子目录名称,因此可以创建自己的发布流,例如固定发布或自定义网络引导配置。 6.7.1、更改引导加载程序版本 注:您可以通过编辑 /etc/default/rpi-eeprom-update文件并将FIRMWARE_release_STATUS条目更改为相应的流,来更改在更新过程中使用的发布流。 6.7.2、更新引导加载程序镜像文件中的引导加载程序配置 以下命令将pieeprom.bin中的引导加载程序配置替换为boot.conf,并将新映像写入new.bin: rpi-eeprom-config --config boot.conf --out new.bin pieeprom.bin 6.7.3、recovery.bin 开机时,BCM2711和BCM2712上的ROM会在SD卡引导分区的根目录中查找一个名为recovery.bin的文件。如果找到有效的recovery.bin,则ROM会执行此操作,而不是EEPROM的内容。此机制可确保引导加载程序闪存镜像始终可以重置为具有出厂默认设置的有效镜像。 有关更多信息,请参阅EEPROM引导流。 6.7.4、Bootloader 更新文件http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733436766368309.png ①如果Bootloader 更新映像名为pieeprom.upd,则更新完成后,recovery.bin将重命名为recovery.000.然后重新启动系统。由于recovery.bin不再存在,ROM将从SPI闪存加载新更新的Bootloader,操作系统将正常启动。 ②如果Bootloader 更新映像名为pieeprom.bin,则recovery.bin将在更新完成后停止。成功后,HDMI输出将为绿色,绿色活动LED快速闪烁。如果更新失败,HDMI输出将为红色,并通过活动LED显示错误代码。 ③.sig文件包含相应镜像文件的十六进制sha256校验和;将来可能会添加其他字段。 ④BCM2711和BCM2712上的ROM不支持从USB大容量存储或TFTP加载recovery.bin。相反,较新版本的Bootloader 支持自更新机制,引导加载程序能够重新刷新SPI闪存本身。请参阅引导加载程序配置页面上的ENABLE_SELF_UPDATE。 ⑤启动时,rpi-eeprom-update服务会自动删除临时EEPROM更新文件。 有关rpi-eeprom-update配置文件的更多信息,请查看:rpi eprom-update-h 6.7.5、EEPROM写保护 Bootloader和VLI EEPROM都支持硬件写保护。有关如何在刷新eeprom时启用此功能的更多信息,请查看eeprom_write_parotect选项。 七、启动诊断 Raspberry Pi 4或更高版本旗舰机型上的Bootloader可以在启动时,在HDMI显示器上显示诊断信息。要查看此诊断信息,请关闭电源,然后重新通电。这时在您的Raspberry Pi显示器上应该看到类似于以下内容的诊断:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733437592340811.png 如果Bootloader无法从任何引导介质或网络引导启动,也会出现此诊断页面。如果引导介质上没有可引导镜像,或者引导介质有缺陷,或者网络引导参数不正确,都可能发生这种情况。 要在显示诊断页面的同时重新启动,您可以断开电源,然后重新连接电源,或者按住电源按钮(如果您的设备有)。 顶行描述了Raspberry Pi的型号及其内存容量。右上角的二维码是下载页面的链接。 诊断信息如下:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733464043357981.png 要禁用此诊断显示,请使用引导加载程序配置中的disable_HDMI选项。 八、树莓派启动模式 Raspberry Pi有许多不同的启动阶段。本文档解释了引导模式的工作原理,以及Linux引导支持哪些模式。 8.1、特定的bootcode.bin -only启动模式 基于BCM2837的树莓派可以执行USB主机和以太网引导启动,即Raspberry Pi 2B版本1.2、Raspberry Pi 3B和Raspberry Pi 3B+(树莓派3A+无法进行网络引导,因为它没有内置以太网接口)。此外,Raspberry Pi 4之前的所有Raspberry Pi型号都可以使用bootcode.bin方法启用USB主机引导。 注:从Raspberry Pi 4开始,旗舰设备不再使用bootcode.bin文件。相反,这些设备使用位于板载EEPROM芯片中的引导加载程序。有关更多信息,请参阅EEPROM引导流程和SPI引导EEPROM的文档。 将SD卡格式化为FAT32,并复制最新的bootcode.bin。树莓派中必须有SD卡才能启动。从SD卡加载bootcode.bin后,树莓派将继续使用USB主机模式启动。 这对于基于BCM2835和BCM2836芯片的Raspberry Pi 1、2和Zero型号以及Raspberry Pi 3无法启动的情况非常有用(与烧录到BCM2837A0中的启动代码相比,最新的bootcode.bin为Raspberry Pi 3B提供了额外的错误修复)。 如果即使使用此bootcode.bin,大容量存储设备仍然无法工作,那么请在SD卡中添加一个名为“timeout”的新文件。这将延长到等待大容量存储设备初始化的时间为6秒。 8.2、启用bootcode.bin UART 注:适用于Raspberry Pi 4之前发布的版本。 有关使用EEPROM bootloader 启用UART的信息,请参阅 bootloader 配置文档。 可以启用早期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转TTL串口线连接到您的电脑,并连接至Raspberry Pi或计算模块上的标准引脚6、8和10(GND、GPIO14、GPIO15)。 然后使用Linux或macOS上的屏幕,或Windows上的putty连接到串行。 将串行设置为115200-8-N-1,然后启动Raspberry Pi。当bootcode.bin运行时,您应该立即从设备获得串行输出。 具体教程点此查看。http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241206/1733480849390900.jpg 九、USB启动模式 USB有两种单独的启动模式: USB设备启动 USB主机启动 根据OTP位,固件启动时在两种模式之间进行选择。两个bit控制USB的启动模式。第一个为启用USB设备引导,并且是默认;第二个为启用USB主机引导。 如果设置了USB主机引导模式位,处理器将读取OTGID引脚,以决定是作为主机引导(就像在任何 Raspberry Pi Model B/B+ 上一样驱动到零)还是作为设备引导(悬空)。Raspberry Pi Zero可以通过USB连接器访问OTGID引脚;计算模块可以访问边缘连接器上的OTGID引脚。 其他一些OTP位允许某些GPIO引脚选择引导模式。 9.1、USB设备启动模式 注:USB设备引导可在Compute Module系列、Zero系列和旗舰系列中的A型号上使用。 当此启动模式被激活时(通常是在从SD卡启动失败后),Raspberry Pi将其USB端口置于设备模式,并等待主机的USB重置。显示主机如何与Raspberry Pi通信的示例代码可以在Github上找到。 主机首先向设备控制端点 0 发送一个结构体。这包含启动的大小和签名(未启用安全性,因此不需要签名)。其次,代码从端点1(bootcode.bin)向下传输。最后,设备将回复以下代码之一: 0-成功 0x80-故障 9.2、USB主机启动模式 注:从Compute Module 3以来,Compute Module系列、自Zero 2 W以来的Zero系列、Raspberry Pi 2B(1.2版)、Raspberry Pi 3B以及自Raspberry Pi3B+以来的所有旗舰系列设备都可以进行主机引导。Raspberry Pi 3A+支持大容量存储启动,但不支持网络启动。 USB主机引导模式使用以下逻辑: 1、启用USB端口,等待D+线被拉高,表示USB 2.0设备(我们只支持USB2.0) 2、如果设备是集线器: A,为集线器的所有下游端口供电 B,对于每个端口,循环最多两秒(如果已设置program_usb_boot_timeout=1 则循环五秒) ①从重置中释放,等待D+被驱动到高电平,以表示设备已连接 ②如果检测到设备: a,发送“获取设备描述符” 1)、如果VID==SMSC和PID==9500 i、将设备添加到以太网设备列表 b,如果接口是大容量存储类 1)、将设备添加到大容量存储设备列表 3、其他 ……枚举单个设备 4、浏览大容量存储设备列表 ……从大容量存储设备启动 5、浏览以太网设备列表 ……从以太网启动 在Raspberry Pi 3B、3A+和3B+上,默认禁用主机引导。要启用USB主机引导,请在/boot/firmware/config.txt末尾添加一行:program_USB_boot_mode=1 警告 您对OTP所做的任何更改都是永久性的,无法撤消。 在Raspberry Pi 3A+上,将OTP位设置为启用USB主机引导模式,将永久阻止Raspberry Pi在USB设备模式下引导。 9.3、USB大容量存储启动模式 注:从Compute Module 3开始,适用于Compute Module系列,从Zero 2 W开始适用于Zero系列,从Raspberry Pi 2B(1.2版)开始适用于所有旗舰系列设备。 USB大容量存储启动模式,使您能够从USB大容量存储设备(如闪存驱动器或USB磁盘)启动Raspberry Pi。在连接USB设备,特别是硬盘和SSD时,请注意它们的电源要求。连接多个磁盘,通常需要从带电源的磁盘存储模块,或带电源的USB集线器,获得额外的外部电源。 注:Raspberry Pi 4B之前的型号存在已知的问题,这些问题会阻止使用某些USB设备启动。 9.3.1、带有EEPROM bootloader的设备 Raspberry Pi 4及最新的旗舰系列型号,以及CM系列设备,因为计算模块4和4S默认支持USB引导,只要您在boot_ORDER配置中指定USB启动即可。 注:Raspberry Pi 4的早期版本可能需要更新引导加载程序才能从USB启动。 注:计算模块4的早期版本可能需要更新引导加载程序才能从USB引导。 9.3.2、树莓派3B+ Raspberry Pi 3B+支持USB大容量存储模式启动,开箱即用。 9.3.3.、树莓派2B、3A+、3B、CM3、CM3+、Zero 2 W 在Raspberry Pi 2B v1.2、3A+、3B、Zero 2 W以及计算模块3和3+上,您必须先要启用USB主机引导模式,这允许USB大容量存储启动和网络启动。 注:Raspberry Pi 3A+和Zero 2 W不支持网络启动。 要在这些设备上启用USB主机引导模式,请在OTP(一次性可编程)存储器中设置USB主机位。要设置该位,请从SD卡启动,其中/boot/formance/config.txt 包含行program_usb_boot_mode=1,设置后,您可以在没有SD卡的情况下从USB启动。 9.3.3.1、使用OTP启用USB主机启动模式 警告:您对OTP(一次性可编程)内存所做的任何更改都是永久性的,无法撤消。在Raspberry Pi 3A+上,将OTP位设置为启用USB主机引导模式,将永久阻止Raspberry Pi在USB设备模式下引导。 使用Raspberry Pi OS的任何SD卡对OTP位进行编程。 要启用USB主机启动模式,请在config.txt中添加一行以下内容:program_usb_boot_mode=1 然后,使用sudo reboot 重启树莓派。要检查OTP是否已正确编程,请运行以下命令: vcgencmd otp_dump | grep 17: 17:3020000a 如果输出读数为0x3020000a,则OTP已成功编程。如果看到不同的输出,请重试编程过程。确保config.txt末尾没有空行。 现在,您可以从USB大容量存储设备启动,方式与从SD卡启动相同。有关更多信息,请参阅以下部分。 9.4、从USB大容量存储启动 将系统写入到USB大容量存储设备里面,这个过程与安装系统到SD卡一样,点此查看。 之后,插入树莓派,并通电启动,同时注意这个USB存储设备的电源要求。 5到10秒后,Raspberry Pi应该开始启动,并在连接的显示器上显示彩虹画面。另外,树莓派此时不要插入TF卡,你这样做它将首先从TF卡启动。 有关引导顺序和其他引导模式(网络、USB设备、GPIO或SD引导),请参阅引导模式文档。 9.5、已知问题 检查可引导USB设备的默认超时为2秒。一些闪存驱动器和硬盘的开机速度太慢,会导致超过2秒,从而失败。可以将此超时延长到五秒(在SD卡中添加一个新的文件timeout),但请注意,有些设备需要更长的时间才能响应。 一些闪存驱动器具有非常特定的协议要求,引导代码无法处理,因此可能不兼容。 9.6、特殊的bootcode.bin-only启动模式 在Raspberry Pi 2B v1.2、3A+、3B和3B+上,如果您无法使用特定的USB设备启动Raspberry Pi,则可以使用bootcode.bin-only启动模式。Raspberry Pi仍将从SD卡启动,但仅从SD卡读取bootcode.bin;操作系统的其余部分位于USB设备上。 9.7、硬件兼容性 从USB大容量存储设备启动之前,请验证该设备在Linux下是否正常工作。使用SD卡启动并插入USB大容量存储设备,应该显示为可移动驱动器。这对于USB SATA适配器尤为重要,在大容量存储模式下,引导加载程序可能支持USB SATA适配器,但如果Linux选择USB连接的SCSI-UAS模式,则会失败。 硬盘驱动器(HDD)通常需要一个带电源的USB集线器。即使一切正常,如果没有通电的USB集线器,您也可能会遇到间歇性故障。 9.8、多个可引导驱动器 在搜索可引导分区时,bootloader 会并行扫描所有USB大容量存储设备,并选择第一个进行响应。如果引导分区不包含合适的start.elf文件,bootloader 将尝试下一个可用设备。没有根据USB拓扑指定引导设备的方法;这将减慢启动速度,并增加不必要的配置复杂性。 注:使用config.txt文件条件过滤器在复杂的设备配置中选择备用固件。 十、网络启动 本节介绍网络启动在Raspberry Pi 3B、3B+和2B v1.2上的工作原理。 在Pi 4和Pi 5上,网络启动是在EEPROM中的第二级引导加载程序中实现的。有关更多信息,请参阅 Raspberry Pi bootloader 配置。 我们还有一个关于设置网络引导系统的教程,点此查看。 网络引导仅适用于上述Raspberry Pi型号中内置的有线适配器。不支持通过无线LAN启动,也不支持从任何其他有线网络设备启动。 10.1、网络引导流程 要进行网络启动,引导ROM会执行以下操作: * 初始化板载以太网设备(Microchip LAN9500或LAN7500) * 发送DHCP请求(供应商类标识符DHCP选项60设置为PXEClient:Arch:00000:UNDI:002001) * 接收DHCP回复 * (可选)接收DHCP代理回复 * ARP到tftpboot服务器 * ARP应答包括tftpboot服务器以太网地址 * TFTP RRQ bootcode.bin A、找不到文件:服务器回复TFTP错误响应,并显示文本错误消息 B、文件已存在:服务器将回复文件的第一个数据块(512字节),并在标头中包含块号 —— Raspberry Pi用包含块号的TFTP ACK数据包进行回复,并重复直到最后一个不是512字节的块。 * TFTP RRQ bootsig.bin A、这通常会导致找不到文件(file not found)的错误。这是意料之中的,TFTP引导服务器应该能够处理它。 从这一点开始,bootcode.bin代码将继续加载系统。它将尝试访问的第一个文件是/start.elf。如果这不会导致错误,则要读取的任何其他文件都将以serial_number作为前缀。这很有用,因为它使您能够为Raspberry Pi创建具有单独start.elf/kernes的独立目录。 要获取设备的序列号,您可以尝试此启动模式,并使用tcpdump/wireshark查看访问的文件,也可以运行标准的Raspberry Pi OS SD卡和cat/proc/cpuinfo。 如果将所有文件放在TFTP目录的根目录中,则将从那里访问所有后续文件。 10.2、调试网络启动模式 首先要检查的是OTP位是否编程正确。为此,您需要将program_usb_boot_mode=1添加到config.txt,并重新启动(使用正确引导到Raspberry Pi操作系统的标准SD卡)。一旦你做到了这一点,你应该能够做到:vcgencmd otp_dump | grep 17: 如果第17行包含3020000a,则OTP已正确编程。现在,您应该能取下TF卡,插入网线,然后在Raspberry Pi通电后约5秒,以太网LED应该会亮起。 要捕获服务器上的以太网数据包,请在tftpboot服务器(或DHCP服务器,如果它们不同)上使用tcpdump。您需要在那里捕获数据包,否则您将无法看到直接发送的数据包,因为网络交换机不是集线器! sudo tcpdump-i eth0-w dump.pcap 这将把从eth0到名为dump.pcap的文件中的所有内容写入。然后,您可以将数据包进行后处理或上传到cloudshark进行通信。 10.3、DHCP请求/应答 作为最低要求,您应该看到一个DHCP请求和回复,如下所示:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241207/1733505019114085.png Vendor-Option Option 43包含回复的重要部分。这必须包含字符串“Raspberry Pi Boot”。由于启动ROM中的错误,您可能需要在字符串末尾添加三个空格。 10.4、TFTP文件读取 正确指定Vendor选项后,您将看到随后发送的TFTP RRQ数据包。RRQ可以通过第一个数据块或表示找不到文件的错误来回复。在某些情况下,它们甚至会收到第一个数据包,然后Raspberry Pi会中止传输(这是在检查文件是否存在时发生的)。下面的例子只是三个数据包:原始读取请求、第一个数据块(它总是516个字节,包含一个报头和512个字节的数据,尽管最后一个数据块总是小于512个字节,长度可能为零)和第三个数据包包含一个与数据块中的帧号匹配的帧号的ACK。http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241207/1733505363133850.png 10.5、已知问题 以太网启动模式存在许多已知问题。由于引导模式的实现在芯片本身中,因此除了使用仅包含bootcode.bin文件的SD卡外,没有其他解决方法。 *DHCP请求在五次尝试后超时 Raspberry Pi将尝试五次DHCP请求,中间间隔五秒,总时长为25秒。如果服务器在此时间内无法响应,则Raspberry Pi将进入低功耗状态。除了SD卡上的bootcode.bin之外,没有其他解决方法。 *不支持单独子网上的TFTP服务器 修复了Raspberry Pi 3 B+(BCM2837B0)中的问题。 *DHCP中继中断 DHCP检查还检查了跃点数是否为1.而DHCP中继则不会。 修复了Raspberry Pi 3 B+型号的问题。 *Raspberry Pi启动字符串 由于计算字符串长度时出错,DHCP回复中的“Raspberry Pi Boot”字符串需要额外的三个空格。 修复了Raspberry Pi 3 B+型号的问题。 *DHCP UUID常量 DHCP UUID设置为常数值。 修复了Raspberry Pi 3 B+型号的问题;该值被设置为32位序列号。 *ARP检查可能在TFTP事务的中间无法响应 Raspberry Pi只有在初始化阶段才会响应ARP请求;一旦开始传输数据,它将无法继续响应。 修复了Raspberry Pi 3 B+型号的问题。 *DHCP请求/应答/ack序列未正确实现 在启动时,Raspberry Pi会广播DHCPDISCOVER数据包。DHCP服务器用DHCPOFFER数据包进行回复。然后,Raspberry Pi继续启动,而不进行DHCPREQUEST或等待DHCPACK。这可能会导致两个单独的设备被提供相同的IP地址,并在没有正确分配给客户端的情况下使用它。 在这种情况下,不同的DHCP服务器具有不同的行为。dnsmasq(取决于设置)将散列MAC地址以确定IP地址,并ping IP地址以确保它尚未被使用。这降低了发生这种情况的可能性,因为它需要哈希中的冲突。 十一、GPIO启动模式 注:GPIO引导模式仅适用于Raspberry Pi 3A+、3B、3B+、计算模块3和3+。 早期的Raspberry Pi可以配置为允许在通电时使用连接到GPIO来选择启动模式。这是通过在SoC的OTP存储器中设置位来实现的。一旦设置了位,它们就会永久分配5个GPIO来允许进行此选择。一旦设置了OTP位,就不能取消设置。您应该仔细考虑是否启用此功能,因为这五条GPIO线将始终控制启动。虽然您可以在Raspberry Pi启动后将GPIO用于其他功能,但您必须对其进行设置,以便在Raspberry Pi启动时启用所需的启动模式。 要启用GPIO引导模式,请在config.txt文件中添加以下行: program_gpio_bootmode=n 其中n是您要使用的GPIO库。然后重新启动Raspberry Pi一次,使用此设置对OTP进行编程。Bank 1是GPIO 22-26,Bank 2是GPIO 39-43。除非您是计算模块,否则必须使用Bank 1;Bank 2中的GPIO仅在计算模块上可用。由于OTP位的排列方式,如果您首先为Bank 1编程GPIO启动模式,则可以稍后选择Bank 2,反之则不然;一旦选择Bank 2作为GPIO启动模式,您就无法选择Bank 1。 一旦启用GPIO引导模式,树莓派将无法启动。您必须至少拉高一个引导模式的GPIO引脚,树莓派才能启动。 11.1、树莓派3B和计算模块3,引脚分配http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241207/1733527375346491.png 上表中的USB同时选择USB设备引导模式和USB主机引导模式。为了使用USB引导模式,必须在OTP存储器中启用它。有关更多信息,请参阅上文中的第9.1和9.2条:USB设备引导和USB主机引导。 11.2、其他后来的树莓派3B(BCM2837B0带金属盖)、3A+、3B+ 和 CM 3+,引脚分配:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241207/1733527839126001.png 注:按照 GPIO 线路的数字顺序尝试各种引导模式,即 先SD0,然后 SD1,然后是 NAND,依此类推。
11.3、开机流程 SD0是Broadcom SD卡/MMC接口。当SoC内的引导ROM运行时,它总是将SD0连接到内置的microSD卡插槽。在配备eMMC设备的计算模块上,SD0与之相连;计算模块Lite SD0可在边缘连接器上使用,并连接到CMIO载板中的microSD卡插槽。SD1是Arasan SD卡/MMC接口,也支持SDIO。所有内置无线局域网的Raspberry Pi型号都使用SD1通过SDIO连接到无线芯片。 GPIO的默认拉电阻为50KΩ,如BCM2835 ARM外设数据表第102页所述。建议使用5KΩ的拉电阻来向上拉GPIO线:这将允许GPIO工作,但不会消耗太多功率。 十二、NVMe SSD启动 NVMe(Non-Volatile Memory express,即非易失性存储器快速通道)是通过PCIe总线进行外部存储访问的标准。您可以通过计算模块4(CM4)IO板或Raspberry Pi 5上的PCIe插槽连接NVMe。通过一些额外的配置,您可以从NVMe驱动器启动树莓派。 12.1、先决条件 ①、硬件:
[*]NVMe M.2固态硬盘
[*]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 Mar9 14:58 /dev/nvme0brw-rw---- 1 root disk 259. 0 Mar9 14:58 /dev/nvme0n1 ②、软件: 运行以下命令查看正在运行的固件: sudo rpi-eeprom-update 对于Raspberry Pi 5 您需要2023年12月6日或以后发布的固件。 对于CM4 NVMe引导支持于2021年7月推出。您需要自该日期起发布的以下软件的版本:bootloaderVideo Core固件Raspberry Pi OS Linux内核 最新的Raspberry Pi OS版本具备您所需的一切。使用Raspberry Pi Imager将Raspberry PiOS镜像安装到您的存储器上。 12.2、编辑EEPROM启动顺序 对于Raspberry Pi 5,您需要先启动它来编辑启动顺序。在此步骤中,您可以从SD卡或USB驱动器启动树莓派。即使更改了启动设备,EEPROM配置也会不变,因为EEPROM配置存储在树莓派板子上。 使用Raspberry Pi配置CLI更新bootloader: sudo raspi-config 在“高级选项 Advanced Options ”>“引导加载程序版本 Bootloader Version”下,选择“最新 Latest”。然后,使用Finish或Esc键退出raspi-cofing。 运行以下命令将固件更新到最新版本: sudo rpi-eeprom-update -a 然后,使用sudo reboot 重新启动。您的Raspberry Pi 5就应该能从NVMe启动。 对于CM4,使用rpiboot更新bootloader。构建rpiboot和配置IO板,以使ROM切换到usbboot模式的说明,您可以在 USB启动GitHub 中找到。 对于带有eMMC的CM4版本,请确保在引导顺序中首先设置了NVMe。记得在recovery/boot.conf中将NVMe引导模式6添加到boot_ORDER。 当SD卡插槽为空时,CM4 Lite会自动从NVMe启动。 12.3、NVMe BOOT_ORDER EEPROM配置中的BOOT_ORDER设置控制启动行为。对于NVMe引导,请使用引导模式6,有关更多信息,请参阅Raspberry Pi bootloader 配置。 12.4、举例 以下是bootloader检测到NVMe驱动器时UART输出的示例:http://shumeipai.net/source/plugin/lechen_doc/upload/image/20241207/1733530726679127.png 然后它将找到一个 FAT 分区并加载:start4.elfRead start4.elf bytes2937840 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 在Linux中,SSD显示为/dev/nvme0,“namespace”显示为/dev/nvme0n1。将有两个分区 /dev/nvme0n1p1(FAT) 和 /dev/nvme0n1p2 (EXT4)。使用lsblk检查分区分配: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 232.9G0 disk ├─nvme0n1p1 259:1 0 256M0 part /boot/firmware └─nvme0n1p2 259:2 0 232.6G0 part / 12.5、故障排除 如果启动过程失败,请在 rpi eeprom GitHub 中提交问题,确保在启动过程中附上控制台副本和屏幕上显示的任何内容。
页:
[1]