安泰电子世界网 首页 Ardunio Compute Module硬件

Compute Module硬件

2024-11-5 16:34 | 发布者: txc | 查看: 79 | 评论: 0

简介:Compute Module硬件

数据表和原理图

Compute Module 4

Compute Module的最新版本是Compute Module 4 (CM4)。它是所有当前和未来开发的推荐Compute Module。

注意原理图不适用于Compute Module 4,但可用于 IO 板。CMIO4板的原理图包含在数据表中。

还有一个 KiCad PCB 设计套件可用:

配置Compute Module 4
Raspberry Pi Compute Module 4 (CM 4) 提供多种不同的硬件配置。有时,当不需要这些功能时,可能需要禁用它们中的某些功能。
本文档介绍如何在硬件和软件中禁用各种硬件接口,以及如何减少Linux操作系统(OS)使用的内存量。

较旧的产品

Raspberry Pi CM1、CM3 和 CM3L 是受支持的产品,生命周期终止 (EOL) 日期不早于 2026 年 1 月。Compute Module 3+ 提供改进的散热性能和更广泛的闪存选项。

Raspberry Pi CM3+ 和 CM3+ Lite 是受支持的产品,生命周期终止 (EOL) 日期不早于 2028 年 1 月。

Compute Module 1、3 和 3L 的原理图:

Compute Module IO 板 (CMIO) 原理图:

Compute Module相机/显示适配器板 (CMCDA) 的原理图:

从 CM3 过渡到 CM4
本白皮书适用于希望从使用 Raspberry Pi Compute Module (CM) 1 或 3 迁移到 Raspberry Pi CM 4 的用户。
从软件的角度来看,从Raspberry Pi CM 1/3到Raspberry Pi CM 4的转变相对轻松,因为Raspberry Pi OS应该可以在所有平台上运行。

欠压检测

欠压检测电路原理图,用于旧型号的 Raspberry Pi:

CMIO板的设计文件

用于 CM4 的Compute ModuleIO 板

Compute Module 4 IO 板的设计数据可在其数据表中找到:

还有一个 KiCad PCB 设计套件可用:

较旧的产品

Compute Module摄像头/显示适配器板 (CMCDA) 的设计数据:

刷新Compute Module eMMC

使用Compute Module置备程序
CM Provisioner 是一个 Web 应用程序,旨在使大量 Raspberry Pi Compute Module (CM) 设备的编程变得更加容易和快捷。它安装简单,使用简单。
它提供了一个可以上传的内核映像数据库的接口,以及使用脚本在刷机过程中自定义安装各个部分的能力。还支持标签打印和固件更新。
Compute Module具有连接到主 SD 卡接口的板载 eMMC 设备。本指南介绍如何使用Compute Module IO 板将数据写入 eMMC 存储。
另请阅读Compute Module数据表中的部分。
重要:对于 CM3、CM3+ 和 CM4 的批量配置,建议使用 Raspberry Pi Compute Module配置系统

刷新 eMMC 的步骤

要刷新Compute Module eMMC,您需要 Linux 系统(建议使用 Raspberry Pi,或 PC 上的 Ubuntu)或 Windows 系统(建议使用 Windows 10)。对于 BCM2837 (CM3),已修复影响 Mac 的错误,因此这也有效。

注意BCM2835 (CM1) 引导加载程序中存在一个错误,该错误会向主机返回略微不正确的 USB 数据包。大多数 USB 主机似乎忽略了这个良性错误并且工作正常;但是,我们确实看到一些USB端口由于此错误而无法正常工作。我们不太明白为什么某些端口会失败,因为它似乎与它们是 USB2 还是 USB3 无关(我们已经看到这两种类型都有效),但它可能特定于主机控制器和驱动程序。此错误已在 BCM2837 年修复。

设置CMIO板

Compute Module4

确保Compute Module正确安装在 IO 板上。它应该平放在 IO 板上。

  • 确保 IO 板跳线上的 J2(禁用 eMMC Boot)上的nRPI_BOOT已安装

  • 使用微型 USB 电缆将 IO 板上的微型 USB 从端口 J11 连接到主机设备

  • 不要通电。

Compute Module 1 和 3

确保Compute Module本身已正确安装在 IO 板上。它应该与电路板平行,接合夹卡入到位。

  • 确保 J4 (USB SLAVE BOOT ENABLE) 设置为“EN”位置

  • 使用微型 USB 电缆将 IO 板上的微型 USB 从端口 J15 连接到主机设备

  • 不要通电

对于 Windows 用户

在 Windows 下,安装程序可用于自动安装所需的驱动程序和启动工具。或者,用户可以使用Cygwin编译和运行它和/或手动安装驱动程序。

Windows 安装程序

对于那些只想在 Windows 下将Compute Module eMMC 启用为大容量存储设备的用户,建议使用独立安装程序。此安装程序已在 Windows 10 64 位上进行了测试。
请确保在安装程序运行时没有写入任何 USB 设备。

  • 下载并运行 Windows 安装程序以安装驱动程序和启动工具

  • 将主机 PC USB 插入 USB 从端口,确保您已按上述方式设置主板

  • 给电路板通电;Windows 现在应该找到硬件并安装驱动程序

  • 驱动程序安装完成后,运行之前安装的RPiBoot.exe工具

  • 几秒钟后,Compute Module eMMC 将作为磁盘(USB 大容量存储设备)在 Windows 下弹出

在主机系统上构建 rpiboot。

GitHub 上的USB 启动自述文件中记录了有关构建和运行最新版本的 rpiboot 的说明。

写入 eMMC (Windows)

rpiboot 完成后,Windows 中将出现一个新的 USB 大容量存储驱动器。我们建议使用 Raspberry Pi Imager 将映像写入驱动器。
确保 J4 (USB SLAVE BOOT ENABLE)/J2 (nRPI_BOOT) 设置为禁用位置和/或未将任何内容插入 USB 从站端口。重启 IO 板现在应导致Compute Module从 eMMC 启动。

写入 eMMC (Linux)

rpiboot 完成后,您将看到一个新设备出现;这通常是 Raspberry Pi 上的 /dev/sda,但它可能在另一个位置,例如 /dev/sdb,因此在运行 rpiboot 之前检查 /dev/ 或运行 lsblk,以便您可以看到哪些更改。
现在需要将原始操作系统映像(例如 Raspberry Pi OS)写入设备。请注意,以下命令可能需要一些时间才能完成,具体取决于映像的大小(将 /dev/sdX 更改为相应的设备):

sudo dd if=raw_os_image_of_your_choice.img of=/dev/sdX bs=4MiB

写入映像后,拔下并重新插入 USB;您应该会在 /dev 中看到两个分区(对于 Raspberry Pi OS)。总的来说,您应该看到类似于以下内容的内容:

/dev/sdX    <- Device
/dev/sdX1   <- First partition (FAT)
/dev/sdX2   <- Second partition (Linux filesystem)

/dev/sdX1 和 /dev/sdX2 分区现在可以正常挂载了。
确保 J4 (USB FROM BOOT ENABLE)/J2 (nRPI_BOOT) 设置为禁用位置和/或未将任何内容插入 USB 从站端口。重启 IO 板现在应导致Compute Module从 eMMC 启动。

Compute Module 4 引导加载程序

CM4 上的默认引导加载程序配置旨在支持Compute Module4 IO 板上启动和开发,并且制造时闪存的软件版本可能早于最新版本。对于最终产品,请考虑:

  • 选择并验证特定的引导加载程序版本。usbboot 存储库中的版本始终是最近的稳定版本。

  • 配置引导设备(例如网络引导)。请参阅引导加载程序配置指南中的BOOT_ORDER部分。

  • 在引导加载程序 EEPROM 上启用硬件写保护,以确保无法在无法访问的产品(例如远程或嵌入式设备)上修改引导加载程序。

注意:Compute Module 4 ROM 从不从 SD/EMMC 运行recovery.bin,并且默认情况下不启用 rpi-eeprom-update 服务。这是必要的,因为 EMMC 不可移动,无效的 recovery.bin 文件会阻止系统启动。这可以被覆盖并用于自更新模式,在这种模式下,引导加载程序可以从 USB MSD 或网络启动进行更新。但是,自更新模式不是原子更新,因此在更新EEPROM时发生电源故障时是不安全的。

刷新 SD 卡以外的存储设备

基于 Linux 的大容量存储小工具支持 NVMe、EMMC 和 USB 块设备的刷新。这通常比使用 rpiboot 固件驱动程序更快,并且还为设备提供了一个 UART 控制台,以便于调试。
另请参阅:CM4 rpiboot 扩展

修改引导加载程序配置

要修改 CM4 引导加载程序配置:

  • 导航到 usbboot/recovery 目录

  • 如果需要特定的引导加载程序版本,请替换 pieeprom.original.bin

  • 编辑默认的 boot.conf 引导加载程序配置文件;通常,至少必须更新BOOT_ORDER:

    • 对于网络引导,请使用 BOOT_ORDER=0xf2

    • 对于 SD/EMMC 启动,请使用BOOT_ORDER=0xf1

    • 对于 USB 启动故障转移到 EMMC,请使用BOOT_ORDER=0xf15

  • 运行 ./update-pieeprom.sh 更新 EEPROM 镜像pieeprom.bin镜像文件

  • 如果需要EEPROM写保护,请编辑config.txt并添加eeprom_write_protect=1。硬件写保护必须通过软件启用,然后通过将EEPROM_nWP引脚拉低来锁定

  • 运行../rpiboot -d 以使用更新的EEPROM图像pieeprombin更新引导程序

pieeprom.bin文件现在已准备好刷写到Compute Module 4。

刷新引导加载程序 EEPROM - Compute Module 4

要刷新引导加载程序 EEPROM,请遵循与刷新 EMMC 相同的硬件设置,但还要确保EEPROM_nWP不会被拉低。一旦完成,EEPROM_nWP可能会再次被拉低。

# Writes recovery/pieeprom.bin to the bootloader EEPROM.
./rpiboot -d recovery

故障排除

对于一小部分 Raspberry Pi Compute Module 3,已报告启动问题。我们已经将这些追溯到用于创建 FAT32 分区的方法;我们认为该问题是由于 BCM2835/6/7 和较新的 eMMC 设备之间的时序差异造成的。以下创建分区的方法在我们手中是一个可靠的解决方案。

sudo parted /dev/
(parted) mkpart primary fat32 4MiB 64MiB
(parted) q
sudo mkfs.vfat -F32 /dev/
sudo cp -r /* 

连接和启用外围设备

本指南旨在帮助使用Compute Module的开发人员掌握如何将外设连接到计Compute Module引脚,以及如何对软件进行更改以使这些外设正常工作。
Compute Module将 Raspberry Pi 系统搭载在芯片 (SoC) 或处理器上(BCM2835 用于 CM1,BCM2837 用于 CM3,BCM2711 用于 CM4)以及内存和 eMMC。eMMC类似于SD卡,但焊接在电路板上。与 SD 卡不同,eMMC 专门设计用作磁盘,并具有额外的功能,使其在此用例中更加可靠。SoC 的大多数引脚(GPIO、两个 CSI 摄像头接口、两个 DSI 显示接口、HDMI 等)都可用,并且可以根据用户认为合适的方式进行连接(或者,如果未使用,通常可以保持未连接状态)。Compute Module是兼容 DDR2 SODIMM 外形的模块,因此应该可以使用任何 DDR2 SODIMM 插槽。

注意引脚排列与实际的SODIMM内存模块不同。

要使用Compute Module,用户需要设计一个(相对简单的)主板,该主板可以为Compute Module供电(至少 3.3V 和 1.8V),并将引脚连接到用户应用程序所需的外围设备。
Raspberry Pi 为原型设计提供了一个最小的Compute Module主板(称为Compute Module IO 板或 CMIO 板),它为模块供电,将 GPIO 引脚接头引出,并将相机和显示接口引出到 FFC 连接器。它还提供 HDMI、USB 和“ACT”LED,以及通过 PC 或 Raspberry Pi 的 USB 对模块的 eMMC 进行编程的能力。
本指南首先介绍启动过程以及如何使用设备树来描述连接的硬件。这些是使用Compute Module进行设计时需要了解的基本事项。然后,它提供了一个工作示例,将 I2C 和 SPI 外设连接到 CMIO(或用于 CM3 的 CMIO V3)板,并创建使这两个外设在 Linux 下工作所需的设备树文件,从 vanilla Raspberry Pi OS 映像开始。

BCM283x GPIO系列

BCM283x 具有三组通用输入/输出 (GPIO) 引脚:组 0 上有 28 个引脚,组 1 上有 18 个引脚,组 2 上有 8 个引脚,总共有 54 个引脚。这些引脚可以用作真正的GPIO引脚,即软件可以将它们设置为输入或输出,读取和/或设置状态,并将它们用作中断。它们还可以设置为“替代功能”,例如 I2C、SPI、I2S、UART、SD 卡等。
在Compute Module上,组 0 和组 1 都可以免费使用。组 2 用于 eMMC 和 HDMI 热插拔检测以及 ACT LED/USB 启动控制。
在正在运行的系统上,查看每个GPIO引脚的状态(它们设置为什么功能,以及引脚的电压电平)很有用,这样您就可以查看系统是否按预期设置。如果您想查看设备树是否按预期工作,或者在硬件调试期间查看引脚状态,这将特别有用。
Raspberry Pi 提供了 pinctrl 包,这是一个用于破解和调试 GPIO 的工具。

BCM283x 启动过程

BCM283x 器件由 VideoCore GPU 和 Arm CPU 内核组成。GPU 实际上是一个由 DSP 处理器和硬件加速器组成的系统,用于成像、视频编码和解码、3D 图形和图像合成。
在 BCM283x 设备中,首先启动的是 GPU 中的 DSP 内核。它负责在启动主 Arm 处理器之前进行一般设置和内务处理。
Raspberry Pi 和 Compute Module 主板上使用的 BCM283x 设备具有三阶段启动过程:

  • GPU DSP 从复位中出来,并从小型内部 ROM(引导 ROM)执行代码。此代码的唯一目的是通过其中一个外部接口加载第二阶段引导加载程序。在 Raspberry Pi 或Compute Module上,此代码首先在 SD 卡 (eMMC) 上查找第二阶段引导加载程序;它希望它被调用bootcode.bin并位于第一个分区(必须是 FAT32)上。如果未找到 SD 卡或未找到bootcode.bin,则引导 ROM 将处于 USB 引导模式并等待,等待主机通过 USB 接口为其提供第二阶段引导加载程序。

  • 第二阶段引导加载程序(bootcode.bin SD 卡或 USB 启动usbbootcode.bin)负责设置 LPDDR2 SDRAM 接口和各种其他关键系统功能,然后加载和执行主 GPU 固件(称为 start.elf,同样在主 SD 卡分区上)。

  • start.elf 接管并负责进一步的系统设置和启动 Arm 处理器子系统,并包含在 GPU 各个部分上运行的固件。它首先读取dt-blob.bin以确定初始 GPIO 引脚状态以及特定于 GPU 的接口和时钟,然后解析config.txt。然后,在启动 ARM 子系统并将设备树数据传递到启动的 Linux 内核之前,它会加载 Arm 设备树文件(例如,Compute Module1 的 bcm2708-rpi-cm.dtb)和 config.txt 中指定的任何设备树覆盖。

设备树

设备树是一种特殊方式,用于对有关连接到系统的硬件(以及所需的驱动程序)的所有信息进行编码。
在 Raspberry Pi 或Compute Module上,SD/eMMC 的第一个 FAT 分区中有多个文件是二进制设备树文件。这些二进制文件(通常扩展名为.dtb)是由设备树编译器从人类可读的文本描述(通常扩展名为.dts的文件)编译的。
在第一个 (FAT) 分区中的标准 Raspberry Pi OS 映像上,您会发现两种不同类型的设备树文件。一个仅供 GPU 使用,其余是每个基于 BCM283x 的 Raspberry Pi 产品的标准 Arm 设备树文件:

  • dt-blob.bin

  • bcm2708-rpi-b.dtb(用于 Raspberry Pi 1 型号 A 和 B)

  • bcm2708-rpi-b-plus.dtb(用于 Raspberry Pi 1 型号 B+ 和 A+)

  • bcm2709-rpi-2-b.dtb(用于 Raspberry Pi 2 型号 B)

  • bcm2710-rpi-3-b.dtb(用于 Raspberry Pi 3 型号 B)

  • bcm2708-rpi-cm.dtb(用于 Raspberry Pi Compute Module 1)

  • bcm2710-rpi-cm3.dtb(用于 Raspberry Pi Compute Module 3)

注意默认情况下dt-blob.bin不存在,因为有一个编译到 start.elf 中的版本,但对于Compute Module项目,通常需要提供一个dt-blob.bin(它覆盖默认的内置文件)。

在启动过程中,用户可以通过 config.txt 中的 device_tree 参数指定要使用的特定 Arm 设备树,例如将行 device_tree=mydt.dtb 添加到config.txt其中 mydt.dtb 是要加载的 dtb 文件,而不是标准 Arm dtb 文件之一。虽然用户可以为其Compute Module产品创建完整的设备树,但添加硬件的推荐方法是使用覆盖层(请参阅下一节)。

除了加载 Arm dtb 之外,start.elf 还支持通过 config.txt 中的 dtoverlay 参数加载其他设备树覆盖层,例如,根据需要添加尽可能多的 dtoverlay=myoverlay 行作为覆盖层到 config.txt,并注意覆盖层位于 /overlays 中,后缀为 -overlay.dtb(例如 /overlays/myoverlay-overlay.dtb)。在启动 Linux 内核时将数据传递到 Linux 内核之前,覆盖层将与基本 dtb 文件合并。

覆盖用于将数据添加到基本 dtb,该数据(名义上)描述非板级特定硬件。这包括使用的GPIO引脚及其功能,以及连接的设备,以便可以加载正确的驱动程序。惯例是,在 Raspberry Pi 上,连接到 Bank0 GPIO(GPIO 标头)的所有硬件都应使用覆盖层进行描述。在Compute Module上,附加到 Bank0 和 Bank1 GPIO 的所有硬件都应在覆盖文件中描述。您不必遵循以下约定:如前所述,您可以将所有信息汇总到一个 dtb 文件中,替换 bcm2708-rpi-cm.dtb。但是,遵循约定意味着您可以使用标准的 Raspberry Pi OS 版本,其标准基础 dtb 和所有特定于产品的信息都包含在单独的覆盖层中。有时,基本 dtb

上一篇:处理器下一篇:Raspberry Pi 硬件(一)

最新评论

友情链接:

返回顶部