当前位置: 代码迷 >> 驱动开发 >> 三星 nand flash 读写有关问题
  详细解决方案

三星 nand flash 读写有关问题

热度:546   发布时间:2016-04-28 10:48:22.0
三星 nand flash 读写问题
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);

//下面是把页数据写入
...
  相关解决方案