📄 sd_lib.lss
字号:
150: 0e 94 8e 00 call 0x11c <spiTransferByte>
spiTransferByte(arg>>16);
154: c8 01 movw r24, r16
156: aa 27 eor r26, r26
158: bb 27 eor r27, r27
15a: 0e 94 8e 00 call 0x11c <spiTransferByte>
spiTransferByte(arg>>8);
15e: bb 27 eor r27, r27
160: a1 2f mov r26, r17
162: 90 2f mov r25, r16
164: 8f 2d mov r24, r15
166: 0e 94 8e 00 call 0x11c <spiTransferByte>
spiTransferByte(arg);
16a: 8e 2d mov r24, r14
16c: 0e 94 8e 00 call 0x11c <spiTransferByte>
spiTransferByte(0x95); // crc valid only for MMC_GO_IDLE_STATE
170: 85 e9 ldi r24, 0x95 ; 149
172: 0e 94 8e 00 call 0x11c <spiTransferByte>
// end command
// wait for response
// if more than 8 retries, card has timed-out
// return the received 0xFF
while((r1=spiTransferByte(0xFF))==0xFF)if(retry++>8)break;
176: 04 c0 rjmp .+8 ; 0x180 <mmcCommand+0x4e>
178: 8c 2f mov r24, r28
17a: cf 5f subi r28, 0xFF ; 255
17c: 89 30 cpi r24, 0x09 ; 9
17e: 30 f4 brcc .+12 ; 0x18c <mmcCommand+0x5a>
180: 8f ef ldi r24, 0xFF ; 255
182: 0e 94 8e 00 call 0x11c <spiTransferByte>
186: 98 2f mov r25, r24
188: 8f 3f cpi r24, 0xFF ; 255
18a: b1 f3 breq .-20 ; 0x178 <mmcCommand+0x46>
// return response
return r1;
}
18c: 89 2f mov r24, r25
18e: 99 27 eor r25, r25
190: cf 91 pop r28
192: 1f 91 pop r17
194: 0f 91 pop r16
196: ff 90 pop r15
198: ef 90 pop r14
19a: 08 95 ret
0000019c <mmcSendCommand>:
19c: 9a 01 movw r18, r20
19e: ab 01 movw r20, r22
1a0: c4 98 cbi 0x18, 4 ; 24
1a2: ba 01 movw r22, r20
1a4: a9 01 movw r20, r18
1a6: 0e 94 99 00 call 0x132 <mmcCommand>
1aa: c4 9a sbi 0x18, 4 ; 24
1ac: 99 27 eor r25, r25
1ae: 08 95 ret
000001b0 <mmcReset_1>:
1b0: 1f 93 push r17
1b2: cf 93 push r28
1b4: 10 e0 ldi r17, 0x00 ; 0
1b6: c9 e0 ldi r28, 0x09 ; 9
1b8: 8f ef ldi r24, 0xFF ; 255
1ba: 0e 94 8e 00 call 0x11c <spiTransferByte>
1be: c1 50 subi r28, 0x01 ; 1
1c0: c7 ff sbrs r28, 7
1c2: fa cf rjmp .-12 ; 0x1b8 <mmcReset_1+0x8>
1c4: 40 e0 ldi r20, 0x00 ; 0
1c6: 50 e0 ldi r21, 0x00 ; 0
1c8: 60 e0 ldi r22, 0x00 ; 0
1ca: 70 e0 ldi r23, 0x00 ; 0
1cc: 80 e0 ldi r24, 0x00 ; 0
1ce: 0e 94 ce 00 call 0x19c <mmcSendCommand>
1d2: 1f 5f subi r17, 0xFF ; 255
1d4: 1b 30 cpi r17, 0x0B ; 11
1d6: 68 f4 brcc .+26 ; 0x1f2 <mmcReset_1+0x42>
1d8: 81 30 cpi r24, 0x01 ; 1
1da: 69 f7 brne .-38 ; 0x1b6 <mmcReset_1+0x6>
1dc: 10 e0 ldi r17, 0x00 ; 0
1de: 40 e0 ldi r20, 0x00 ; 0
1e0: 50 e0 ldi r21, 0x00 ; 0
1e2: 60 e0 ldi r22, 0x00 ; 0
1e4: 70 e0 ldi r23, 0x00 ; 0
1e6: 81 e0 ldi r24, 0x01 ; 1
1e8: 0e 94 ce 00 call 0x19c <mmcSendCommand>
1ec: 1f 5f subi r17, 0xFF ; 255
1ee: 15 36 cpi r17, 0x65 ; 101
1f0: 18 f0 brcs .+6 ; 0x1f8 <mmcReset_1+0x48>
1f2: 8f ef ldi r24, 0xFF ; 255
1f4: 90 e0 ldi r25, 0x00 ; 0
1f6: 12 c0 rjmp .+36 ; 0x21c <mmcReset_1+0x6c>
1f8: 88 23 and r24, r24
1fa: 89 f7 brne .-30 ; 0x1de <mmcReset_1+0x2e>
1fc: 40 e0 ldi r20, 0x00 ; 0
1fe: 50 e0 ldi r21, 0x00 ; 0
200: 60 e0 ldi r22, 0x00 ; 0
202: 70 e0 ldi r23, 0x00 ; 0
204: 8b e3 ldi r24, 0x3B ; 59
206: 0e 94 ce 00 call 0x19c <mmcSendCommand>
20a: 40 e0 ldi r20, 0x00 ; 0
20c: 52 e0 ldi r21, 0x02 ; 2
20e: 60 e0 ldi r22, 0x00 ; 0
210: 70 e0 ldi r23, 0x00 ; 0
212: 80 e1 ldi r24, 0x10 ; 16
214: 0e 94 ce 00 call 0x19c <mmcSendCommand>
218: 80 e0 ldi r24, 0x00 ; 0
21a: 90 e0 ldi r25, 0x00 ; 0
21c: cf 91 pop r28
21e: 1f 91 pop r17
220: 08 95 ret
00000222 <mmcReset>:
222: cf 93 push r28
224: c0 e0 ldi r28, 0x00 ; 0
226: 0e 94 d8 00 call 0x1b0 <mmcReset_1>
22a: 88 23 and r24, r24
22c: 19 f4 brne .+6 ; 0x234 <mmcReset+0x12>
22e: 80 e0 ldi r24, 0x00 ; 0
230: 90 e0 ldi r25, 0x00 ; 0
232: 05 c0 rjmp .+10 ; 0x23e <mmcReset+0x1c>
234: cf 5f subi r28, 0xFF ; 255
236: c2 33 cpi r28, 0x32 ; 50
238: b0 f3 brcs .-20 ; 0x226 <mmcReset+0x4>
23a: 8f ef ldi r24, 0xFF ; 255
23c: 90 e0 ldi r25, 0x00 ; 0
23e: cf 91 pop r28
240: 08 95 ret
00000242 <mmcRead>:
242: 0f 93 push r16
244: 1f 93 push r17
246: cf 93 push r28
248: df 93 push r29
24a: dc 01 movw r26, r24
24c: cb 01 movw r24, r22
24e: 8a 01 movw r16, r20
250: c4 98 cbi 0x18, 4 ; 24
252: 39 e0 ldi r19, 0x09 ; 9
254: 88 0f add r24, r24
256: 99 1f adc r25, r25
258: aa 1f adc r26, r26
25a: bb 1f adc r27, r27
25c: 3a 95 dec r19
25e: d1 f7 brne .-12 ; 0x254 <mmcRead+0x12>
260: ac 01 movw r20, r24
262: bd 01 movw r22, r26
264: 81 e1 ldi r24, 0x11 ; 17
266: 0e 94 99 00 call 0x132 <mmcCommand>
26a: 88 23 and r24, r24
26c: 11 f0 breq .+4 ; 0x272 <mmcRead+0x30>
26e: 99 27 eor r25, r25
270: 19 c0 rjmp .+50 ; 0x2a4 <mmcRead+0x62>
272: 8f ef ldi r24, 0xFF ; 255
274: 0e 94 8e 00 call 0x11c <spiTransferByte>
278: 8e 3f cpi r24, 0xFE ; 254
27a: d9 f7 brne .-10 ; 0x272 <mmcRead+0x30>
27c: cf ef ldi r28, 0xFF ; 255
27e: d1 e0 ldi r29, 0x01 ; 1
280: 8f ef ldi r24, 0xFF ; 255
282: 0e 94 8e 00 call 0x11c <spiTransferByte>
286: f8 01 movw r30, r16
288: 81 93 st Z+, r24
28a: 8f 01 movw r16, r30
28c: 21 97 sbiw r28, 0x01 ; 1
28e: d7 ff sbrs r29, 7
290: f7 cf rjmp .-18 ; 0x280 <mmcRead+0x3e>
292: 8f ef ldi r24, 0xFF ; 255
294: 0e 94 8e 00 call 0x11c <spiTransferByte>
298: 8f ef ldi r24, 0xFF ; 255
29a: 0e 94 8e 00 call 0x11c <spiTransferByte>
29e: c4 9a sbi 0x18, 4 ; 24
2a0: 80 e0 ldi r24, 0x00 ; 0
2a2: 90 e0 ldi r25, 0x00 ; 0
2a4: df 91 pop r29
2a6: cf 91 pop r28
2a8: 1f 91 pop r17
2aa: 0f 91 pop r16
2ac: 08 95 ret
000002ae <mmcWrite>:
2ae: 0f 93 push r16
2b0: 1f 93 push r17
2b2: cf 93 push r28
2b4: df 93 push r29
2b6: dc 01 movw r26, r24
2b8: cb 01 movw r24, r22
2ba: 8a 01 movw r16, r20
2bc: c4 98 cbi 0x18, 4 ; 24
2be: 49 e0 ldi r20, 0x09 ; 9
2c0: 88 0f add r24, r24
2c2: 99 1f adc r25, r25
2c4: aa 1f adc r26, r26
2c6: bb 1f adc r27, r27
2c8: 4a 95 dec r20
2ca: d1 f7 brne .-12 ; 0x2c0 <mmcWrite+0x12>
2cc: ac 01 movw r20, r24
2ce: bd 01 movw r22, r26
2d0: 88 e1 ldi r24, 0x18 ; 24
2d2: 0e 94 99 00 call 0x132 <mmcCommand>
2d6: 88 23 and r24, r24
2d8: 11 f0 breq .+4 ; 0x2de <mmcWrite+0x30>
2da: 99 27 eor r25, r25
2dc: 2a c0 rjmp .+84 ; 0x332 <mmcWrite+0x84>
2de: 8f ef ldi r24, 0xFF ; 255
2e0: 0e 94 8e 00 call 0x11c <spiTransferByte>
2e4: 8e ef ldi r24, 0xFE ; 254
2e6: 0e 94 8e 00 call 0x11c <spiTransferByte>
2ea: cf ef ldi r28, 0xFF ; 255
2ec: d1 e0 ldi r29, 0x01 ; 1
2ee: f8 01 movw r30, r16
2f0: 81 91 ld r24, Z+
2f2: 8f 01 movw r16, r30
2f4: 0e 94 8e 00 call 0x11c <spiTransferByte>
2f8: 21 97 sbiw r28, 0x01 ; 1
2fa: d7 ff sbrs r29, 7
2fc: f8 cf rjmp .-16 ; 0x2ee <mmcWrite+0x40>
2fe: 8f ef ldi r24, 0xFF ; 255
300: 0e 94 8e 00 call 0x11c <spiTransferByte>
304: 8f ef ldi r24, 0xFF ; 255
306: 0e 94 8e 00 call 0x11c <spiTransferByte>
30a: 8f ef ldi r24, 0xFF ; 255
30c: 0e 94 8e 00 call 0x11c <spiTransferByte>
310: 28 2f mov r18, r24
312: 33 27 eor r19, r19
314: c9 01 movw r24, r18
316: 8f 71 andi r24, 0x1F ; 31
318: 90 70 andi r25, 0x00 ; 0
31a: 05 97 sbiw r24, 0x05 ; 5
31c: 11 f0 breq .+4 ; 0x322 <mmcWrite+0x74>
31e: c9 01 movw r24, r18
320: 08 c0 rjmp .+16 ; 0x332 <mmcWrite+0x84>
322: 8f ef ldi r24, 0xFF ; 255
324: 0e 94 8e 00 call 0x11c <spiTransferByte>
328: 88 23 and r24, r24
32a: d9 f3 breq .-10 ; 0x322 <mmcWrite+0x74>
32c: c4 9a sbi 0x18, 4 ; 24
32e: 80 e0 ldi r24, 0x00 ; 0
330: 90 e0 ldi r25, 0x00 ; 0
332: df 91 pop r29
334: cf 91 pop r28
336: 1f 91 pop r17
338: 0f 91 pop r16
33a: 08 95 ret
0000033c <Read_CID_MMC>:
//-------------------------------------------------------------------------
//Routine for reading CID Registers from MMC/SD-Card (16Bytes)
//Return 0 if no Error.
uint8_t Read_CID_MMC(uint8_t *buffer){
33c: 1f 93 push r17
33e: cf 93 push r28
340: df 93 push r29
342: ec 01 movw r28, r24
uint8_t r1,i;
CSL; // assert chip select
344: c4 98 cbi 0x18, 4 ; 24
r1 = mmcCommand(MMC_SEND_CID,0); // reading CID Registers
346: 40 e0 ldi r20, 0x00 ; 0
348: 50 e0 ldi r21, 0x00 ; 0
34a: 60 e0 ldi r22, 0x00 ; 0
34c: 70 e0 ldi r23, 0x00 ; 0
34e: 8a e0 ldi r24, 0x0A ; 10
350: 0e 94 99 00 call 0x132 <mmcCommand>
if(r1 != 0)return r1;
354: 88 23 and r24, r24
356: 11 f0 breq .+4 ; 0x35c <Read_CID_MMC+0x20>
358: 99 27 eor r25, r25
35a: 17 c0 rjmp .+46 ; 0x38a <Read_CID_MMC+0x4e>
while(spiTransferByte(0xFF)!=MMC_STARTBLOCK_READ);// wait for block start
35c: 8f ef ldi r24, 0xFF ; 255
35e: 0e 94 8e 00 call 0x11c <spiTransferByte>
362: 8e 3f cpi r24, 0xFE ; 254
364: d9 f7 brne .-10 ; 0x35c <Read_CID_MMC+0x20>
366: 1f e0 ldi r17, 0x0F ; 15
for(i=0; i<16; i++){
*buffer++=spiTransferByte(0xFF); // read in data 16Byte
368: 8f ef ldi r24, 0xFF ; 255
36a: 0e 94 8e 00 call 0x11c <spiTransferByte>
36e: 89 93 st Y+, r24
370: 11 50 subi r17, 0x01 ; 1
372: 17 ff sbrs r17, 7
374: f9 cf rjmp .-14 ; 0x368 <Read_CID_MMC+0x2c>
376: 1f ef ldi r17, 0xFF ; 255
}
spiTransferByte(0xFF); // read 16-bit CRC
378: 81 2f mov r24, r17
37a: 0e 94 8e 00 call 0x11c <spiTransferByte>
spiTransferByte(0xFF);
37e: 81 2f mov r24, r17
380: 0e 94 8e 00 call 0x11c <spiTransferByte>
CSH; // release chip select
384: c4 9a sbi 0x18, 4 ; 24
return(0);
386: 80 e0 ldi r24, 0x00 ; 0
388: 90 e0 ldi r25, 0x00 ; 0
38a: df 91 pop r29
38c: cf 91 pop r28
38e: 1f 91 pop r17
390: 08 95 ret
00000392 <Read_CSD_MMC>:
}
//-------------------------------------------------------------------------
//Routine for reading CSD Registers from MMC/SD-Card (16Bytes)
//Return 0 if no Error.
uint8_t Read_CSD_MMC(uint8_t *buffer){
392: 1f 93 push r17
394: cf 93 push r28
396: df 93 push r29
398: ec 01 movw r28, r24
uint8_t r1,i;
CSL; // assert chip select
39a: c4 98 cbi 0x18, 4 ; 24
r1 = mmcCommand(MMC_SEND_CSD,0); // reading CSD Registers
39c: 40 e0 ldi r20, 0x00 ; 0
39e: 50 e0 ldi r21, 0x00 ; 0
3a0: 60 e0 ldi r22, 0x00 ; 0
3a2: 70 e0 ldi r23, 0x00 ; 0
3a4: 89 e0 ldi r24, 0x09 ; 9
3a6: 0e 94 99 00 call 0x132 <mmcCommand>
if(r1 != 0)return r1;
3aa: 88 23 and r24, r24
3ac: 11 f0 breq .+4 ; 0x3b2 <Read_CSD_MMC+0x20>
3ae: 99 27 eor r25, r25
3b0: 17 c0 rjmp .+46 ; 0x3e0 <Read_CSD_MMC+0x4e>
while(spiTransferByte(0xFF)!=MMC_STARTBLOCK_READ);// wait for block start
3b2: 8f ef ldi r24, 0xFF ; 255
3b4: 0e 94 8e 00 call 0x11c <spiTransferByte>
3b8: 8e 3f cpi r24, 0xFE ; 254
3ba: d9 f7 brne .-10 ; 0x3b2 <Read_CSD_MMC+0x20>
3bc: 1f e0 ldi r17, 0x0F ; 15
for(i=0; i<16; i++){
*buffer++=spiTransferByte(0xFF); // read in data
3be: 8f ef ldi r24, 0xFF ; 255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -