Skip to content

更改默认引脚配置

此功能适用于高级用户。

自 2014 年 7 月 15 日起,树莓派固件通过用户提供的设备树 blob 文件支持自定义默认引脚配置。要确定您的固件是否足够新,请运行" vcgencmd version"。

引导顺序期间设备引脚上的操作

在启动过程中,GPIO引脚会经历各种动作。

1.上电—引脚默认为带默认上拉的输入;每个引脚的默认拉力在[数据表]中进行了描述(../hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf) 1.通过 bootrom 进行设置 1.通过bootcode.bin进行设置 1.通过dt-blob.bin进行设置(本页) 1.通过 config .txt中的 GPIO 命令进行设置(请参阅here) 1.额外的固件引脚(例如 UARTS ) 1.内核/设备树

在软复位上,除了默认上拉(仅在上电复位上应用)外,适用相同的过程。

请注意,从阶段 1 到阶段 4 可能要花费几秒钟。在此期间,GPIO引脚可能未处于所连接外围设备所期望的状态(如 dtblob .bin或 config .txt中所定义)。 。由于不同的 GPIO 引脚具有不同的默认上拉,因此您应该对外围设备执行以下操作之一: 选择一个 GPIO 引脚,该引脚默认为外设在复位时上拉 延迟外设的启动,直到达到阶段 4 /5 *添加适当的上拉/下拉电阻

提供自定义设备树 Blob

为了将设备树源(.dts)文件编译成设备树 blob (.dtb)文件,必须通过运行 sudo apt install device-tree-compiler来安装设备树编译器。然后可以按如下方式使用dtc命令:

 sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob.dts

注意:对于安装 NOOBS 的情况,应将 DTB 文件放在恢复分区上。

同样,如果需要,可以将.dtb文件转换回.dts文件。

dtc -I dtb -O dts -o dt-blob.dts /boot/dt-blob.bin

dt-blob的各个部分

dt-blob.bin用于在启动时配置二进制 blob (VideoCore)。 Linux内核当前尚未使用它,但是在稍后阶段,当我们重新配置树莓派内核以使用 dt -blob进行配置时,将添加内核部分。 dt-blob可以配置树莓派的所有版本(包括计算模块)以使用替代设置。以下各节在 dt -blob中有效:

1.videocore

本节包含所有 VideoCore blob信息。所有后续部分都必须包含在本部分中。

2.pins_ *

根据特定的树莓派型号,有许多单独的" pins_ *"部分,即:

  • pins_rev1 Rev1引脚设置。由于移动了 I2C 引脚,因此存在一些差异。
  • pins_rev2 Rev2引脚设置。这包括 P5 上的其他编解码器引脚。
  • pins_bplus1 模型 B +版本 1 .1,包括完整的 40pin 连接器。
  • pins_bplus2 模型 B +修订版 1 .2,交换低功耗和 lan -run引脚。
  • pins_aplus A +型,缺少以太网。
  • pins_2b1 Pi 2 Model B rev 1.0;通过 I2C0 控制 SMPS 。
  • pins_2b2 Pi 2 Model B版本 1 .1;通过软件 I2C 在 42 和 43 上控制 SMPS 。
  • pins_3b1 Pi 3 Model B rev 1.0
  • pins_3b2 Pi 3 Model B rev 1.2
  • pins_3bplus Pi 3 Model B +
  • pins_3aplus Pi 3 Model A +
  • pins_pi0 Pi零
  • pins_pi0w Pi零 W
  • pins_cm 计算模块。默认值是芯片的默认值,因此它是有关芯片上默认上拉/下拉的有用信息来源。
  • pins_cm3 计算模块版本 3

每个" pins_ *"部分都可以包含" pin_config"和" pin_defines"部分。

3.pin_config

" pin_config"部分用于配置各个引脚。此部分中的每个项目都必须是一个命名的引脚部分,例如" pin @ p32",表示 GPIO32 。有一个特殊的部分" pin @ default",其中包含未在 pin _config部分中特别命名的任何内容的默认设置。

4.pin @ pinname

本节可以包含以下各项的任意组合:

1."极性" active_high active_low 2.终止 pull_up pull_down no_pulling 3.startup_state 活跃 *无效' 4.功能*输入*输出*sdcard*i2c0*i2c1*spi*spi1*spi2*smi*dpi*pcm*pwm*uart0*uart1*gp_clk*emmc*arm_jtag5.drive_strength_mA` 驱动强度用于设置销的强度。请注意,您只能为银行指定单个驱动强度。 <8>和<16>是有效值。

5.pin_defines本部分用于将特定的 VideoCore 功能设置为特定的引脚。这使用户可以将相机电源使能引脚移至其他位置,或将 HDMI 热插拔位置移至 Linux 无法控制的位置。请参考下面的示例 DTS 文件。

时钟配置

尽管很难预测结果,但可以通过此接口更改时钟的配置!时钟系统的配置非常复杂。有五个独立的 PLL ,每个 PLL 都有自己固定的(或可变的,对于 PLLC )VCO频率。这样,每个 VCO 都有许多不同的通道,可以用 VCO 频率的不同划分来设置。尽管源到目标之间的映射受到限制,但每个时钟目标都可以配置为来自时钟通道之一,因此并非所有通道都可以路由到所有时钟目标。

以下是几个示例配置,可用于更改特定时钟。提出时钟配置请求时,我们将添加到此资源。

clock_routing {
   vco @ PLLA {freq = <1966080000>; };
   chan @ APER {div = <4>; };
   时钟@ GPCLK0 {pll =" PLLA"; chan =" APER"; };
};

clock_setup {
   时钟@PWM {freq = <2400000>; };
   时钟@ GPCLK0 {freq = <12288000>; };
   时钟@ GPCLK1 {freq = <25000000>; };
};

上面将 PLLA 设置为运行在 1 .96608GHz的源 VCO (此 VCO 的限制为 600MHz -2.4GHz),将 APER 通道更改为/4,并将 GPCLK0 配置为从 PLLA 通过 APER 获取。这用于为音频编解码器提供产生 48000 频率范围所需的 12288000Hz 。

示例设备树源文件

该示例文件来自固件存储库。它是主要的树莓派 Blob,通常是从其他 Blob 中派生出来的。

https://github.com/raspberrypi/firmware/blob/master/extra/dt-blob.dts