hi 大家好:
我最近在看flash的驱动。环境就是在uboot下。
我的问题是这样:
现象:
nand write 时候column address 始终保持0,但是page的address 在自加。
函数:
do_nand -> nand_do_write_ops -> nand_write_page -> s3c_nand_write_page_8bit
在nand_write_page中调用chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
我把page打印出来page是从 0 1 2 3 ...... 511
那么我的理解是写flash的操作是以page为单位的。page 自加 完成偏移。
我看了网上的一篇文章,对于K9K8G08 flash的操作时候定义的寻址方式有出入。
A0 - A11 是col的地址,2K 个 Byte + 64 Byte的寻址。
A12 - A17 是page在block中的偏移量。应为有64个page组成一个block。
A18 - A30 是block的index。K9K8G08的片内一共有8192个block。
但是我自己写了一个测试函数去读flash的中的内容的时候发现 读出来的数据和写入的数据不符合。
我自己写的flash的read函数就是想要:
从第一个block中第一个page中读出前256Bytes (0 block 0 page offset 0 col)
函数这样写:
cmdfunc(mtd, NAND_CMD_READ0, 0, 0);
device_ready();
nand_read();
printf("content %X\n",buf);
打印出来的数据和uboot内容不一样。这是为什么啊?
谢谢
希望大侠 多指点!
------解决方案--------------------
是K9K8G08U0A吗?
/* Write specific command, Read from start */
WRITE_NAND_COMMAND(CMD_WRITE_1);
/* Push sector address */
//uSectorAddr >>= pNandInfo->uOffset;
WRITE_NAND_ADDRESS(0);
WRITE_NAND_ADDRESS(0);
WRITE_NAND_ADDRESS((chunkInNAND >> 0) & 0xFF);
WRITE_NAND_ADDRESS((chunkInNAND >> 8) & 0xFF);
WRITE_NAND_ADDRESS((chunkInNAND >> 16) & 0xFF);
//下面是把页数据写入
...