更改默认引脚配置
此功能适用于高级用户。
自 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