- 计算物理地址
K9F2G08U0C是samsun出产的FLASH,容量为256MB
页--Page: (2K + 64)Byte
块--Block: (128K +
4K)Byte
128 / 2 = 64 Page
256M / 128 K = 2048 Block
现在以第25块的30页中的24byte为例
物理地址 = 块大小×块号 + 页大小×页号 + 页内地址
= 128K x 25 + 2K x 30 + 24B
= 3338264(10)
= 32F018 (16)
- 如图
- 计算我们需要发出的地址
-
每页有2048字节,需要2^11 = 2048,既需要11位地址
每块有64页,需要2^6 = 64,既需要6位地址
芯片一共有2048块,需要需要2^11 = 2048,既需要11位地址
0x32F018 = 0011 0010 1111 0000 0001 1000
由上图可得到实际发送的数据
1st: A7 - A0 = 0001 1000
2nd:A10 - A8 = 0000 0000 (A11没用到)
3rd:A19 - A12 = 0010 1111
4th:A27 - A20 = 0000 0011
5th:A28 = 0000 0000
注:*L 需要写入0
Code:
int i;
volatile unsigned char *p = (volatile unsigned char *)&s3c2440_nand->NFADDR;
*p = addr & 0xFF; // 1
for(i=0; i<10; i++);
*p = (addr>>12) & 0xFF; // 2
for(i=0; i<10; i++);
*p = (addr>>12) & 0xFF; // 3
for(i=0; i<10; i++);
*p = (addr>>20) & 0xFF; // 4
for(i=0; i<10; i++);
*p = (addr>>28) & 0xFF; // 5
for(i=0; i<10; i++);