韦东山的嵌入式Linux 应用开发完全手册中NAND Flash中有这么个函数:
复制代码- /* 读函数 */
- void nand_read(unsigned char *buf, unsigned long start_addr, int size)
- {
- int i, j;
-
- if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
- return ; /* 地址或长度不对齐 */
- }
- /* 选中芯片 */
- nand_select_chip();
- for(i=start_addr; i < (start_addr + size);) {
- /* 发出READ0命令 */
- write_cmd(0);
- /* Write Address */
- write_addr(i);
- wait_idle();
- for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
- *buf = read_data();
- buf++;
- }
- }
- /* 取消片选信号 */
- nand_deselect_chip();
-
- return ;
- }
|
书上也有这么一句话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字节的代码能不能读出来呢?
各位有什么见解,帮忙研究一下。谢谢。