📄 sdraw.lss
字号:
sdraw.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 000001fe 00800100 00000a2c 00000aa0 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000a2c 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 00000205 008002fe 00000c2a 00000c9e 2**0
ALLOC
3 .debug_aranges 00000080 00000000 00000000 00000c9e 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_pubnames 000001d0 00000000 00000000 00000d1e 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 00000b98 00000000 00000000 00000eee 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000004fa 00000000 00000000 00001a86 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 00000a7a 00000000 00000000 00001f80 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 000001b0 00000000 00000000 000029fc 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 0000033d 00000000 00000000 00002bac 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 000007aa 00000000 00000000 00002ee9 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_ranges 00000060 00000000 00000000 00003693 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end>
4: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
8: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
10: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
14: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
18: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
1c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
20: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
24: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
28: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
2c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
30: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
34: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
38: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
3c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
40: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
44: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
48: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
4c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
50: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
54: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
58: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
5c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
60: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
64: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
68: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
6c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
70: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
74: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
78: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
7c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
80: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
84: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
88: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
0000008c <__ctors_end>:
8c: 11 24 eor r1, r1
8e: 1f be out 0x3f, r1 ; 63
90: cf ef ldi r28, 0xFF ; 255
92: d0 e1 ldi r29, 0x10 ; 16
94: de bf out 0x3e, r29 ; 62
96: cd bf out 0x3d, r28 ; 61
00000098 <__do_copy_data>:
98: 12 e0 ldi r17, 0x02 ; 2
9a: a0 e0 ldi r26, 0x00 ; 0
9c: b1 e0 ldi r27, 0x01 ; 1
9e: ec e2 ldi r30, 0x2C ; 44
a0: fa e0 ldi r31, 0x0A ; 10
a2: 00 e0 ldi r16, 0x00 ; 0
a4: 0b bf out 0x3b, r16 ; 59
a6: 02 c0 rjmp .+4 ; 0xac <__do_copy_data+0x14>
a8: 07 90 elpm r0, Z+
aa: 0d 92 st X+, r0
ac: ae 3f cpi r26, 0xFE ; 254
ae: b1 07 cpc r27, r17
b0: d9 f7 brne .-10 ; 0xa8 <__do_copy_data+0x10>
000000b2 <__do_clear_bss>:
b2: 15 e0 ldi r17, 0x05 ; 5
b4: ae ef ldi r26, 0xFE ; 254
b6: b2 e0 ldi r27, 0x02 ; 2
b8: 01 c0 rjmp .+2 ; 0xbc <.do_clear_bss_start>
000000ba <.do_clear_bss_loop>:
ba: 1d 92 st X+, r1
000000bc <.do_clear_bss_start>:
bc: a3 30 cpi r26, 0x03 ; 3
be: b1 07 cpc r27, r17
c0: e1 f7 brne .-8 ; 0xba <.do_clear_bss_loop>
c2: 0e 94 07 04 call 0x80e ; 0x80e <main>
c6: 0c 94 14 05 jmp 0xa28 ; 0xa28 <_exit>
000000ca <__bad_interrupt>:
ca: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000ce <sdraw_card_detected>:
static uint8_t raw_block[512];
static uint8_t raw_block_written;
static uint32_t raw_block_address;
uint8_t sdraw_card_detected()
{
ce: 86 b3 in r24, 0x16 ; 22
d0: 82 95 swap r24
d2: 86 95 lsr r24
d4: 86 95 lsr r24
d6: 83 70 andi r24, 0x03 ; 3
d8: 80 95 com r24
return ((get_pin_cd() == 0x00) ? 1 : 0);
}
da: 81 70 andi r24, 0x01 ; 1
dc: 08 95 ret
000000de <sdraw_card_wp>:
uint8_t sdraw_card_wp()
{
de: 86 b3 in r24, 0x16 ; 22
e0: 80 95 com r24
return((get_pin_wp() == 0x00) ? 1 : 0);
}
e2: 88 1f adc r24, r24
e4: 88 27 eor r24, r24
e6: 88 1f adc r24, r24
e8: 08 95 ret
000000ea <sdraw_send_byte>:
/* send dummy data for receiving some */
return SPI_recv_byte();
}
void sdraw_send_byte(uint8_t data)
{
ea: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
SPI_send_byte(data);
}
ee: 08 95 ret
000000f0 <sdraw_recv_byte>:
{
return((get_pin_wp() == 0x00) ? 1 : 0);
}
uint8_t sdraw_recv_byte()
{
f0: 0e 94 e0 03 call 0x7c0 ; 0x7c0 <SPI_recv_byte>
/* send dummy data for receiving some */
return SPI_recv_byte();
}
f4: 08 95 ret
000000f6 <sdraw_send_command_r1>:
uint8_t sdraw_send_command_r1(uint8_t command, uint32_t arg)
{
f6: df 92 push r13
f8: ef 92 push r14
fa: ff 92 push r15
fc: 0f 93 push r16
fe: 1f 93 push r17
100: d8 2e mov r13, r24
102: 7a 01 movw r14, r20
104: 8b 01 movw r16, r22
}
uint8_t sdraw_recv_byte()
{
/* send dummy data for receiving some */
return SPI_recv_byte();
106: 0e 94 e0 03 call 0x7c0 ; 0x7c0 <SPI_recv_byte>
}
void sdraw_send_byte(uint8_t data)
{
SPI_send_byte(data);
10a: 8d 2d mov r24, r13
10c: 80 64 ori r24, 0x40 ; 64
10e: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
sdraw_send_byte(0x40 | command);
sdraw_send_byte((arg >> 24) & 0xFF);
sdraw_send_byte((arg >> 16) & 0xFF);
sdraw_send_byte((arg >> 8) & 0xFF);
sdraw_send_byte((arg >> 0) & 0xFF);
sdraw_send_byte(command == CMD_GO_IDLE_STATE ? 0x95 : 0xFF);
112: 81 2f mov r24, r17
114: 99 27 eor r25, r25
116: aa 27 eor r26, r26
118: bb 27 eor r27, r27
11a: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
11e: c8 01 movw r24, r16
120: aa 27 eor r26, r26
122: bb 27 eor r27, r27
124: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
128: bb 27 eor r27, r27
12a: a1 2f mov r26, r17
12c: 90 2f mov r25, r16
12e: 8f 2d mov r24, r15
130: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
134: 8e 2d mov r24, r14
136: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
13a: dd 20 and r13, r13
13c: 11 f0 breq .+4 ; 0x142 <sdraw_send_command_r1+0x4c>
13e: 8f ef ldi r24, 0xFF ; 255
140: 01 c0 rjmp .+2 ; 0x144 <sdraw_send_command_r1+0x4e>
142: 85 e9 ldi r24, 0x95 ; 149
return SPI_recv_byte();
}
void sdraw_send_byte(uint8_t data)
{
SPI_send_byte(data);
144: 0e 94 db 03 call 0x7b6 ; 0x7b6 <SPI_send_byte>
148: 10 e0 ldi r17, 0x00 ; 0
}
uint8_t sdraw_recv_byte()
{
/* send dummy data for receiving some */
return SPI_recv_byte();
14a: 0e 94 e0 03 call 0x7c0 ; 0x7c0 <SPI_recv_byte>
/* receive response */
for(i = 0; i < 10; ++i)
{
response = sdraw_recv_byte();
if(response != 0xFF)
14e: 8f 3f cpi r24, 0xFF ; 255
150: 19 f4 brne .+6 ; 0x158 <sdraw_send_command_r1+0x62>
sdraw_send_byte((arg >> 8) & 0xFF);
sdraw_send_byte((arg >> 0) & 0xFF);
sdraw_send_byte(command == CMD_GO_IDLE_STATE ? 0x95 : 0xFF);
/* receive response */
for(i = 0; i < 10; ++i)
152: 1f 5f subi r17, 0xFF ; 255
154: 1a 30 cpi r17, 0x0A ; 10
156: c9 f7 brne .-14 ; 0x14a <sdraw_send_command_r1+0x54>
if(response != 0xFF)
break;
}
return response;
}
158: 1f 91 pop r17
15a: 0f 91 pop r16
15c: ff 90 pop r15
15e: ef 90 pop r14
160: df 90 pop r13
162: 08 95 ret
00000164 <sdraw_get_info>:
return 1;
}
uint8_t sdraw_get_info(struct sdraw_info* info)
{
164: cf 92 push r12
166: df 92 push r13
168: ef 92 push r14
16a: ff 92 push r15
16c: 0f 93 push r16
16e: 1f 93 push r17
170: cf 93 push r28
172: df 93 push r29
174: 8c 01 movw r16, r24
uint8_t i, b;
uint8_t csd_read_bl_len = 0;
uint8_t csd_c_size_mult = 0;
uint16_t csd_c_size = 0;
if(!info || !sdraw_card_detected())
176: 00 97 sbiw r24, 0x00 ; 0
178: 09 f4 brne .+2 ; 0x17c <sdraw_get_info+0x18>
17a: 06 c1 rjmp .+524 ; 0x388 <sdraw_get_info+0x224>
static uint8_t raw_block_written;
static uint32_t raw_block_address;
uint8_t sdraw_card_detected()
{
return ((get_pin_cd() == 0x00) ? 1 : 0);
17c: 86 b3 in r24, 0x16 ; 22
uint8_t i, b;
uint8_t csd_read_bl_len = 0;
uint8_t csd_c_size_mult = 0;
uint16_t csd_c_size = 0;
if(!info || !sdraw_card_detected())
17e: 82 95 swap r24
180: 86 95 lsr r24
182: 86 95 lsr r24
184: 83 70 andi r24, 0x03 ; 3
186: 80 fd sbrc r24, 0
188: ff c0 rjmp .+510 ; 0x388 <sdraw_get_info+0x224>
return 0;
memset(info, 0, sizeof(*info));
18a: 89 e1 ldi r24, 0x19 ; 25
18c: f8 01 movw r30, r16
18e: 11 92 st Z+, r1
190: 8a 95 dec r24
192: e9 f7 brne .-6 ; 0x18e <sdraw_get_info+0x2a>
select_card();
194: 80 91 62 00 lds r24, 0x0062
198: 8f 77 andi r24, 0x7F ; 127
19a: 80 93 62 00 sts 0x0062, r24
/* read cid register */
if(sdraw_send_command_r1(CMD_SEND_CID, 0))
19e: 40 e0 ldi r20, 0x00 ; 0
1a0: 50 e0 ldi r21, 0x00 ; 0
1a2: 60 e0 ldi r22, 0x00 ; 0
1a4: 70 e0 ldi r23, 0x00 ; 0
1a6: 8a e0 ldi r24, 0x0A ; 10
1a8: 0e 94 7b 00 call 0xf6 ; 0xf6 <sdraw_send_command_r1>
1ac: 88 23 and r24, r24
1ae: 09 f0 breq .+2 ; 0x1b2 <sdraw_get_info+0x4e>
1b0: 65 c0 rjmp .+202 ; 0x27c <sdraw_get_info+0x118>
}
uint8_t sdraw_recv_byte()
{
/* send dummy data for receiving some */
return SPI_recv_byte();
1b2: 0e 94 e0 03 call 0x7c0 ; 0x7c0 <SPI_recv_byte>
{
unselect_card();
return 0;
}
while(sdraw_recv_byte() != 0xFE);
1b6: 8e 3f cpi r24, 0xFE ; 254
1b8: e1 f7 brne .-8 ; 0x1b2 <sdraw_get_info+0x4e>
1ba: d0 2e mov r13, r16
1bc: c8 01 movw r24, r16
1be: ec 01 movw r28, r24
1c0: e0 e6 ldi r30, 0x60 ; 96
1c2: ee 2e mov r14, r30
1c4: f1 2c mov r15, r1
}
uint8_t sdraw_recv_byte()
{
/* send dummy data for receiving some */
return SPI_recv_byte();
1c6: 0e 94 e0 03 call 0x7c0 ; 0x7c0 <SPI_recv_byte>
1ca: 28 2f mov r18, r24
for(i = 0; i < 18; ++i)
{
b = sdraw_recv_byte();
switch(i)
1cc: ae 01 movw r20, r28
1ce: 4d 19 sub r20, r13
1d0: 48 30 cpi r20, 0x08 ; 8
1d2: 28 f4 brcc .+10 ; 0x1de <sdraw_get_info+0x7a>
1d4: 43 30 cpi r20, 0x03 ; 3
1d6: 90 f4 brcc .+36 ; 0x1fc <sdraw_get_info+0x98>
1d8: 44 23 and r20, r20
1da: 59 f0 breq .+22 ; 0x1f2 <sdraw_get_info+0x8e>
1dc: 0d c0 rjmp .+26 ; 0x1f8 <sdraw_get_info+0x94>
1de: 4d 30 cpi r20, 0x0D ; 13
1e0: 18 f4 brcc .+6 ; 0x1e8 <sdraw_get_info+0x84>
1e2: 49 30 cpi r20, 0x09 ; 9
1e4: 80 f4 brcc .+32 ; 0x206 <sdraw_get_info+0xa2>
1e6: 0c c0 rjmp .+24 ; 0x200 <sdraw_get_info+0x9c>
1e8: 4d 30 cpi r20, 0x0D ; 13
1ea: 31 f1 breq .+76 ; 0x238 <sdraw_get_info+0xd4>
1ec: 4e 30 cpi r20, 0x0E ; 14
1ee: 91 f5 brne .+100 ; 0x254 <sdraw_get_info+0xf0>
1f0: 28 c0 rjmp .+80 ; 0x242 <sdraw_get_info+0xde>
{
case 0:
info->manufacturer = b;
1f2: f8 01 movw r30, r16
1f4: 20 83 st Z, r18
1f6: 2e c0 rjmp .+92 ; 0x254 <sdraw_get_info+0xf0>
break;
case 1:
case 2:
info->oem[i - 1] = b;
1f8: 28 83 st Y, r18
1fa: 2c c0 rjmp .+88 ; 0x254 <sdraw_get_info+0xf0>
case 3:
case 4:
case 5:
case 6:
case 7:
info->product[i - 3] = b;
1fc: 29 83 std Y+1, r18 ; 0x01
1fe: 2a c0 rjmp .+84 ; 0x254 <sdraw_get_info+0xf0>
break;
case 8:
info->revision = b;
200: f8 01 movw r30, r16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -