📄 mmc_sd.txt
字号:
000458 e2840001 ADD r0,r4,#1 ;280
00045c e20040ff AND r4,r0,#0xff ;280
000460 e3540003 CMP r4,#3 ;280
000464 3afffff5 BCC |L1.1088|
000468 e5980004 LDR r0,[r8,#4] ;287
00046c e3800602 ORR r0,r0,#0x200000 ;287
000470 e5880004 STR r0,[r8,#4] ;287
000474 e3a000ff MOV r0,#0xff ;288
000478 ebfffffe BL SPI_WriteByte
00047c e28f0e16 ADR r0,|L1.1508|
000480 ebfffffe BL __1printf
|L1.1156|
000484 e3a02000 MOV r2,#0 ;295
000488 e1a01002 MOV r1,r2 ;295
00048c e3a00037 MOV r0,#0x37 ;295
000490 ebfffffe BL MMC_SD_SendCommandCRC
000494 e3500001 CMP r0,#1 ;296
000498 1affffb5 BNE |L1.884|
00049c e3a02000 MOV r2,#0 ;302
0004a0 e3a01101 MOV r1,#0x40000000 ;302
0004a4 e3a00029 MOV r0,#0x29 ;302
0004a8 ebfffffe BL MMC_SD_SendCommandCRC
0004ac e1b04000 MOVS r4,r0 ;302
0004b0 1afffff3 BNE |L1.1156|
0004b4 e3a02000 MOV r2,#0 ;306
0004b8 e1a01002 MOV r1,r2 ;306
0004bc e3a0003a MOV r0,#0x3a ;306
0004c0 ebfffffe BL MMC_SD_SendCommandCRC_NoDeassert
0004c4 e3500000 CMP r0,#0 ;306
0004c8 1a00001a BNE |L1.1336|
0004cc e3a02000 MOV r2,#0 ;307
|L1.1232|
0004d0 e3a000ff MOV r0,#0xff ;307
0004d4 ebfffffe BL SPI_WriteByte
0004d8 e7ca0002 STRB r0,[r10,r2] ;307
0004dc e2820001 ADD r0,r2,#1 ;307
0004e0 e20020ff AND r2,r0,#0xff ;307
0004e4 e3520004 CMP r2,#4 ;307
0004e8 3afffff8 BCC |L1.1232|
0004ec e5dd0000 LDRB r0,[sp,#0] ;309
0004f0 e3100040 TST r0,#0x40 ;309
0004f4 13a00001 MOVNE r0,#1 ;310
0004f8 05c57000 STRBEQ r7,[r5,#0] ;312 ; address_mode
0004fc 15c50000 STRBNE r0,[r5,#0] ;310 ; address_mode
000500 e5980004 LDR r0,[r8,#4] ;314
000504 e3800602 ORR r0,r0,#0x200000 ;314
000508 e5880004 STR r0,[r8,#4] ;314
00050c e3a000ff MOV r0,#0xff ;315
000510 ebfffffe BL SPI_WriteByte
000514 e5869010 STR r9,[r6,#0x10] ;315
000518 ea000001 B |L1.1316|
|L1.1308|
00051c e28f00cc ADR r0,|L1.1520|
000520 ebfffffe BL __1printf
|L1.1316|
000524 e5d51000 LDRB r1,[r5,#0] ;327 ; address_mode
000528 e28f00d8 ADR r0,|L1.1544|
00052c ebfffffe BL __1printf
000530 e3a00000 MOV r0,#0 ;330
000534 eaffff8e B |L1.884|
|L1.1336|
000538 e1a01004 MOV r1,r4 ;332
00053c e28f00d8 ADR r0,|L1.1564|
000540 ebfffffe BL __1printf
000544 e5980004 LDR r0,[r8,#4] ;334
000548 e3800602 ORR r0,r0,#0x200000 ;334
00054c e5880004 STR r0,[r8,#4] ;334
000550 e3a000ff MOV r0,#0xff ;335
000554 ebfffffe BL SPI_WriteByte
|L1.1368|
000558 e3a00001 MOV r0,#1 ;336
00055c eaffff84 B |L1.884|
|L1.1376|
000560 e0068000 DCD 0xe0068000
|L1.1380|
000564 e0028000 DCD 0xe0028000
|L1.1384|
000568 e002c000 DCD 0xe002c000
|L1.1388|
00056c 000001aa DCD 0x000001aa
|L1.1392|
000570 00000000 DCD ||.data||
|L1.1396|
000574 0d0a5665 DCB "\r\n\126\145"
000578 7273696f DCB "rsio"
00057c 6e203100 DCB "n 1\0"
|L1.1408|
000580 0d0a2043 DCB "\r\n\40\103"
000584 4d443535 DCB "MD55"
000588 2072313d DCB " r1="
|L1.1420|
00058c 25782000 DCB "%x \0"
|L1.1424|
000590 0d0a5461 DCB "\r\n\124\141"
000594 6b652069 DCB "ke i"
000598 74206173 DCB "t as"
00059c 204d4d43 DCB " MMC"
0005a0 20636172 DCB " car"
0005a4 64200000 DCB "d \0\0"
|L1.1448|
0005a8 0d0a2054 DCB "\r\n\40\124"
0005ac 696d6520 DCB "ime "
0005b0 6f757420 DCB "out "
0005b4 00000000 DCB "\0\0\0\0"
|L1.1464|
0005b8 0d0a4469 DCB "\r\n\104\151"
0005bc 73616265 DCB "sabe"
0005c0 6c204352 DCB "l CR"
0005c4 43206572 DCB "C er"
0005c8 726f7200 DCB "ror\0"
|L1.1484|
0005cc 0d0a5365 DCB "\r\n\123\145"
0005d0 74207365 DCB "t se"
0005d4 63746f72 DCB "ctor"
0005d8 2073697a DCB " siz"
0005dc 65206572 DCB "e er"
0005e0 726f7200 DCB "ror\0"
|L1.1508|
0005e4 0d0a5665 DCB "\r\n\126\145"
0005e8 7273696f DCB "rsio"
0005ec 6e203200 DCB "n 2\0"
|L1.1520|
0005f0 0d0a6e6f DCB "\r\n\156\157"
0005f4 74207375 DCB "t su"
0005f8 70706f72 DCB "ppor"
0005fc 74656420 DCB "ted "
000600 63617264 DCB "card"
000604 00000000 DCB "\0\0\0\0"
|L1.1544|
000608 0d0a6164 DCB "\r\n\141\144"
00060c 64726573 DCB "dres"
000610 73206d6f DCB "s mo"
000614 6465203d DCB "de ="
000618 20256400 DCB " %d\0"
|L1.1564|
00061c 0d0a6578 DCB "\r\n\145\170"
000620 69742031 DCB "it 1"
000624 20207231 DCB " r1"
000628 3d257820 DCB "=%x "
00062c 00000000 DCB "\0\0\0\0"
ENDP
MMC_SD_ReadSingleBlock PROC
;;;342 uint8 MMC_SD_ReadSingleBlock(uint32 sector, uint8* buffer)
;;;343 {
000630 e92d4030 PUSH {r4,r5,lr}
000634 e1a05001 MOV r5,r1
;;;344 uint8 r1;
;;;345 uint16 i;
;;;346 uint32 retry=0;
;;;347
;;;348 //SPI_High(); /* Use High Speed SPI*/
;;;349
;;;350 r1 = MMC_SD_SendCommandCRC_NoDeassert(17, address_mode?sector:sector<<9,0);//读命令 //read command
000638 e51f10d0 LDR r1,|L1.1392|
00063c e3a04000 MOV r4,#0 ;346
000640 e5d11000 LDRB r1,[r1,#0] ; address_mode
000644 e3a02000 MOV r2,#0
000648 e3510000 CMP r1,#0
00064c 01a01480 LSLEQ r1,r0,#9
000650 11a01000 MOVNE r1,r0
000654 e3a00011 MOV r0,#0x11
000658 ebfffffe BL MMC_SD_SendCommandCRC_NoDeassert
;;;351
;;;352 if(r1 != 0x00)
00065c e3500000 CMP r0,#0
000660 1a000022 BNE |L1.1776|
;;;353 return r1;
;;;354
;;;355 SPI_CS_Assert;
000664 e51f3108 LDR r3,|L1.1380|
000668 e593000c LDR r0,[r3,#0xc]
00066c e3800602 ORR r0,r0,#0x200000
000670 e583000c STR r0,[r3,#0xc]
;;;356 //等数据的开始 //wait to start recieve data
;;;357 while(SPI_WriteByte(0xff) != 0xfe)if(retry++ > ACCESS_TIMEOUT){SPI_CS_Deassert;return 1;}
000674 ea000007 B |L1.1688|
|L1.1656|
000678 e1a00004 MOV r0,r4
00067c e3500807 CMP r0,#0x70000
000680 25930004 LDRCS r0,[r3,#4]
000684 e2844001 ADD r4,r4,#1
000688 23800602 ORRCS r0,r0,#0x200000
00068c 25830004 STRCS r0,[r3,#4]
000690 23a00001 MOVCS r0,#1
000694 2a000015 BCS |L1.1776|
|L1.1688|
000698 e3a000ff MOV r0,#0xff
00069c ebfffffe BL SPI_WriteByte
0006a0 e35000fe CMP r0,#0xfe
0006a4 1afffff3 BNE |L1.1656|
;;;358
;;;359 for(i=0; i<512; i++)//读512个数据 //read 512 bytes
0006a8 e3a02000 MOV r2,#0
|L1.1708|
;;;360 {
;;;361 *buffer++ = SPI_WriteByte(0xff);
0006ac e3a000ff MOV r0,#0xff
0006b0 ebfffffe BL SPI_WriteByte
0006b4 e4c50001 STRB r0,[r5],#1
0006b8 e2820001 ADD r0,r2,#1 ;359
0006bc e3c02801 BIC r2,r0,#0x10000 ;359
0006c0 e3520c02 CMP r2,#0x200 ;359
0006c4 3afffff8 BCC |L1.1708|
;;;362 }
;;;363
;;;364 SPI_WriteByte(0xff);//伪crc //dummy crc
0006c8 e3a000ff MOV r0,#0xff
0006cc ebfffffe BL SPI_WriteByte
;;;365 SPI_WriteByte(0xff);
0006d0 e3a000ff MOV r0,#0xff
0006d4 ebfffffe BL SPI_WriteByte
;;;366
;;;367 SPI_CS_Deassert;
0006d8 e5930004 LDR r0,[r3,#4]
0006dc e3800602 ORR r0,r0,#0x200000
0006e0 e5830004 STR r0,[r3,#4]
;;;368 SPI_WriteByte(0xff);// extra 8 CLK
0006e4 e3a000ff MOV r0,#0xff
0006e8 ebfffffe BL SPI_WriteByte
;;;369
;;;370 return 0;
0006ec e3a00000 MOV r0,#0
|L1.1776|
0006f0 e8bd4030 POP {r4,r5,lr}
;;;371 }
0006f4 e12fff1e BX lr
;;;372
ENDP
MMC_SD_WriteSingleBlock PROC
;;;375 uint8 MMC_SD_WriteSingleBlock(uint32 sector, uint8* buffer)
;;;376 {
0006f8 e92d4030 PUSH {r4,r5,lr}
0006fc e1a05001 MOV r5,r1
;;;377 uint8 r1;
;;;378 uint16 i;
;;;379 uint32 retry=0;
;;;380
;;;381 //SPI_High(); /* Use High Speed SPI*/
;;;382
;;;383 r1 = MMC_SD_SendCommandCRC_NoDeassert(24, address_mode?sector:sector<<9,0);//写命令 //send command
000700 e51f1198 LDR r1,|L1.1392|
000704 e3a04000 MOV r4,#0 ;379
000708 e5d11000 LDRB r1,[r1,#0] ; address_mode
00070c e3a02000 MOV r2,#0
000710 e3510000 CMP r1,#0
000714 01a01480 LSLEQ r1,r0,#9
000718 11a01000 MOVNE r1,r0
00071c e3a00018 MOV r0,#0x18
000720 ebfffffe BL MMC_SD_SendCommandCRC_NoDeassert
;;;384 if(r1 != 0x00)
000724 e3500000 CMP r0,#0
000728 1a000031 BNE |L1.2036|
;;;385 return r1;
;;;386
;;;387 SPI_CS_Assert;
00072c e51f31d0 LDR r3,|L1.1380|
000730 e593000c LDR r0,[r3,#0xc]
000734 e3800602 ORR r0,r0,#0x200000
000738 e583000c STR r0,[r3,#0xc]
;;;388
;;;389 SPI_WriteByte(0xff);
00073c e3a000ff MOV r0,#0xff
000740 ebfffffe BL SPI_WriteByte
;;;390 SPI_WriteByte(0xff);
000744 e3a000ff MOV r0,#0xff
000748 ebfffffe BL SPI_WriteByte
;;;391 SPI_WriteByte(0xff);
00074c e3a000ff MOV r0,#0xff
000750 ebfffffe BL SPI_WriteByte
;;;392
;;;393 SPI_WriteByte(0xfe);//发开始符 //send start byte "token"
000754 e3a000fe MOV r0,#0xfe
000758 ebfffffe BL SPI_WriteByte
;;;394
;;;395 for(i=0; i<512; i++)//送512字节数据 //send 512 bytes data
00075c e3a02000 MOV r2,#0
|L1.1888|
;;;396 {
;;;397 SPI_WriteByte(*buffer++);
000760 e4d50001 LDRB r0,[r5],#1
000764 ebfffffe BL SPI_WriteByte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -