在移植的过程中遇到问题,SD卡的启动时ROMCODE 从SD卡中读取MLO执行进入SPL阶段。但是SPL阶段读取u-boot.img时出错,测试时候使用2GB的sd卡 fat32一个分区 放了MLO 和 u-boot.img 两个文件。启动打印如下图所示。 板子参考bbb实际 sd卡部分未做改动。考虑到软件问题,因为同样的SD卡在替换了已有旧版本的MLO 和 u-boot.img,可正常加载u-boot.img 启动。
使用版本为ti-SDK
u-boot 2018.01 u-boot-2018.01+gitAUTOINC+313dcd69c2-g9d984f4548
linux-4.14.79+gitAUTOINC+e669d52447-ge669d52447
U-Boot SPL 2018.01-00569-g7b4e473842-dirty (Aug 13 2019 – 15:18:11)
Trying to boot from MMC1
spl_load_image_fat_buf: error reading image u-boot.img, err – -2
** Can't read partition table on 0:0 **
spl: no partition table found
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###
问题1:Trying to boot from MMC1 里面的 MMC1 实际指的是mmc0 么(uboot的设备树好像在mmc1 的节点里面 pim_mux了 mmc0 的引脚)?
问题2:uboot阶段的设备树最后是部分合并到u-boot.img了么?
问题3:上面的这个SD卡读取错误问题要怎么解决,请给与指点。(mmc 在 board.c 里面的pin_mux 以及 uboot下面的设备树确认过了,应该没问题,本来和bbb的sd卡就保持一致)
呼唤 ———————>>>>>>>>>> TI – 小姐姐
Shine:
1. MMC1实际指的是mmc0。 2. 没有合并,设备树是由uboot加载到内存。 3. 请问时要从mmc1启动吗? 请看一下设备树里有没有配置mmc1 pinmux管脚,添加mmc1节点?
hui wang1:
回复 Shine:
335板子去掉了BBB板的EMMC 改用NANDFLASH
SD部分电路参照原BBB电路制作 硬件上一致 ,软件上想去掉CS脚以供下一次改板的时候去掉CS脚,因为SD卡只是用来作为备用更新的接口 (当然我也尝试加CS脚的pinmux 以及设备树里面的配置 情况一样)
1 , NAND 无数据 在00100 UART0 >>XIP>>MMC0 >>NAND 此种启动方式下ROM code可以从SD card中起来证明SD 卡在ROMcode中位于MMC0 看电路确实也在MMC0 的接口上
卡板上 MMC1的接口上没有物理MMC的外设
下面是一段在该卡板上SD卡
启动偶尔正常的一段启动打印
可以加载MLO 并在SPL阶段加载u-boot.img 并跳转,按下按键使执行停在u-boot命令行 证明u-boot正常,打印如下:
=>
=>
=> nand erase.chip
NAND erase.chip: device 0 whole chip
Erasing at 0xffe0000 — 100% complete.
OK
=> CCCCCCCC
U-Boot SPL 2018.01-00569-g7b4e473842-dirty (Aug 14 2019 – 11:40:08)
Trying to boot from MMC1
U-Boot 2018.01-00569-g7b4e473842-dirty (Aug 14 2019 – 11:40:08 +0800)
CPU : AM335X-GP rev 2.1
Model: TI AM335x BeagleBone Black
DRAM: 512 MiB
NAND: 256 MiB
MMC: OMAP SD/MMC: 0
Using default environment
<ethaddr> not set. Validating first E-fuse MAC
Net: Into Ti CPSW initialization !!!
mac_addr = 20 0 0 0 a9 5aInto Ti CPSW use bbb mii !!!
cpsw
Hit any key to stop autoboot: 0
=>
疑惑一 :启动打印:Trying to boot from MMC1
首先uboot阶段正常启动了说明SD卡的内容MLO 和 u-boot.Img
可以正常启动并且可以被加载执行:
但是:
前面提及的sysboot配置中启动项没有MMC1 只有MMC0。
,并且启动前 NAND的数据也已经清空 那么该处打印的MMC1 由哪里决定???
该处打印的MMC1 指的是sysboot中MMC0???
疑惑二 :u-boot阶段是将设备树 内核 加载到ddr再跳转到内核执行。这个确实是,但是有个疑问:我之前在使用uboot目录下的设备树作为linux的启动设备树会出问题(不确定是否版本问题,仔细对比了一下两者,基本内容是一致的,感觉只是写法稍微不同。改用linux目录下的内核启动即正常)
board-support/u-boot-2018.01+gitAUTOINC+313dcd69c2-g9d984f4548/arch/arm/dts
board-support/linux-4.14.79+gitAUTOINC+e669d52447-ge669d52447/arch/arm/boot/dts
那么两者有什么区别 ?
疑惑三 : SD卡只是用来启动 RomCode可以从我手里的3张SD(2G 2G 8G)可均可正常加载MLO ,可否证明至少我的SD卡电路中 CMD CLK DATA0 DATA1 DATA2 DATA3 均正常,
但是正常加载u-boot.img只是少数时候大多如下
U-Boot SPL 2018.01-00569-g7b4e473842-dirty (Aug 14 2019 – 11:40:08)
Trying to boot from MMC1
** Partition 1 not valid on device 0 **
spl_register_fat_device: fat register err – -1
spl_load_image_fat_buf: error reading image u-boot.img, err – -1
spl: no partition table found
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###
我的理解是tty0 可以打印上面一段内容证明335到sd的物理连接正常(因为每一次都可以正常加载MLO)
但是MLO再去加载u-boot.img 则常常会出现如上错误。
因为我只是在SD中放了MLO 和 u-boot.img
所以在您说的修改设备树,我的理解是 目的可以在linux里面使用这个外设
我只需要在启动是uboot阶段去更新nandflash的固件
所以现在能影响我的只有board.c 里面的pin_mux 和 uboot中 make menuconfig 里面相关mmc的外设的启用 ??? 或者说u-boot阶段还是需要设备树的信息??
void enable_board_pin_mux(void)
{
configure_module_pin_mux(mii1_pin_mux);
configure_module_pin_mux(mmc0_no_cd_pin_mux);
configure_module_pin_mux(nand_pin_mux);
}
static struct module_pin_mux mmc0_no_cd_pin_mux[] = {
{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */
{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */
{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */
{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */
{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */
{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */
{-1},
};
u-boot:下mmc 设备树:
sdcard_pins_default: sdcard_pins_default {
pinctrl-single,pins = <
0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat0.mmc0_dat0 */
0xf4 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat1.mmc0_dat1 */
0xf8 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat2.mmc0_dat2 */
0xfc (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_dat3.mmc0_dat3 */
0x100 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_clk.mmc0_clk */
0x104 (PIN_INPUT_PULLUP | MUX_MODE0) /* mmc0_cmd.mmc0_cmd */
>;
};
};
&mmc1 {
status = "okay";
vmmc-supply = <&vmmc_reg>;
bus-width = <4>;
pinctrl-names = "default";
pinctrl-0 = <&sdcard_pins_default>;
ti,broken-cd;
};
Shine:
回复 hui wang1:
请问可以运行的旧版本是哪个版本?新版本的SDK具体是哪个版本?
有没有试过启动第一顺序从sd卡启动?
hui wang1:
回复 Shine:
尝试过第一启动方式,现象一致Romcode 均可以加载MLO但是加载不了u-boot.img贴装的几块板都有这样的现象.
旧版本指的是
linux-3.14.26 和u-boot-2011.09新版本为TI SDKam335x-evm-linux-sdk-src-05.03.00.07
u-boot 2018.01 u-boot-2018.01+gitAUTOINC+313dcd69c2-g9d984f4548
linux-4.14.79+gitAUTOINC+e669d52447-ge669d52447我只需要uboot阶段的SD卡 可操作即可。
请问 MLO阶段如何去掉MMC的WP 和 CD脚的相关功能,即不需要检测CD脚
不知道到我去CD脚WP脚的方式是否有问题
而无法读取u-boot.img是否由于该引脚引起的??
Shine:
回复 hui wang1:
1. 抱歉,更正一下Trying to boot from MMC1是从mmc0启动,所以您的启动管脚配置是正确的。
2. 在设备树里mmc node属性里添加 broken-cd;disable-wp; 可以去掉WP, CD脚的相关功能
3. 关于spl_load_image_fat_buf: error reading image u-boot.img, err – -2这个错误信息,请检查一下/board-support/u-boot-<version>/board/ti/am335x/mux.c里的Pinmux设置是否不正确?电路设计中是否错误地使用了22ohm的电阻而不是10K电阻?SD卡没有正确的格式化?u-boot.img是否丢失?
hui wang1:
回复 Shine:
这个问题还没有解决 ,重打了底板测试有结果再更贴。
yongqing wang:
回复 hui wang1:
新底板改了啥