S5PV210的NandFlash应用(三)
发布时间:2020-12-15 18:06:37 所属栏目:百科 来源:网络整理
导读:准备分析 ? ? ? ? 经过了《S5PV210的NandFlash应用(二)》对于二进制文件前16k的存取方式都了一定的了解。这次要证明的是第NandFlash第4页以后存取方式。《S5PV210的NandFlash应用(二)》里边的210.bin(大小为16k)是以存到4k为单位存到了前4页(0,1,2,3)的每
准备分析
? ? ? ? 经过了《S5PV210的NandFlash应用(二)》对于二进制文件前16k的存取方式都了一定的了解。这次要证明的是第NandFlash第4页以后存取方式。《S5PV210的NandFlash应用(二)》里边的210.bin(大小为16k)是以存到4k为单位存到了前4页(0,1,2,3)的每页的前4k处。为此我自己写了一个8k的二进制文件(名字叫AB),贴在210.bin的后边,按照推断这8k应该存在了第4页。然后改到nand_cp.c以8k的方式,读取第4页,然后数据都输出到串口,再与原二进制文件对比。
资源工具
? ? ? ? 同《?
S5PV210的LED应用(一)》
? ? ? ? NandFlash: K9GAG08U0F (2G)
? ? ? ? 特殊的进制文件AB:
着手写程序
? ? ? ? (1)?int nandll_read_blocks (ulong dst_addr,ulong size,int large_block),读一块大小。这里改为以8k方式读一页。
? ? ? ? (2) cat 210.bin AB > 210210.bin 可以合并两个文件
具体的实现:
/*
?* Read data from NAND.
?*/
static int nandll_read_blocks (ulong dst_addr,int large_block)
{
? ? ? ??uchar *buf = (uchar *)dst_addr;
? ? ? ??int i;
? ? ? ??uint page_shift = 9;
? ? ? ??if (1 == large_block)
? ? ? ??{
? ? ? ??? ? ? ??page_shift = 11;
? ? ? ??? ? ? ??/* Read pages */
? ? ? ??? ? ? ??for (i = (0x6000>>page_shift); i < (size>>page_shift); i++,buf+=(1<<page_shift))?
? ? ? ??? ? ? ??{
? ? ? ? ? ? ? ??? ? ? ??nandll_read_page(buf,i,large_block);
? ? ? ??? ? ? ??}
? ? ? ??}
? ? ? ??else if(3 == large_block)
? ? ? ?{
? ? ? ??? ? ? ??page_shift = 13;
? ? ? ??? ? ? ??//以8k方式读一页
? ? ? ??? ? ? ??for (i = 4; i < 5; i++,buf+=(1<<(page_shift)))?
? ? ? ??? ? ? ??{
? ? ? ? ? ? ? ??? ? ? ??nandll_read_page(buf,large_block);
? ? ? ??? ? ? ??}
? ? ? ??}
? ? ? ??
? ? ? ? return 0;
}
下载运行
? ? ? ? 同《?
S5PV210的LED应用(一)》
? ? ? ? 下载文件为:210210.bin
运行调试
? ? ? ?
? ? ? ? 与“特殊的进制文件AB”对比如图所示:
? ? ? ??
3个重要的点都没有出现问题,都能对应的上,证实了假设。
? ? ? ? 得到结论,16k以后的文件都是在NandFlash第4页开始存储的。
? ? ? ? ?
遗留问题
??
? ? ? ? 1.无
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |