1、不同容量的nandflash命令是有差异的。。
2、对于超过4k的程序必须有程序copy程序。。。。
3、对于mini2440来说
col = addr & NAND_BLOCK_MASK_LP;
page = addr / NAND_SECTOR_SIZE_LP;
*p = col & 0xff; /* Column Address A0~A7 */
for(i=0; i<10; i++);
*p = (col >> 8) & 0x0f; /* Column Address A8~A11 */
for(i=0; i<10; i++);
*p = page & 0xff; /* Row Address A12~A19 */
for(i=0; i<10; i++);
*p = (page >> 8) & 0xff; /* Row Address A20~A27 */
for(i=0; i<10; i++);
*p = (page >> 16) & 0x03; /* Row Address A28~A29 */
for(i=0; i<10; i++);
这个注释中表的三个行地址分别是A12~A19, A20~A27, A28~A29。但实际代码中给的却是A11~A18,A19~A26,A27~A28。因为NAND_SECTOR_SIZE_LP等于2048,所以page就等于addr右移了11位,所以这个行地址的第一位就是A11
nand要求cpu必须把输入给它的地址中的A0~A10放到它自己的的A0~A11中,而把cpu输入的A11~A27地址放到自己的A12~A28中。所以上面代码中移位后的地址对应着cpu发出的地址,而注解中对应的却是nand自己的地址,之所以出现cpu发出的A11也输入到nand的A0~A11中,A28输入到A28~A29中(实际上是cpu的A27输入到nand的A28中),是因为资料手册中说的,cpu发出的多余地址,nand会自动把它省略掉
阅读(1485) | 评论(0) | 转发(0) |