K9F2G08U0C是samsun出產的FLASH,容量為256MB 頁--Page: (2K + 64)Byte 塊--Block: (128K + 4K)Byte 128 / 2 = 64 Page 256M / 128 K = 2048 Block 現在以第25塊的30頁中的24byte為例 ...
- 計算物理地址
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++);