U-Boot优化与定制
Connectcore不同型号和DEY版本对应有不同的U-Boot版本,meta-digi/meta-digi-arm/recipes-bsp/u-boot目录下有多个uboot版本的配方文件,配方最后COMPATIBLE_MACHINE定义了该版本适配哪个系列的Connectcore。我们可以在meta-custom/recipes-bsp/u-boot下创建一个对应版本的U-Boot配方的bbappend文件,以便实现定制和优化。
U-Boot的Logo定制
Console口抗干扰能力加固
以CCMP25为例,默认的U-Boot的console口的板级设备树定义是:
/* Console A35 */
&usart2 {
pinctrl-names = "default", "idle", "sleep";
pinctrl-0 = <&usart2_pins_a>;
pinctrl-1 = <&usart2_idle_pins_a>;
pinctrl-2 = <&usart2_sleep_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
而pinctrl定义见arch/arm/dts/ccmp25-dvk-u-boot.dtsi, 其中有
&usart2 {
bootph-all;
};
&usart2_pins_a {
bootph-all;
pins1 {
bootph-all;
};
pins2 {
bootph-all;
};
};
上面未涉及引脚上拉偏置,实际的定义在arch/arm/dts/stm32mp25-pinctrl.dtsi中,
usart2_pins_a: usart2-0 {
pins1 {
pinmux = <STM32_PINMUX('A', 4, AF6)>; /* USART2_TX */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('A', 8, AF8)>; /* USART2_RX */
bias-disable;
};
};
注意上面的RX,默认没有偏置,因此上电时容易收到干扰信号误认为是按下任意键,可以在meta-custom里用自定义的uboot设备树来更改,以peyoot/ccmp25_dt为例,在uboot-dts/ccmp25-dvk.dts中,用下面的方法改:
/* Console A35 */
&usart2 {
pinctrl-names = "default", "idle", "sleep";
- pinctrl-0 = <&usart2_pins_a>;
- pinctrl-1 = <&usart2_idle_pins_a>;
+ pinctrl-0 = <&ccmp25_usart2_pins_a>;
+ pinctrl-1 = <&ccmp25_usart2_idle_pins_a>;
pinctrl-2 = <&usart2_sleep_pins_a>;
然后加上下面定义,主要是RX,通过上拉防止浮空易受干扰。
&pinctrl {
ccmp25_usart2_pins_a: ccmp25-usart2-0 {
pins1 {
pinmux = <STM32_PINMUX('A', 4, AF6)>; /* USART2_TX */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('A', 8, AF8)>; /* USART2_RX */
/* pull-up on rx to avoid floating level */
bias-pull-up;
};
};
ccmp25_usart2_idle_pins_a: ccmp25-usart2-idle-0 {
pins1 {
pinmux = <STM32_PINMUX('A', 4, ANALOG)>; /* USART2_TX */
};
pins2 {
pinmux = <STM32_PINMUX('A', 8, AF8)>; /* USART2_RX */
/* pull-up on rx to avoid floating level */
bias-pull-up;
};
};