基于SigmaStar平台SSC377D,关于Uboot下升级,nand读写擦除以及跳坏块操作指导

1)Linux驱动开发相关问题,分享给将要学习或者正在学习Linux驱动开发的同学。

2)内容属于原创,若转载,请说明出处。

3)提供相关问题有偿答疑和支持。

先看下分区信息:

CIS中占据10个Block,其中第0 2 4 6 8 Block存放分区信息以及flash信息等,其中对应的Block Page0存放Flash信息,Page1存放分区表信息。uboot起来以后同样会去CIS分区读取Flash的信息和分区信息等等,下面看下大致流程,不做细节分析。

nand驱动入口:boot/drivers/mtd/nand/nand.c --> nand_init函数
其中在mtd_info/nand_chip中定义了一些nand的ops函数集以及对应的nand的参数信息等等,此数据结构贯穿整个nand的操作:

在nand_init_chip中做以上结构体赋值,并且注册nand 驱动:(其中nand_info是一个全局变量保存mtd的数据信息)

在board_nand_init中正式进入我们板载的nand初始化函数过程,在此函数中进行CSI的分区sni/pni等读取,以及初始化nand_chip结构:

在nand_scan中初始化mtd设备:

最后调用nand_register注册nand驱动:

因此nand的读写以一些参数信息就在以上的函数中被初始化和注册;
下面看下具体的uboot中nand erase / nand write / nane read 的流程:cmd_nand.c
如下是nand erase的流程:

如下是nand write / nand read的函数调用:

以上API全部定义在: boot/drivers/mtd/nand/nand_util.c 用户操作可以直接调取此API

下面简单看下以上的API的其中一个API:nand_write_skip_bad,如下看到会去判断坏块,接着会调用nand_write

因此以上的mtd读写实际回调到前面的nand_chip注册的API中,nand_chip注册的API也即是我们驱动的HAL读写;
下面以一个Demo实际操作下:(为了方便操作我这里新建一个cmd,调取以上API对kernel的分区0x480000地址进行擦除读写测试)
如下是原本的kernel数据,下面进行擦除:

如下是对擦除的数据进行读写判断:

如下是cmd_nand_ops_test的源码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值