主题 : 关于韦东山的那书中NAND部分交流 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5367
精华: 0
发帖: 7
金钱: 70 两
威望: 70 点
综合积分: 14 分
注册时间: 2009-04-20
最后登录: 2009-05-29
楼主  发表于: 2009-04-26 17:14

 关于韦东山的那书中NAND部分交流

韦东山的嵌入式Linux 应用开发完全手册中NAND Flash中有这么个函数:
复制代码
  1. /* 读函数 */
  2. void nand_read(unsigned char *buf, unsigned long start_addr, int size)
  3. {
  4.     int i, j;
  5.     
  6.     if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
  7.         return ;    /* 地址或长度不对齐 */
  8.     }
  9.     /* 选中芯片 */
  10.     nand_select_chip();
  11.     for(i=start_addr; i < (start_addr + size);) {
  12.       /* 发出READ0命令 */
  13.       write_cmd(0);
  14.       /* Write Address */
  15.       write_addr(i);
  16.       wait_idle();
  17.       for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
  18.           *buf = read_data();
  19.           buf++;
  20.       }
  21.     }
  22.     /* 取消片选信号 */
  23.     nand_deselect_chip();
  24.     
  25.     return ;
  26. }

书上也有这么一句话137页第6点,连续读NFDATA寄存器512次,得到一页的数据。但是我觉得因为它发出的命令是:00H,那么也就是说列地址是A区的地址。也只能读取到A区的256字节的数据。因为要读B区的256字节的数据得发送01H命令。而这样连续的读521字节我觉得可能有两个结果:一,最后的256次读出的都是同一个字节也就是A区的最后一个字节。二,最后256次读出的是NFDATA默认的数据。因为NAND这个原程序编译完之后的大小是4196字节,也就是说main.o放在了第4096处只占用100字节。那么读完后运行当然不会有问题。可是如果main的大小大于256字节后在256~511字节的代码能不能读出来呢?
各位有什么见解,帮忙研究一下。谢谢。