在开发板上使用NAND S34ML08G3在uboot第一次启动无法识别到;
按下复位及uboot reset第二次启动之后就可以识别到(量产需要用SD启动将镜像烧录到nand中进行生产)
如果是用华邦的nand我编译新的uboot第一次是可以识别到的
U-Boot 2020.07 (Apr 26 2023 - 10:35:41 +0800)
CPU: Nuvoton MA35D1
Model: Nuvoton MA35D1 U-boot
DRAM: 112 MiB
WDT: Not found!
NAND: 1024 MiB
MMC: sdhci@40190000: 0
Loading Environment from MMC... OK
In: serial@40700000
Out: serial@40700000
Err: serial@40700000
Net:
Warning: ethernet@40120000 using MAC address from DT
eth0: ethernet@40120000 [PRIME]
Warning: ethernet@40130000 using MAC address from DT
, eth1: ethernet@40130000
Hit any key to stop autoboot: 0
MA35D1>
MA35D1> nand info
Device 0: nand0, sector size 128 KiB
Page size 2048 b
OOB size 64 b
Erase size 131072 b
subpagesize 2048 b
options 0x00004200
bbt options 0x00020000
2023/05/12 13:48
修改MA35D1_Buildroot\output\build\uboot-custom\drivers\mtd\nand\raw\ma35d1_nand.c 里面的ma35d1_nand_command()函数增加ma35d1_waitfunc(mtd, chip),详细见下:
static void ma35d1_nand_command(struct mtd_info *mtd, unsigned int command,
int column, int page_addr)
{
struct nand_chip *chip = mtd_to_nand(mtd);
struct ma35d1_nand_info *nand_info = nand_get_controller_data(chip);
writel(0x400, nand_info->reg+REG_NFI_NANDINTSTS);
if (command == NAND_CMD_READOOB) {
column += mtd->writesize;
command = NAND_CMD_READ0;
}
switch (command) {
case NAND_CMD_RESET:
writel(command, nand_info->reg+REG_NFI_NANDCMD);
ma35d1_waitfunc(mtd, chip); //add this line
break;
...
}