全志SDK - 4. Flash支持

发布时间 2023-05-06 22:21:34作者: Jimmy_Nie

全志平台,选择Flash时,尽量选用 支持列表 中的那些,否则后续非常麻烦!


Flash不支持的话,系统无法烧录进去,第一步就行不通了!

Flash调试的一般步骤为:

  1. 设置SPI支持
  2. 打最新的补丁,以便支持拓展Flash列表
  3. 增加Flash支持:uboot支持和Kernel支持

1. SPI支持

SPI (Serial Peripheral Interface,串行外设接口),是最常用的Flash有CPU连接总线!

注意,有的Flash可能使用的不是SPI (Serial Peripheral Interface,串行外设接口) 接口,这个要根据接口进行配置,不可以乱来!

具体的配置,参见《SPI总线驱动使用说明》

2. Flash支持 - 方案1

Uboot目录: 快捷命令:cboot

lichee/brandy-2.0/u-boot-2018/drivers/sunxi_flash/nand/common1/spinand/spinand_ids.c

Kernel目录: 快捷命令:ckernel

lichee/linux-4.9/modules/nand/sun8iw18p1/spinand/spinand_ids.c

在以上文件的ext_spinand_idts 结构体中添加待适配的物料ID信息,如我的R328板子:

{
	/* XT26G01C */
	.NandID = {0x0B, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
	.DieCntPerChip = 1,
	.SectCntPerPage = 4,
	.PageCntPerBlk = 64,
	.BlkCntPerDie = 1024,
	.OperationOpt = NAND_DUAL_READ | NAND_QUAD_READ | NAND_MULTI_READ |
		NAND_MULTI_PROGRAM | NAND_MAX_BLK_ERASE_CNT,
	.AccessFreq = 100,
	.SpiMode = 0,
	.pagewithbadflag = FIRST_PAGE, /* the 1st page */
	.spi_nand_function = &spinand_function,
	.MultiPlaneBlockOffset = 1,
	.MaxEraseTimes = 65000,
	.EccType = BIT4_LIMIT5_TO_8_ERR15,
	.EccProtectedType = SIZE16_OFF0_LEN16,
	.ecc_status_shift = ECC_STATUS_SHIFT_4,
}

ID表具体信息参考文档: 《NAND物料调试指南v1.11》


3. Flash支持 - 方案2

drivers/mtd/aw-spinand/physic/id.c(包括 kernel & uboot)中,加入对应的类别,如下所示:

struct aw_spinand_phy_info dosilicon[] = {
    {
        .Model          = "DS35X1GAXXX",
        .NandID         = {0xe5, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
        .DieCntPerChip  = 1,
        .SectCntPerPage = 4,
        .PageCntPerBlk  = 64,
        .BlkCntPerDie   = 1024,
        .OobSizePerPage = 64,
        .OperationOpt   = SPINAND_QUAD_READ | SPINAND_QUAD_PROGRAM | SPINAND_DUAL_READ,
        .MaxEraseTimes  = 65000,
        .EccType        = BIT2_LIMIT1_ERR2,
        .EccProtectedType = SIZE16_OFF4_LEN4_OFF8,
        .BadBlockFlag = BAD_BLK_FLAG_FIRST_2_PAGE,
    },
};

如下图我的添加: