uboot启动异常及解决

  1. 网络问题及解决

    • 打开STM32CubeMX
    • 选中ETH1 - A7NS(Linux)
    • Mode:RGMII(Reduced GMII)
    • 勾选ETH 125MHz Clock Input
    • 修改GPIO引脚如图所示
    Net:   No ethernet found.
    

    在这里插入图片描述

    • 生成代码后,修改u-boot下

      根节点下新增ethernet0

        	aliases {
             		serial0 = &uart4;
      			//mmc0 = &sdmmc1; // solved emmc not found issue
      			mmc0 = &sdmmc2;
      			ethernet0 = &ethernet0;
          	};
      

      ethernet0节点新增以下代码

      &ethernet0 {
      	pinctrl-names = "default", "sleep";
      	pinctrl-0 = <&eth1_pins_mx>;
      	pinctrl-1 = <&eth1_sleep_pins_mx>;
      	status = "okay";
      
      	/* USER CODE BEGIN ethernet0 */
      	phy-mode = "rgmii-id";
      	max-speed = <1000>;
      	phy-handle = <&phy0>;
      
      	mdio0 {
      		#address-cells = <1>;
      		#size-cells = <0>;
      		compatible = "snps,dwmac-mdio";
      		phy0: ethernet-phy@0 {
      			reg = <0>;
      		};
      	};	
      	/* USER CODE END ethernet0 */
      };
      
    • 源代码uboot源码需要修改drivers/net/phy/phy.c - 详情参考【正点原子】STM32MP1嵌入式Linux驱动开发指南V2.1 13.2.6小节

  2. 设备树使用旧版本设备树报警 - TODO

    Warning: Device tree includes old 'u-boot,dm-' tags: please fix by 2023.07!
    
  3. 启动方式改成EMMC启动,加载环境变量报错

    Loading Environment from MMC... Invalid ENV offset in MMC, copy=0
    

    增加

    PED	0x09	fip-b	FIP	mmc0	0x00580000	none
    PED	0x0A	u-boot-env	ENV	mmc0	0x00980000	none
    
  4. invalid MAC

    invalid MAC address 0 in OTP 00:00:00:00:00:00
    

    解决方案:

    setenv ethaddr 00:04:9f:04:d2:35
    saveenv
    

编译uboot源码

cd u-boot-stm32mp-v2023.10-stm32mp-r1
export FIP_DEPLOYDIR_ROOT=$PWD/../../FIP_artifacts
source ~/sdk6.6

make -f $PWD/../Makefile.sdk  UBOOT_DEFCONFIG=stm32mp15_defconfig UBOOT_BINARY=u-boot.dtb DEVICE_TREE=stm32mp157d-stm32mp157daa1-mx DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/u-boot all

下载到板子上验证

#Opt	Id	Name	Type	Device	Offset	Binary
-	0x01	fsbl-boot	Binary	none	0x0	new/tf-a-stm32mp157d-stm32mp157daa1-mx-optee-programmer-usb.stm32
-	0x03	fip-boot	Binary	none	0x0	new/fip-stm32mp157d-stm32mp157daa1-mx-optee-programmer-usb.bin
P	0x04	fsbl1	Binary	mmc0	boot1	new/tf-a-stm32mp157d-stm32mp157daa1-mx-optee-emmc.stm32
P	0x05	fsbl2	Binary	mmc0	boot2	new/tf-a-stm32mp157d-stm32mp157daa1-mx-optee-emmc.stm32
PD	0x06	metadata1	FWU_MDATA	mmc0	0x00080000	new/metadata.bin
PD	0x07	metadata2	FWU_MDATA	mmc0	0x00100000	new/metadata.bin
P	0x08	fip-a	FIP	mmc0	0x00180000	new/fip-stm32mp157d-stm32mp157daa1-mx-optee-emmc.bin
PED	0x09	fip-b	FIP	mmc0	0x00580000	none
PED	0x0A	u-boot-env	ENV	mmc0	0x00980000	none

在这里插入图片描述

思考

  1. 如何在STM32CubeMX上配置ethernet?如果不参考本文,你会怎么做?

  2. 如何配置引脚?为什么配置Mode:RGMII和ETH 120MHz Clock Input?

    在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐