Steven Liu1:
NAND没有识别成功,建议你查一下,你当前的配置文件中是否有做好NAND的配置。因为修改我们的SDK UBOOT时候,选择什么样的EEPROM配置,会决定了你的当前配置中是否有NAND。一些开发板型号上面是没有NAND的,所以就没有对NAND进行配置了,建议参考GPEVM的配置进行,因为上面是有NAND的。
Yalan Han:
回复 Steven Liu1:
您好,按照您的建议,我改了如下部分,红色标记为我的更改,因为我是自己设计的板子,所以更改情况如红色标记处:
static unsigned short detect_daughter_board_profile(void){ unsigned short val;
if (i2c_probe(I2C_CPLD_ADDR)) return PROFILE_NONE;
if (i2c_read(I2C_CPLD_ADDR, CFG_REG, 1, (unsigned char *)(&val), 2)) return PROFILE_NONE;
return (1 << (val & PROFILE_MASK));}
void enable_board_pin_mux(struct am335x_baseboard_id *header){ /* Do board-specific muxes. */ if (board_is_bone(header)) { /* Beaglebone pinmux */ configure_module_pin_mux(i2c1_pin_mux); configure_module_pin_mux(mii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux);#ifndef CONFIG_NOR configure_module_pin_mux(mmc1_pin_mux);#endif#if defined(CONFIG_NOR) && !defined(CONFIG_NOR_BOOT) configure_module_pin_mux(bone_norcape_pin_mux);#endif } else if (board_is_gp_evm(header)){ /* General Purpose EVM */ unsigned short profile = detect_daughter_board_profile(); configure_module_pin_mux(rgmii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux); /* In profile #2 i2c1 and spi0 conflict. */ if (profile & ~PROFILE_2) configure_module_pin_mux(i2c1_pin_mux); /* Profiles 2 & 3 don't have NAND */ if (profile & ~(PROFILE_2 | PROFILE_3)) configure_module_pin_mux(nand_pin_mux); else if (profile == PROFILE_2) { configure_module_pin_mux(mmc1_pin_mux); configure_module_pin_mux(spi0_pin_mux); } } else if (board_is_idk(header)) { /* * Industrial Motor Control (IDK) * note: IDK console is on UART3 by default. * So u-boot mus be build with CONFIG_SERIAL4 and * CONFIG_CONS_INDEX=4 */ configure_module_pin_mux(mii1_pin_mux); configure_module_pin_mux(mmc0_no_cd_pin_mux); } else if (board_is_evm_sk(header)) { /* Starter Kit EVM */ configure_module_pin_mux(i2c1_pin_mux); configure_module_pin_mux(gpio0_7_pin_mux); configure_module_pin_mux(rgmii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux_sk_evm); } else if (board_is_bone_lt(header)) { /* Beaglebone LT pinmux */ configure_module_pin_mux(i2c1_pin_mux); configure_module_pin_mux(mii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux); configure_module_pin_mux(mmc1_pin_mux); } else {/* puts("Unknown board, cannot configure pinmux."); hang(); */ unsigned short profile = detect_daughter_board_profile(); configure_module_pin_mux(rgmii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux); /* Profiles 2 & 3 don't have NAND */ if (profile & ~(PROFILE_2 | PROFILE_3)) configure_module_pin_mux(nand_pin_mux); }}
但是更改后,结果仍然显示的是nand为0MB,不知道是不是还有别的地方需要修改呢?谢谢
Steven Liu1:
回复 Yalan Han:
我觉得这样改有两个问题:
1. 改的函数是在detect_daughter_board_profile,这个是GPEVM的配置中daughter board的配置。那么你的EEPROM必须要设置为GPEVM的类型,印象中,设置完了后启动时,板卡还会检测daughter board是否存在,这里估计也是需要改的,这样才能确保你能够运行到上述的红字配置。
2. 在对NAND的配置中,你增加的代码还要对profile进行判定,profile是根据GPEVM的CPLD来确定的,这块也是需要处理。
综上,先确认能否运行到上述的代码,然后直接把那个if判断去掉,试试看在uboot下面 nand info看一下。
Yalan Han:
回复 Steven Liu1:
谢谢,我也尝试过将红字部分进行如下的更改:
else { configure_module_pin_mux(gpio0_7_pin_mux); configure_module_pin_mux(rgmii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux); configure_module_pin_mux(nand_pin_mux);}
去掉了if的判断,nand仍未0MB,nand info信息:
Device 0: MT29F8G16ADADAH4, sector size 128 KiB Page size 2048 b OOB size 64 b Erase size 131072 b
不知道这种情况下对不对?是不是由于ARM是32位,所以不能判断出nand的大小