海思视觉Hi3516CV610--移植flash
SDK版本:Hi3516CV610R001C01SPC020flash型号:GD5F2GM7UEYIGR参考文档:基于fmcv100控制器的Flash移植指南.pdf。
本文描述如何添加一颗nand/nor flash到海思视觉芯片中;其中包括涉及到的所有参数以及添加的路径;
以NADN Flash GD5F2GM7UEYIGR为例,基础SDK版本 Hi3516CV610R001C01SPC020,参考文档《基于fmcv100控制器的Flash移植指南.pdf》
NOR Flash和其版本的SDK在本文同样适配;
说明
文档提供SPI Nand注册样例如下

因此只需确认以下参数即可适配Flash
.name
.id
.id_len
.chipsize
.erasesize
.pagesize
.oobsize
.badblock_pos
.read
.write
.erase
.driver
1 确认参数
.name
根据flash名字 GD5F2GM7UEYIGR,即
.name = "GD5F1GM7UEYIGR",
.id

从Flash手册中查找“READ ID Table”
.id = {0xc8, 0x91},
.id_len
根据.id参数确认长度为2即
.id_len = _2B,
.chipsize

确认flash容量1Gb=128MB,即:
.chipsize = _128M,
.erasesize&.pagesize&.oobsize


即:
.erasesize = _128K,
.pagesize = _2K,
.oobsize = _128B,
.read&.write&.erase
对于此参数根据路径:
uboot:drivers/mtd/nand/raw/fmc100/fmc_spi_nand_ids.c
kernel:drivers/mtd/nand/fmc100/fmc_spi_nand_ids.c

可选模式
.read可选模式
set_read_std
set_read_fast
set_read_dual
set_read_dual_addr
set_read_quad
set_read_quad_addr
.write可选模式
set_write_std
set_write_quad
.erase可选模式
set_erase_sector_128k
set_erase_sector_256k
确认Flash支持模式:
Flash支持以下模式:
.read:set_read_std、set_read_fast、set_read_dual、set_read_dual_addr、set_read_quad、set_read_quad_addr
.write:set_write_std、set_write_quad
.erase:set_erase_sector_128k
即:
read支持:
&read_std(x, y, z),
&read_fast(x, y, z),
&read_dual(x, y, z),
&read_dual_addr(x, y, z),
&read_quad(x, y, z),
&read_quad_addr(x, y, z),
write支持:
&write_std(x, y, z),
&write_quad(x, y, z),
erase支持:
&erase_sector_128k(x, y, z),
确认模式参数1 dummy:

根据文档截图
对于std模式下:read dummy的值为1,write和erase dummy值为0;
即:read_std dummy的值为1,read_fast、erase_sector_128k dummy的值为0
对于dual-output/input和quad-output/input模式下:read和write dummy的值为1;
即:read_dual、read_quad、write_quad的dummy 值为1
对于dual-I/O和quad-I/O模式下:

根据Flash数据手册(右图)dummy为8bit
即read_dual_addr的dummy值为1

根据Flash数据手册(右图)dummy为16bit
read_quad_addr的dummy值为2
确认模式参数3 速率:

根据Flash数据手册(右图)
flash最小速率为104Mhz,最大速率为133Mhz;
确认模式参数2
一般为固定参数,可以不确认
API确认
参数根据路径:
uboot:drivers/mtd/nand/raw/fmc100/fmc_spi_nand_ids.c
kernel:drivers/mtd/nand/fmc100/fmc_spi_nand_ids.c
可以选出以下接口

read支持:
&read_std(1, INFINITE, 24),
&read_fast(1, INFINITE, 133),
&read_dual(1, INFINITE, 133),
&read_dual_addr(1, INFINITE, 104),
&read_quad(1, INFINITE, 133),
&read_quad_addr(2, INFINITE, 104),
write支持:
&write_std(0, 256, 133),
&write_quad(0, 256, 133),
erase支持:
&erase_sector_128k(0, _128K, 133),
.driver

芯片为GD Flash芯片即
.driver = &spi_driver_general,
2 uboot移植
{
.name = "GD5F1GM7UEYIGR",
.id = {0xc8, 0x91},
.id_len = _2B,
.chipsize = _128M,
.erasesize = _128K,
.pagesize = _2K,
.oobsize = _128B,
.badblock_pos = BBP_FIRST_PAGE,
.read = {
&read_std(1, INFINITE, 24),
&read_fast(1, INFINITE, 133),
&read_dual(1, INFINITE, 133),
&read_dual_addr(1, INFINITE, 104),
&read_quad(1, INFINITE, 133),
&read_quad_addr(2, INFINITE, 104),
0
},
.write = {
&write_std(0, 256, 133),
&write_quad(0, 256, 133),
0
},
.erase = {
&erase_sector_128k(0, _128K, 104),
0
},
.driver = &spi_driver_general,
},
3 kernel移植
{
.name = "GD5F1GM7UEYIGR",
.id = {0xc8, 0x91},
.id_len = 2,
.chipsize = _128M,
.erasesize = _128K,
.pagesize = _2K,
.oobsize = 128,
.badblock_pos = BBP_FIRST_PAGE,
.read = {
&read_std(1, INFINITE, 24),
&read_fast(1, INFINITE, 133),
&read_dual(1, INFINITE, 133),
&read_dual_addr(1, INFINITE, 104),
&read_quad(1, INFINITE, 133),
&read_quad_addr(2, INFINITE, 104),
0
},
.write = {
&write_std(0, 256, 133),
&write_quad(0, 256, 133),
0
},
.erase = {
&erase_sector_128k(0, _128K, 133),
0
},
.driver = &spi_driver_general,
},
将上述flash适配的代码插入到uboot和kernel对应的结构体并重新编译SDK即可
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)