This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3352:AM335x 从 eMMC 引导问题

Guru**** 2558740 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/624415/am3352-am335x-boot-from-emmc-issue

器件型号:AM3352

您好!

我们有自己的定制电路板设计、其中包含 AM3352。  我们已从 SD 卡成功引导、然后将代码移植到 eMMC 芯片。  U-Boot 运行在 eMMC 之外、但不加载内核。  

当 U-boot 扫描 eMMC 时、大部分时间都找不到它。  有时确实如此、但无论内核如何、都不会引导。  我们有一个 SD 转 eMMC 插座适配器。  

我们将定制板上的相同映像加载到 eMMC 到 SD 适配器上、并能够使用它启动 Beagle Bone。   

将 eMMC 代码移植到其中的电路板无法再使用 uSD 卡启动。  我将系统配置引脚改回 uSD 卡引导配置、但没有任何反应。  甚至连 CCCCC 都没有...

随附 eMMC 原理图、下面是与 CPU 的连接。

此致、

Kelseye2e.ti.com/.../eMMC.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我看一下原理图、我将进行更新。

    同时、您能否分享您尝试在电路板上引导哪个 SDK?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TI-SDK 4.0.0.4于2017年6月发布  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将电阻器配置更改为制造商推荐的配置、这就是我得到的结果。

    它们在 DAT0-7线路上列出了50k pu、在 RST_N 上列出了50、在 CMD 上列出了10K、在 CLK 上没有 pu

    尝试从 eMMC 引导时读取的当前日志。

    U-Boot 2017.01-00319-g7752743-m脏(2017年8月18日- 16:57:18 -0500)

    CPU:AM335X-GP 修订版2.1
    型号:TI AM335x BeagleBone Black
    DRAM:512 MiB
    NAND:0 MIB
    MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
    卡未响应电压选择!
    **设备 MMC 0 **错误
    使用默认环境

    未设置。 验证第一个电子保险丝 MAC
    NET:cpsw、USB_ether
    按任意键停止自动引导:0
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    ##错误:未定义"bootcmd_nand0"
    正在启动 USB...
    USB0:端口不可用。

    对于之前的电阻器配置(所有线路上为10K PU)、这是对数读取  

    U-Boot 2017.01-00319-g7752743-m脏(2017年8月18日- 16:57:18 -0500)

    CPU:AM335X-GP 修订版2.1
    型号:TI AM335x BeagleBone Black
    DRAM:512 MiB
    NAND:0 MIB
    MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
    MMC:无卡存在
    **设备 MMC 0 **错误
    使用默认环境

    未设置。 验证第一个电子保险丝 MAC
    NET:cpsw、USB_ether
    按任意键停止自动引导:0
    MMC:无卡存在
    MMC:无卡存在
    MMC:无卡存在
    MMC:无卡存在
    MMC:无卡存在
    MMC:无卡存在
    ##错误:未定义"bootcmd_nand0"
    正在启动 USB...

    因此"MMC:不存在卡"与"卡未响应电压选择"

    它仍将使用此 SYS_Configuration 从 SD 卡引导

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    MMC:没有卡在获取卡检测信号时中断:
    int mmc_start_init (struct mmc *mmc)

    bool no_card;
    Int 错误;
    int UHS_en = true;

    /*当 init 为 NULL 时,我们假设没有卡*/
    NO_CARD = MMC_getcd (MMC)= 0;
    #ifndef CONFIG_DM_MMC_OPS
    NO_CARD = NO_CARD ||(MMMC->cfg->ops->init = NULL);
    #endif
    if (no_card){
    MMMC->has _init = 0;
    #if!defined (CONFIG_SPL_Build)|| defed (CONFIG_SPL_LIBCOMMON_SUPPTENT)
    printf ("MMC:不存在卡\n"\});
    #endif
    return -ENOMEDIUM;


    您能否共享 MMC1引脚多路复用设置?

    当 u-boot 检查 MMC_START_INIT ()中是否存在 MMC 卡(或 eMMC)时,该卡未响应电压选择消息再次显示:
    /*如果命令超时,我们将检查 MMC 卡*/
    如果(err =-ETIMEDOUT){
    ERR = MMC_SEND_OP_COND (MMC);

    如果(err){
    #if!defined (CONFIG_SPL_Build)|| defed (CONFIG_SPL_LIBCOMMON_SUPPTENT)
    printf ("卡未响应电压选择!\n");
    #endif

    您还可以在 u-boot 级别停止、执行 printenv 并共享 outptu 吗?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是 printenv。  将很快共享 MMC1引脚多路复用设置。

    =>印刷版
    arch = ARM
    args_mmc=run finduid;setenv bootargs console=${console}${optargets}root=PARTUUID =${uuid}rw rootfstype=${mmcrootfstype}
    波特率=115200
    电路板=AM335x
    Board_name=A335BNLT
    Board_rev=1.0A
    Board_serial=03134P160001
    boot_a_script=load ${devtype}${devnum}:${distro_bootpart}${scriptaddr}${prefix}${script};source ${scriptaddr}
    boot_efi_binary=load ${devtype}${devnum}:${distro_bootpart}${kernel_addr_r}efi/boot/bootarm.EFI;如果 fdt addr ${fdt_addr_r};则 bootefi ${kernel_addr_r}${fdt_dr_addr_r};bootdr}${dr};bootedr}${dr}
    boot_extlinux=sysboot ${devtype}${devnum}:${distro_bootpart}任何${scriptaddr}${prefix}extlinux/extlinux.conf
    BOOT_FDT=尝试
    BOOT_FIT = 0
    BOOT_NET_USB_START=USB 启动
    boot_nars=//boot/
    boot_script_dhcp=boot.scr.uimg
    boot_scripts=boot.scr.uimg boot.scr
    boot_targets=mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 PXE DHCP
    bootcmd=if test ${boot_fit}-eq 1;然后运行 update_to _fit;fi;运行 findfdt;运行 init_console;运行 envboot;运行 distro bootcmd
    bootcmd_dhcp=run boot_net_us_start;如果 DHCP ${scriptaddr}${boot_script_dhcp};则源${scriptaddr};fi;setenv efi_fdtarchfile ${dtatr};if test -z "${dtdt file}"-a -n ${soc ver";${dtv_env_env_env_boardr}${tbt}${tv_enpv_env_env_envr}${tbt};tv_env_adr}${tv_enpv_env_env_env_env_env_env_envr}${tv_env_adr}${tbt f tv_env_env_adr}${tbt f tv_env_env_env_env_env_envr}${tv_env_env_env_env_env_env_env_ else bootefi ${kernel_addr_r}${fdtcontrolladdr};fi;setenv bootp_VCI ${efi_old_vci};setenv bootp_arch ${vci_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_arch;
    bootcmd_legacy_mmc0=setenv mmcdev 0;setenv bootpart 0:2;运行 mmcboot
    bootcmd_legacy_mmc1=setenv mmcdev 1;setenv bootpart 1:2;运行 mmcboot
    bootcmd_mmc0=setenv devnum 0;运行 MMC_boot
    bootcmd_mmc1=setenv devnum 1;运行 MMC_boot
    bootcmd_nand=运行 nandboot
    bootcmd_PXE=运行 boot_net_usb_start;DHCP;如果 PXE 获得;然后是 PXE 引导;fi
    BOOTCOUNT=1
    BOOTDELAY=2
    bootdir=/boot
    bootenvfile=uEnv.txt
    BootFile=zImage
    BOOTM_SIZE=0x10000000
    bootpart=0:2
    bootscript=echo 正在从 MMC${mmcdev}...;源${loadaddr}运行的 bootscript
    console=ttyO0、115200n8
    CPU=armv7
    DFU_alt_INFO_eMMC=rawemmc RAW 0 3751936
    dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;mlo fat 0 1;ml.raw 0x100 0x100;u-boot.img.raw 0x300 0x400;spl-os-args.raw 0x80 0x80;spl-os-image.fat raw 0x900;spl-os-os-gfat 1;fat 0 uEnv.txt
    dfu_alt_info_nand=SPL 零件0 1;SPL.Backup1零件0 2;SPL.Backup2零件0 3;SPL.Backup3零件0 4;u-boot 零件0 5;u-boot-spl-OS 零件0 6;内核零件0 8;rootfs 零件0 9
    dfu_alt_info_ram=内核 ram 0x80200000 0x4000000;fdt ram 0x80f80000 0x80000;ramdisk ram 0x81000000 0x4000000
    distro_bootcmd=用于${boot_targets}中的目标;请运行 bootcmd_${target};完成
    EFI_dtb_nefins=//dtb//dtb/current
    envboot=MMC dev ${mmcdev};如果 MMC 重新扫描;然后回显在器件${mmcdev}上找到的 SD/MMC;如果运行 loadbootscript;然后运行 bootscript;否则运行 loadbootenv;然后从${bootenvfile}回显已加载的 env;运行 importbootenv;fi;if test -n $uuccmd;然后运行 envenvcmd;envive...
    eth1addr=e8:EB:11:2c:6F:0e
    ethact=cpsw
    ethaddr=e8:EB:11:2c:6F:0c
    FDT_addr_r=0x88000000
    fdtaddr=0x88000000
    fdtcontrolladdr=9df2a4f8
    fdtfile=未定义
    findfdt=if test $board_name = A335BONE;then setenv fdtfile AM335x-bon.dtb;fi;if test $board_name = A335BNLT;then setenv fdtfile AM335x-bonebold.dtb;fi;if tests $board_name = A335bnlbtb;then 文件 AM335btbtb;tbv_env_env_env_dtb;tb 如果 TEST $board_name = A335_ICE;那么 setenv fdtfile AM335x-icev2.dtb;fi;如果 TEST $fdtfile = undefined;则回显警告:无法确定要使用的设备树;fi;
    finduuid=part uuid MMC ${bootpart}uuid
    fit_bootfile=fitImage
    fit_loadaddr=0x87000000
    importbootenv=echo 从 MMC${mmcdev}导入环境...;env 导入-t ${loadaddr}${filesize}
    init_console=if test $board_name = a335_ice;然后 setenv 控制台 ttyO3、115200n8;否则 setenv 控制台 ttyO0、115200n8;fi;
    kernel_addr_r=0x82000000
    load_efi_dtb=load ${devtype}${devnum}:${distro_bootpart}${fDT_addr_r}${prefix}${efi_fdtfile}
    loadaddr=0x82000000
    loadbootenv=fatload MMC ${mmcdev}${loadaddr}${bootenvfile}
    loadbootscript=load MMC ${mmcdev}${loadaddr}boot.scr
    loadfdt=load ${devtype}${bootpart}${fdtaddr}${bootdir}/${fdtfile}
    loadfit=run args_mmc;bootm ${loadaddr}#${fdtfile};
    loadimage=load ${devtype}${bootpart}${loadaddr}${bootdir}/${bootfile}
    loadramdisk=load MMC ${mmcdev}${rdaddr}ramdisk.gz
    MMC_BOOT=if MMC dev ${devnum};然后 setenv devtype MMC;运行 scan_dev_for_boot_part;fi
    mmcboot=MMC dev ${mmcdev};setenv devnum ${mmcdev};setenv devtype MMC;如果 MMC 重新扫描;然后回显在器件${mmcdev}上找到的 SD/MMC;如果运行 loadimage;然后测试${boot_fit}-eq 1;然后运行 loadfit;否则运行 mmcovados;fi;fi;
    mmcdev=0
    mmclosados=run args_mmc;如果测试${boot_FDT}= yes ||测试${boot_FDT}=试用;如果运行 loadfdt;则 bootz ${loadaddr}-${fdtaddr};否则测试${boot_FDT}=试用;然后 bootz;否则、回显警告:无法加载 bootz;否则;fi;
    mmcrootfstype=ext4 rootwait
    mtdds=nand0=nand.0
    mtdparts=mtdparts=nand.0:128k (NAND.SPL)、128k (NAND.NANT.Backup1)、128k (NAND.NANT.Backup2)、128k (NAND.NANT.Backup3)、256k (NAND.u-boot-OS)、SPL (NAND.U-boot)、128k (NAND-Boot)、128m (NAND-Boot)、8m (NAND-1m (NAND-Boot)、ENU.v-v-boot)、128k (v-v-v-back1)、/v-kernel.enu.enu.enu.1
    nandargs=setenv bootargs console=${console}${optargets}root=${nandroot}rootfstypy=${nandrootfstype}
    nandboot=echo Booting from nand ...;运行 nandargs;nand read ${fdtaddr}nand.u-boot-spl-OS;nand read ${loadaddr}NAND.kernel;bootz ${loadaddr}-${fdtaddr}
    nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system、2048
    nandrootfstype=ubifs rootwait=1
    netargs=setenv bootargs console=${console}${optargets}root=/dev/nfs nfsroot=${serverip}:${rootpath}、${nfsopts}RW IP=DHCP
    netboot=echo Booting from network...;setenv autoload no;dhcp;run netloadimage;run netloadfdt; 运行 netargs;bootz ${loadaddr}-${fdtaddr}
    netloadfdt=tftp ${fdtaddr}${fdtfile}
    netloadimage=tftp ${loadaddr}${bootfile}
    nfsopts=nolock
    partitions=uuid_disk=${uid_gppt_disk};name=rootfs、start=2MiB、size=-、uid=${uid_gppt_rootfs}
    pxefile_addr_r=0x80100000
    ramargs=setenv bootargs console=${console}${optargets}root=${ramroot}rootfstypy=${ramrootfstype}
    ramboot=echo 从 ramdisk 引导...;运行 ramargs;bootz ${loadaddr}${rdaddr}${fdtaddr}
    ramdisk_addr_r=0x88080000
    ramroot=/dev/ram0 rw
    ramrootfstype=ext2
    读数地址= 0x88080000
    rootpath=/export/rootfs
    scan_dev_for_boot=echo 扫描${devtype}${devnum}:${distro_bootpart}...;用于${boot_drefix}中的前缀;运行 scan_dev_for_extlinux;运行 scan_dev_for_scripts;完成;运行 scan_dev_for_EFI;
    scan_dev_for_boot_part=part list ${devtype}${devnum}-bootable devplist;env 存在 devplist || setenv devplist 1;对于${devplist}中的 DISTR_BOOTpart;如果 fstype ${devtype}${devfi}:${distro_bootpart}、则执行;然后针对 boot_bootn_bootnum 执行
    scan_dev_for_efi=setenv efi_fdtfile ${fdtfile};如果测试-z "${fdtfile}"-a -n "${soc}";然后设置 env efi_fdtfile ${soc}-${boardver}${dtv 文件前缀;fi_bootstro}${pedtb};如果已找到 EFI 文件、则为${prefix_dipot_boot_bootstart;${prefix ${prefix}/emi 文件${prefix:/edex}${prefix;/fue_bootstepi 文件${prefix;}ped/emi 文件:${ped/emi 文件;prefix 文件${prefixed/ed/ed/ed/emi 文件: fi; setenv efi_fdtfile
    scan_dev_for_extlinux=if test -e ${devtype}${devnum}:${distro_bootpart}${prefix}extlinux/extlinux.conf;然后回显找到${prefix}extlinux/extlinux.conf;运行 boot_extlinux;回显脚本失败:继续...;fi
    scan_dev_for_scripts=用于${boot_scripts}中的脚本;如果测试-e ${devtype}${devnum}:${distro_bootpart}${prefix}${script}、则执行;然后回显找到的 U-Boot 脚本${prefix}${prefix}${prefix}${prefix};运行 boot_a_script;回显脚本失败:继续...;完成
    脚本地址=0x80000000
    SoC=am33xx
    args=setenv bootargs console=${console}${optargets}root=${spiroot}spifstypy=${rootrootfstype}
    spiboot=echo Booting from SPI ...;运行 spiargs;SF 探测器${spibusno}:0;SF 读取${loadaddr}${spisrcadr}${spiimgsize};bootz ${loadaddr}
    spibusno=0
    spiimgsize=0x362000
    spiroot=/dev/mtdblock4 rw
    rootspifstype=jffs2.
    spisrcaddr=0xe0000
    static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
    stderr=串行@44e09000
    stdin =串行@44e09000
    stdout=串行@44e09000
    update_TO_fit=setenv loadaddr ${fit_loadaddr};setenv 引导文件${fit_bootfile}
    USB_boot=USB start;如果 USB dev ${devnum};则 setenv devtype USB;运行 scan_dev_for_boot_part;fi
    USBnet_devaddr=e8:EB:11:2c:6F:0c
    供应商= TI
    ver = U-Boot 2017.01-00319-g7752743-m脏(2017年8月18日- 16:57:18 -0500)

    环境大小:9124/131068字节

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是他在帖子中提到的 MMC1 pinmux 设置 Kelsey。

    vmmcsd_fixedregulator0{
    兼容="稳压器固定";
    reguler-name ="vmmcsd_fixed";
    稳压器最小微伏=<3300000>;
    稳压器最大值微伏=<3300000>;
    };

    eMMC_Pins:pinmux_eMMC_Pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x880、PIN_INPUT_PULLUP | MUX_MODE2)/* GPMC_csn1.mmc1_clk *
    AM33XX_IOPAD (0x884、PIN_INPUT_PULLUP | MUX_MODE2)/* GPMC_csn2.mmc1_cmd *
    AM33XX_IOPAD (0x800、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_ad0.mmc1_data0 *
    AM33XX_IOPAD (0x804、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_AD1.mmc1_DAT1 *
    AM33XX_IOPAD (0x808、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_AD2.mmc1_DAT2 *
    AM33XX_IOPAD (0x80c、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_ad3.mmc1_dat3 *
    AM33XX_IOPAD (0x810、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_AD4.mmc1_dat4 *
    AM33XX_IOPAD (0x814、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_ad5.mmc1_dat5 *
    AM33XX_IOPAD (0x818、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_AD6.mmc1_dat6 *
    AM33XX_IOPAD (0x81c、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_AD7.mmc1_dat7 *
    >;
    };

    mmc2{(&M)
    VMMC-SUPPLY =<&vmmcsd_fixed>;
    pinctrl-names ="default";
    pinctrl-0 =<&eMMC_PINs>;
    总线宽度=<4>;
    状态="正常";
    };

    我还尝试了8的总线宽度。 结果是相同的。

    谢谢、

    明州
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我注意到 boot_前 缀是

    boot_nars=//boot/

    //看起来不正确。

    Steve K.