📄 nand.txt
字号:
;;;252 {
00029c e92d4010 STMFD sp!,{r4,lr}
;;;253 int i;
;;;254 U8 id,id1, id2,id3,id4;
;;;255
;;;256 NF_nFCE_L();
0002a0 e51fe08c LDR lr,|L1.540|
0002a4 e59ee004 LDR lr,[lr,#4]
0002a8 e3cee080 BIC lr,lr,#0x80
0002ac e51f4098 LDR r4,|L1.540|
0002b0 e584e004 STR lr,[r4,#4]
;;;257
;;;258 NF_CMD(0x90);
0002b4 e3a0e090 MOV lr,#0x90
0002b8 e584e008 STR lr,[r4,#8]
;;;259 NF_ADDR(0x0);
0002bc e3a0e000 MOV lr,#0
0002c0 e584e00c STR lr,[r4,#0xc]
;;;260
;;;261 for(i=0;i<10;i++); //wait tWB(100ns)////?????
0002c4 e3a01000 MOV r1,#0
|L1.712|
0002c8 e351000a CMP r1,#0xa
0002cc aa000001 BGE |L1.728|
0002d0 e2811001 ADD r1,r1,#1
0002d4 eafffffb B |L1.712|
;;;262
;;;263 // id=NF_RDDATA()<<8; // Maker code(K9S1208V:0xec)
;;;264 // id|=NF_RDDATA(); // Devide code(K9S1208V:0x76)
;;;265
;;;266 id1=NF_RDDATA(); // Maker code(K9S1208V:0xec)
|L1.728|
0002d8 e51fe0c4 LDR lr,|L1.540|
0002dc e59ee010 LDR lr,[lr,#0x10]
0002e0 e20e20ff AND r2,lr,#0xff
;;;267 id2=NF_RDDATA(); // Devide code(K9S1208V:0x76)
0002e4 e51fe0d0 LDR lr,|L1.540|
0002e8 e59ee010 LDR lr,[lr,#0x10]
0002ec e20e00ff AND r0,lr,#0xff
;;;268 id3=NF_RDDATA();
0002f0 e51fe0dc LDR lr,|L1.540|
0002f4 e59ee010 LDR lr,[lr,#0x10]
0002f8 e20e30ff AND r3,lr,#0xff
;;;269 id4=NF_RDDATA();
0002fc e51fe0e8 LDR lr,|L1.540|
000300 e59ee010 LDR lr,[lr,#0x10]
000304 e20ec0ff AND r12,lr,#0xff
;;;270
;;;271 NF_nFCE_H();
000308 e51fe0f4 LDR lr,|L1.540|
00030c e59ee004 LDR lr,[lr,#4]
000310 e38ee080 ORR lr,lr,#0x80
000314 e51f4100 LDR r4,|L1.540|
000318 e584e004 STR lr,[r4,#4]
;;;272 //Uart_Printf("\n%x,%x,%x,%x\n ",id1,id2,id3,id4);
;;;273 return id2;
;;;274 }
00031c e8bd8010 LDMFD sp!,{r4,pc}
ENDP
NF_Reset PROC
;;;296 void NF_Reset(void)
;;;297 {
000320 e51f110c LDR r1,|L1.540|
;;;298 int i;
;;;299 rNFCONT|=(3<<0); //software mode
000324 e5911004 LDR r1,[r1,#4]
000328 e3811003 ORR r1,r1,#3
00032c e51f2118 LDR r2,|L1.540|
000330 e5821004 STR r1,[r2,#4]
;;;300 NF_nFCE_L();
000334 e1a01002 MOV r1,r2
000338 e5911004 LDR r1,[r1,#4]
00033c e3c11080 BIC r1,r1,#0x80
000340 e5821004 STR r1,[r2,#4]
;;;301 NF_CLRRnB();
000344 e1a01002 MOV r1,r2
000348 e591102c LDR r1,[r1,#0x2c]
00034c e3811d80 ORR r1,r1,#0x2000
000350 e582102c STR r1,[r2,#0x2c]
;;;302 NF_CMD(0xFF); //reset command
000354 e3a010ff MOV r1,#0xff
000358 e1c22001 BIC r2,r2,r1
00035c e5821008 STR r1,[r2,#8]
;;;303
;;;304 for(i=0;i<10;i++); //tWB = 100ns. //??????
000360 e3a00000 MOV r0,#0
|L1.868|
000364 e350000a CMP r0,#0xa
000368 aa000001 BGE |L1.884|
00036c e2800001 ADD r0,r0,#1
000370 eafffffb B |L1.868|
;;;305 NF_TRANSRnB(); //wait 200~500us;
|L1.884|
000374 e1a00000 NOP
|L1.888|
000378 e51f1164 LDR r1,|L1.540|
00037c e591102c LDR r1,[r1,#0x2c]
000380 e3110d80 TST r1,#0x2000
000384 0afffffb BEQ |L1.888|
;;;306 NF_nFCE_H();
000388 e51f1174 LDR r1,|L1.540|
00038c e5911004 LDR r1,[r1,#4]
000390 e3811080 ORR r1,r1,#0x80
000394 e51f2180 LDR r2,|L1.540|
000398 e5821004 STR r1,[r2,#4]
;;;307 }
00039c e12fff1e BX lr
ENDP
NF_Init PROC
;;;321 static void NF_Init(void)
;;;322 {
0003a0 e52de004 STR lr,[sp,#-4]!
;;;323 rSROM_BW|=(1<<9);
0003a4 e51f018c LDR r0,|L1.544|
0003a8 e5900000 LDR r0,[r0,#0]
0003ac e3800f80 ORR r0,r0,#0x200
0003b0 e51f1198 LDR r1,|L1.544|
0003b4 e5810000 STR r0,[r1,#0]
;;;324
;;;325 rNFCONF=(0<<22)|(TECH<<16)|(TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<3)|(0<<2)|(1<<1)|(1<<0);
0003b8 e59f00f8 LDR r0,|L1.1208|
0003bc e1c11000 BIC r1,r1,r0
0003c0 e5810000 STR r0,[r1,#0]
;;;326 // AdvFlash(R) [22] Advanced NAND, 0:256/512, 1:1024/2048
;;;327 // TCEH [21:16] nCE High hold time
;;;328 // TACLS [14:12] CLE&ALE duration = HCLK*TACLS.
;;;329 // TWRPH0 [10:8] TWRPH0 duration = HCLK*(TWRPH0+1)
;;;330 // TWRPH1 [6:4] TWRPH1 duration = HCLK*(TWRPH1+1)
;;;331 // HW_nCE [3] H/W nCE control
;;;332 // BusWidth(H/W set) [2] NAND bus width. 0:8-bit, 1:16-bit.
;;;333 // PageSize(H/W set) [1] NAND memory page size
;;;334 // when [22]==0, 0:256, 1:512 bytes/page.
;;;335 // when [22]==1, 0:1024, 1:2048 bytes/page.
;;;336 // AddrCycle(H/W set) [0] NAND flash addr size
;;;337 // when [22]==0, 0:3-addr, 1:4-addr.
;;;338 // when [22]==1, 0:4-addr, 1:5-addr.
;;;339 // Advance off,Not support nCE ctl, 8bit, 512B, 4step
;;;340 rNFCONT=(0<<16)|(0<<15)|(0<<14)|(0<<13)|(0<<12)|(0<<11)|(1<<10)|(1<<9)|(0<<8)|(1<<7)|(0<<4)|(0<<3)|(1<<2)|(0<<0);
0003c4 e51f01a4 LDR r0,|L1.552|
0003c8 e1c11000 BIC r1,r1,r0
0003cc e5810004 STR r0,[r1,#4]
;;;341 // LdStrAddr illegalAccINT LoadINT StoreINT RnBINT TransMode SpareECCLock MainECCLock
;;;342 // initECC Reg_nCE PageSie Lock-tight Lock Software mode
;;;343 NF_Reset();
0003d0 ebfffffe BL NF_Reset
;;;344 }
0003d4 e49df004 LDR pc,[sp],#4
ENDP
Test_K9D1G08 PROC
;;;174 void Test_K9D1G08(void)
;;;175 {
0003d8 e92d4038 STMFD sp!,{r3-r5,lr}
;;;176 int i,id;
;;;177
;;;178 Uart_Printf("====== K9D1G08 Test ======\n");
0003dc e28f00d8 ADR r0,|L1.1212|
0003e0 ebfffffe BL _printf
;;;179
;;;180 while(1)
0003e4 e1a00000 NOP
|L1.1000|
0003e8 e1a00000 NOP
;;;181 {
;;;182 i=0;
0003ec e3a04000 MOV r4,#0
;;;183 //Uart_Printf("\n\n");
;;;184 NF_Init();
0003f0 ebfffffe BL NF_Init
;;;185 id=NF_CheckId();
0003f4 ebfffffe BL NF_CheckId
0003f8 e1a05000 MOV r5,r0
;;;186 if(id==0x79)
0003fc e3550079 CMP r5,#0x79
000400 1a000003 BNE |L1.1044|
;;;187 Uart_Printf("ID=%x(0x79)\n",id);
000404 e1a01005 MOV r1,r5
000408 e28f00c8 ADR r0,|L1.1240|
00040c ebfffffe BL _printf
000410 ea000003 B |L1.1060|
;;;188 else {
;;;189 Uart_Printf("Selection fail : ID=%x\n",id);
|L1.1044|
000414 e1a01005 MOV r1,r5
000418 e24f0f72 ADR r0,|L1.600|
00041c ebfffffe BL _printf
;;;190 return;
;;;191 }
;;;192 while(1)
;;;193 { //display menu
;;;194 Uart_Printf("%2d:%s",i,func_k9d1g08_test[i][1]);
;;;195 i++;
;;;196 if((int)(func_k9d1g08_test[i][0])==0)
;;;197 {
;;;198 Uart_Printf("\n");
;;;199 break;
;;;200 }
;;;201 if((i%4)==0)
;;;202 Uart_Printf("\n");
;;;203 }
;;;204
;;;205 Uart_Printf("\nPress Enter key to exit : ");
;;;206 i = Uart_GetIntNum();
;;;207 if(i==-1) break; // return.
;;;208 if(i>=0 && (i<((sizeof(func_k9d1g08_test)-1)/8)) ) // select and execute...
;;;209 ( (void (*)(void)) (func_k9d1g08_test[i][0]) )();
;;;210 }
;;;211 }
|L1.1056|
000420 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1060|
000424 e1a00000 NOP ;192
|L1.1064|
000428 e1a00000 NOP ;192
00042c e59f00b4 LDR r0,|L1.1256| ;194
000430 e0800184 ADD r0,r0,r4,LSL #3 ;194
000434 e1a01004 MOV r1,r4 ;194
000438 e5902004 LDR r2,[r0,#4] ;194
00043c e24f0f74 ADR r0,|L1.628| ;194
000440 ebfffffe BL _printf ;194
000444 e2844001 ADD r4,r4,#1 ;195
000448 e59f0098 LDR r0,|L1.1256| ;196
00044c e7900184 LDR r0,[r0,r4,LSL #3] ;196
000450 e3500000 CMP r0,#0 ;196
000454 1a000002 BNE |L1.1124| ;196
000458 e24f0f79 ADR r0,|L1.636| ;198
00045c ebfffffe BL _printf ;198
000460 ea000004 B |L1.1144| ;199
|L1.1124|
000464 e3140003 TST r4,#3 ;201
000468 1a000001 BNE |L1.1140| ;201
00046c e24f0f7e ADR r0,|L1.636| ;202
000470 ebfffffe BL _printf ;202
|L1.1140|
000474 eaffffeb B |L1.1064| ;203
|L1.1144|
000478 e24f0f80 ADR r0,|L1.640| ;205
00047c ebfffffe BL _printf ;205
000480 ebfffffe BL Uart_GetIntNum ;206
000484 e1a04000 MOV r4,r0 ;206
000488 e3740001 CMN r4,#1 ;207
00048c 1a000000 BNE |L1.1172| ;207
000490 ea000007 B |L1.1204| ;207
|L1.1172|
000494 e3540000 CMP r4,#0 ;208
000498 ba000004 BLT |L1.1200| ;208
00049c e3540006 CMP r4,#6 ;208
0004a0 2a000002 BCS |L1.1200| ;208
0004a4 e59f103c LDR r1,|L1.1256| ;209
0004a8 e7910184 LDR r0,[r1,r4,LSL #3] ;209
0004ac e12fff30 BLX r0 ;209
|L1.1200|
0004b0 eaffffcc B |L1.1000| ;210
|L1.1204|
0004b4 eaffffd9 B |L1.1056|
|L1.1208|
0004b8 003f7773 DCD 0x003f7773
|L1.1212|
0004bc 3d3d3d3d DCB "===="
0004c0 4b203d3d DCB "== K"
0004c4 47314439 DCB "9D1G"
0004c8 54203830 DCB "08 T"
0004cc 20747365 DCB "est "
0004d0 3d3d3d3d DCB "===="
0004d4 000a3d3d DCB "==\n\0"
|L1.1240|
0004d8 253d4449 DCB "ID=%"
0004dc 78302878 DCB "x(0x"
0004e0 0a293937 DCB "79)\n"
0004e4 00000000 DCB "\0\0\0\0"
|L1.1256|
0004e8 00000000 DCD func_k9d1g08_test
ENDP
Test_K9S1208 PROC
;;;134 void Test_K9S1208(void)
;;;135 {
0004ec e92d4038 STMFD sp!,{r3-r5,lr}
;;;136 int i,id;
;;;137
;;;138 Uart_Printf("====== K9S1208 Test ======\n");
0004f0 e28f00d4 ADR r0,|L1.1484|
0004f4 ebfffffe BL _printf
;;;139
;;;140 while(1)
0004f8 e1a00000 NOP
|L1.1276|
0004fc e1a00000 NOP
;;;141 {
;;;142 i=0;
000500 e3a04000 MOV r4,#0
;;;143 //Uart_Printf("\n\n");
;;;144 NF_Init();
000504 ebfffffe BL NF_Init
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -