安泰电子世界网 首页 Ardunio Raspberry Pi 硬件(十)

Raspberry Pi 硬件(十)

2024-11-5 17:03 | 发布者: txc | 查看: 106 | 评论: 0

简介:Raspberry Pi 硬件

有关GPIO引脚的物理特性的更多信息。

注意在计算模块设备上,可以将 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 帕兹 (GPIO 0-27)

  • 0x 7e10 0030 PADS (GPIO 28-45)

  • 0x 7e10 0034 PADS (GPIO 46-53)

字段名称描述类型重置
31:24PASSWRD书写时必须0x5A;意外写保护密码W0
23:5保留 - 写成 0,读作不在乎
4SLEW压摆率;0 = 压摆率受限;1 = 压摆率不受限制RW0x1
3HYST使能输入迟滞;0 = 禁用;1 = 启用RW0x1
2:0DRIVE驱动强度,请参阅下面的细分列表RW0x3

请注意同步开关输出 (SSO) 限制,这些限制取决于器件以及 PCB 的质量和布局、去耦电容器的数量和质量、焊盘上的负载类型(电阻、电容)以及 Raspberry Pi 无法控制的其他因素。

驱动器强度列表

  • 0 = 2mA

  • 1 = 4mA

  • 2 = 6mA

  • 3 = 8毫mA

  • 4 = 10mA

  • 5 = 12mA

  • 6 = 14mA

  • 7 = 16mA

  • Raspberry Pi 的工业用途

    Raspberry Pi 通常用作其他产品的一部分。本文档介绍了一些可用于使用 Raspberry Pi 其他功能的额外工具。

    一次性可编程设置

    在 Raspberry Pi 单板计算机上使用一次性可编程存储器

    所有 Raspberry Pi 单板计算机 (SBC) 都有一个内置的一次性可编程 (OTP) 内存区域,这实际上是片上主系统 (SoC) 的一部分。顾名思义,OTP 内存只能写入一次(即二进制 0 可以更改为 1)。一旦位更改为 1,它就永远无法返回为 0。查看 OTP 的一种方法是将每个比特视为一个保险丝。编程它涉及故意熔断保险丝——这是一个不可逆的过程,因为你不能进入芯片内部更换它!

    本白皮书假设 Raspberry Pi 运行的是 Raspberry Pi 操作系统 (OS),并且完全是最新的固件和内核。
    可以使用许多 OTP 值。要查看所有 OTP 值的列表,您可以使用:

    vcgencmd otp_dump
    

    这个转储中的一些有趣的行是:

    • 28 - 序列号

    • 29 - 序列号的 1 补码

    • 30 - 主板修订号

    此外,从 36 到 43(含),有 8 行 32 位可供客户使用。

    注意在BCM2712设备上,这些数字是不同的。第 31 行是序列号,第 32 行是主板修订号。客户行为 77 到 84(含)。

    其中一些行可以使用vcmailbox 进行编程。这是固件的 Linux 驱动程序接口,用于处理行的编程。为此,请参阅文档和 vcmailbox 示例应用程序
    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 值

    警告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、0x22222222 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 锁定。

    使客户 OTP 位在非 BCM2712 设备上无法读取

    完全可以阻止读取客户的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 命令对这些行进行编程和读取。如果不需要安全启动/文件系统加密,则可以使用设备私钥行来存储通用信息。

    • 设备私钥行只能通过 vcmailbox 命令读取,该命令需要访问 /dev/vcio,该命令仅限于 Raspberry Pi OS 上的视频组。

    • Raspberry Pi 计算机没有受硬件保护的密钥存储。建议将此功能与安全启动结合使用,以限制对此数据的访问。

    • Raspberry Pi OS 不支持加密的根文件系统。

    有关开源磁盘加密的详细信息,请参阅 Cryptsetup

    密钥编程脚本 rpi-otp-private-key

    rpi-otp-private-key 脚本包装设备私钥 vcmailbox API,以便更轻松地读取和写入 OpenSSL 格式的密钥。

    注意usbboot 存储库包含您需要的所有工具,包括作为 Git 子模块的 rpi-eeprom

    将 32 字节密钥读取为 64 个字符的十六进制数字:

    cd usbboot/tools
    rpi-otp-private-key
    

    输出示例:

    f8dbc7b0a4fcfb1d706e298ac9d0485c2226ce8df7f7596ac77337bd09fbe160
    

    将随机生成的 32 字节数字写入设备私钥。

    警告此操作无法撤消。
    # rpi-otp-private-key -w $(openssl rand -hex 32)
    
    注意要指定要使用的 OTP 行数,请传递 。若要在密钥库中指定起始位置,请传递 。-l <word count>-o <word offset>

    用于读取/写入密钥的邮箱 API。

    读取所有行。

    vcmailbox 0x00030081 40 40 0 8 0 0 0 0 0 0 0 0
    

    输出示例:

    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 寄存器和位定义

    Raspberry Pi 系列使用的所有 SoC 都具有内置的一次性可编程 (OTP) 内存块。一些位置有工厂编程的数据。
    OTP 内存大小:

    • 非BCM2712设备:66 个 32 位值

    • BCM2712设备:192 个 32 位值

    用于显示 OTP 内容的 vcgencmd 为:

    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:设置 bank 以检查 GPIO 引导模式

    • 位 21:支持从 SD 卡启动

    • 位 22:设置要从中启动的库

    • 位 28:启用 USB 设备启动

    • 位 29:启用 USB 主机引导(以太网和大容量存储)

    注意在BCM2711上,引导模式由引导加载程序EEPROM配置而不是OTP定义。

最新评论

友情链接:

返回顶部