本帖最后由 张1239 于 2019-10-17 16:45 编辑
明白了明白了,查了网上各种资料结合例程代码,上文中的 ADDR_1st_CYCLE(ROW_ADDRESS)中的ROW_ADDRESS= (Address.Page + (Address.Block + (Address.Zone * NAND_ZONE_SIZE)) * NAND_BLOCK_SIZE),最低位为Page地址而非最小的byte地址,也就是说地址的改变是以页为最小单位,就是一页一页的翻,1Page=528byte。一页有528个字节,而在前512B中存放着用户的数据。在后面的16字节中(OOB)中存放着执行命令后的状态信息。主要是ECC校验的标识。所以我们读写就只操作前512字节,列地址A0-A7可以寻址的范围是256个字节,要寻址528字节的话,将一页分为了A.(1half array)B(2 half array) C(spare array)。A区0—255字节,B区 256-511 字节C区512—527字节,访问A还是B区由地址A8控制。所以 在进行页寻址前,先送A0~A7=0x00,8位数,2的8次方正好等于256,而A8来控制A区和B区,合起来正好512byte,ADDR_1st_CYCLE就是往A9~A16送页地址,写满一页页地址就+1,下图是的ADDR_1st_CYCLE函数的定义,这样就能解释的通了,我是这样理解的,如有不对还请大佬指教。
|