启动顺序
以下启动顺序仅适用于基于 BCM2837 和 BCM2837B0 的树莓派型号。在此之前的型号上,Pi会尝试SD卡启动,然后尝试USB设备模式启动。有关 RaspberryPi4 的启动顺序,请参见this页面
树莓派 3的 USB 启动默认值取决于所使用的版本。有关在默认情况下未启用时启用 USB 引导模式的信息,请参见此页(./msd.md)。
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(Pi 1或 Pi 2)或 0x2764 (Pi 3)答复 PC
笔记:
如果未插入 SD 卡,则 SD 引导模式需要五秒钟才能失败。为了减少这种情况并更快地退回 USB ,可以插入上面没有任何东西的 SD 卡,也可以使用上述的 GPIO 引导模式 OTP 设置仅启用 USB 。 * GPIO的默认上拉定义在ARM外设数据表的第 102 页上。如果启动时的值不等于默认值,则启用该启动模式。 * USB枚举是一种为集线器上的下游设备供电,然后等待设备拉出 D +和 D -线以指示它是 USB 1还是 USB 2的一种方法。这可能需要一些时间:在某些设备上硬盘驱动器启动并启动枚举过程最多可能需要三秒钟。因为这是检测已连接硬件的唯一方法,所以我们必须等待最短的时间(两秒钟)。如果设备在此最大超时后仍未响应,则可以使用 config .txt中的" program_usb_boot_timeout = 1"将超时增加到五秒钟。 * MSD引导优先于以太网引导。 第一个分区不再是 FAT 分区,因为 MSD 引导将继续搜索第一个分区以外的 FAT 分区。 引导 ROM 现在还支持 GUID 分区,并且已经过使用 Mac ,Windows和 Linux 进行分区的硬盘驱动器的测试。 使用供应商 ID 0x0424和产品 ID 0xec00检测到 LAN951x :这与独立的 LAN9500 设备不同,后者的产品 ID 为 0x9500 或 0x9e00 。要使用独立的 LAN9500 ,将需要添加 I2C EEPROM来更改这些 ID 以匹配 LAN951x 。
标准情况下,主 SD 卡引导模式设置为 GPIO 49-53。可以从第二组针脚上的辅助 SD 卡引导,即将辅助 SD 卡添加到 GPIO 针脚。但是,我们尚未启用此功能。
尽管 NAND 引导和 SPI 引导模式尚未完全支持 GPU ,但它们确实可以工作。
USB设备引导模式在制造时默认为启用,但是 USB 主机引导模式仅在" program_usb_boot_mode = 1"下启用。一旦启用,处理器将使用处理器上 OTGID 引脚的值来决定两种模式。在树莓派 B型上,OTGID引脚被驱动为'0',因此,一旦启用,它将仅通过主机模式启动(由于 LAN9515 设备在旁边,因此无法通过设备模式启动)。如果 OTGID 引脚悬空(例如,插入 PC 时),则 USB 将作为 Pi 零位或计算模块上的 USB 设备启动,因此您可以将 bootcode .bin注入设备中。这样做的代码是usbboot。