适配新的 nand flash

以芯存 XCSP4AXPK-IT为例

1. 修改两个路径的 ID 表

T153/brandy/brandy-2.0/u-boot-bsp/drivers/mtd/awnand/spinand/physic/id.c
T153/bsp/drivers/mtd/awnand/spinand/physic/id.c
添加结构体定义

struct aw_spinand_phy_info xincun[] = {
    {
        .Model          = "XCSP4AXPK-IT",
        .NandID         = {0x6C, 0xB1, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00},
        .DieCntPerChip  = 1,
        .SectCntPerPage = 8,  
        .PageCntPerBlk  = 64,  
        .BlkCntPerDie   = 2048,  
        .OobSizePerPage = 256, 
        .OperationOpt   = SPINAND_QUAD_READ | SPINAND_QUAD_PROGRAM | SPINAND_DUAL_READ,
        .MaxEraseTimes  = 100000,
        .EccType        = BIT2_LIMIT1_ERR2_LIMIT3, 
        .EccProtectedType = SIZE16_OFF0_LEN16,
        .BadBlockFlag   = BAD_BLK_FLAG_FIRST_2_PAGE,
        .ecc_status_shift = ECC_STATUS_SHIFT_4,
    },
    {
        .Model      = "XCSP2AAPK-IT",
        .NandID     = {0x6c, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
        .DieCntPerChip  = 1,
        .SectCntPerPage = 8,  
        .PageCntPerBlk  = 64,  
        .BlkCntPerDie   = 2048,  
        .OobSizePerPage = 256, 
        .OperationOpt   = SPINAND_QUAD_READ | SPINAND_QUAD_PROGRAM | SPINAND_DUAL_READ,
        .MaxEraseTimes  = 100000,
        .EccType        = BIT2_LIMIT1_ERR2_LIMIT3, 
        .EccProtectedType = SIZE16_OFF0_LEN16,
        .BadBlockFlag   = BAD_BLK_FLAG_FIRST_2_PAGE,
        .ecc_status_shift = ECC_STATUS_SHIFT_4,
    },
};
static struct spinand_manufacture spinand_factory[] = {
SPINAND_FACTORY_INFO(XINCUN_MANUFACTURE, "XinCun", xincun),
};
...
    case XINCUN_MANUFACTURE:
        *m = "XinCun";
    break;
...

配置参数需要严格按照芯片手册的参数设置

字段 含义说明 配置值
.Model SPI NAND 型号名称,对应 4Gb SPI NAND Flash "XCSP4AXPK-IT"
.NandID Flash ID 匹配值,驱动通过 Read ID 识别芯片;0x00 表示该字节不参与匹配 {0x6C, 0xB1, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00}
.DieCntPerChip 每颗 Chip 包含 1 个 Die,属于单 Die 结构 1
.SectCntPerPage 每页包含 8 个扇区,按 256 字节/扇区计算,主数据区为 2048 字节 8
.PageCntPerBlk 每个 Block 包含 64 个 Page,单 Block 主数据区约 128KB 64
.BlkCntPerDie 每个 Die 包含 2048 个 Block,总容量约 512MB / 4Gb 2048
.OobSizePerPage 每页 OOB/Spare 区大小为 256 字节,用于存放 ECC、坏块标记等 256
.OperationOpt 支持四线读、四线写和双线读,驱动据此选择对应命令和时序 SPINAND_QUAD_READ | SPINAND_QUAD_PROGRAM | SPINAND_DUAL_READ
.MaxEraseTimes 最大擦写次数 10 万次,属于 SLC NAND 常见寿命指标 100000
.EccType ECC 能力/状态映射类型,通常表示可纠正 1bit 错误,超过阈值则判为不可纠正 BIT2_LIMIT1_ERR2_LIMIT3
.EccProtectedType OOB 区 ECC 保护布局:从偏移 0 开始,以 16 字节为单元,保护 16 字节 SIZE16_OFF0_LEN16
.BadBlockFlag 坏块标志位于每个 Block 的前 2 页,扫描坏块时会检查这两页 BAD_BLK_FLAG_FIRST_2_PAGE
.ecc_status_shift ECC 状态寄存器值需右移 4 位,才能解析出正确的 ECC 错误等级 ECC_STATUS_SHIFT_4

2. ubi 打包参数

由于 XCSP4AXPK-IT 硬件规格 Page Size 为 4096,ubi 打包参数需要严格匹配,否则无法烧录。
在根目录修改构建配置 .buildconfig

export LICHEE_NAND_PAGE_SIZE=4096

修改后需要重新运行 ./yz_build.sh config 配置编译参数

  • ypt153evb 512MB flash 使用 XCSP4AXPK-IT ,256MB 使用 XCSP2AAPK-IT,会在 yz_build.sh 自动修改这个参数
作者:陈柏林  创建时间:2026-10-20 16:51
最后编辑:陈柏林  更新时间:2026-11-05 14:56