哪位好心人解释下vivi 中的 nand_read_ll的NFADDR设置这段啊
void nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
int i, j;
if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
return ; /* invalid alignment */
}
/* chip Enable */
NFCONF &= ~0x800;
for(i=0; i <10; i++);
for(i=start_addr; i < (start_addr + size);) {
/* READ0 */
NFCMD = 0;
/* Write Address */ //这段是什么意思?
NFADDR = i & 0xff;
NFADDR = (i > > 9) & 0xff;
NFADDR = (i > > 17) & 0xff;
NFADDR = (i > > 25) & 0xff;
wait_idle();
for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
*buf = (NFDATA & 0xff);
buf++;
}
}
/* chip Disable */
NFCONF |= 0x800; /* chip disable */
return ;
}
[解决办法]
NFADDR = (i > > 25) & 0xff;
的值了吗?前面的那三条都没有用啊!
有的器件是这样的,完成了一个读写,会自动跳指针,指向第一个存储空间,但是对上面的读写入口没变的
& 0xff;//感觉这个操作就是为了把i的低八位弄出来,然后弄到成八位的宽度...
当然,我没有你的硬件,我只是相当然,仅供参考