准备分析
经过了《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页,然后数据都输出到串口,再与原二进制文件对比。
资源工具
着手写程序
(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, ulong size, 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, i, large_block);
}
}
return 0;
}
下载运行
同《
S5PV210的LED应用(一)》
下载文件为:210210.bin
运行调试
与“特殊的进制文件AB”对比如图所示:
3个重要的点都没有出现问题,都能对应的上,证实了假设。
得到结论,16k以后的文件都是在NandFlash第4页开始存储的。