|
void nand_Ramdomwrite(uint block,uint page,uint add,uint length,uchar *dat)
{
uint i;
page +=(block<<6);
nand_enable();
nand_enable_rb();
nand_write_com(0x80);
nand_write_addr(0x00);
nand_write_addr(0x00);
nand_write_addr((page)&0xff);
nand_write_addr((page>>8)&0xff);
nand_write_addr((page>>16)&0xff);
nand_write_com(0x85);
nand_write_addr((char)add&0xff);
nand_write_addr((char)(add>>8)&0x0f);
for(i=0;i
{
nand_write_dat(dat[i]);
}
nand_write_com(0x10);
nand_check_busy();
nand_disable();
}
随机写,名字虽说是随机写==但是事实上的作用是对某一块一页内某一存储单元起的length长度写入dat
和页写函数没有太大差别。
可能难点是在于地址的理解。首先,第一句计算页号,这里说的地址是绝对地址,是相对于nand第1块第1页的地址,所有将block乘上64倍。这里用左移6位代替运算。这里要注意,直接使用乘除这类操作,是很浪费cpu资源的。然而移位操作要好的多。具体设计到cpu的架构,仅作了解就好 |
|