Add software support for sd response codes
Polls the sd controller until the read flag is set, at which point it reads 32 bits of data from the controller. long response codes (such as CID) are not supported in hw or sw.
This commit is contained in:
25
sw/main.c
25
sw/main.c
@@ -9,6 +9,7 @@
|
||||
int main() {
|
||||
int i;
|
||||
uint8_t sw;
|
||||
uint32_t resp;
|
||||
char s[16];
|
||||
s[15] = 0;
|
||||
|
||||
@@ -51,16 +52,40 @@ int main() {
|
||||
// The RCA is hard coded for the one that I have on hand as responses
|
||||
// are not implemented yet.
|
||||
sd_card_command(0, 0);
|
||||
|
||||
sd_card_command(0x000001aa, 8);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD8: %lx\n", resp);
|
||||
|
||||
sd_card_command(0, 55);
|
||||
sd_card_command(0x40180000, 41);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD41: %lx\n", resp);
|
||||
|
||||
sd_card_command(0, 55);
|
||||
sd_card_command(0x40180000, 41);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD41: %lx\n", resp);
|
||||
|
||||
sd_card_command(0, 2);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD2: %lx\n", resp);
|
||||
|
||||
sd_card_command(0, 3);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD3: %lx\n", resp);
|
||||
|
||||
sd_card_command(0x59b40000, 7);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD7: %lx\n", resp);
|
||||
|
||||
sd_card_command(0x59b41000, 13);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD13: %lx\n", resp);
|
||||
|
||||
sd_card_command(0, 17);
|
||||
sd_card_resp(&resp);
|
||||
cprintf("CMD17: %lx\n", resp);
|
||||
|
||||
while (1) {
|
||||
|
||||
|
||||
@@ -5,4 +5,6 @@
|
||||
|
||||
void sd_card_command(uint32_t arg, uint8_t cmd);
|
||||
|
||||
void sd_card_resp(uint32_t* resp);
|
||||
|
||||
#endif
|
||||
25
sw/sd_card.s
25
sw/sd_card.s
@@ -1,8 +1,9 @@
|
||||
.include "io.inc65"
|
||||
|
||||
.importzp sp, sreg
|
||||
.importzp sp, sreg, ptr1
|
||||
|
||||
.export _sd_card_command
|
||||
.export _sd_card_resp
|
||||
|
||||
.autoimport on
|
||||
|
||||
@@ -25,3 +26,25 @@ _sd_card_command:
|
||||
pla
|
||||
sta SD_CMD
|
||||
rts
|
||||
|
||||
; void sd_card_resp(uint32_t* resp);
|
||||
_sd_card_resp:
|
||||
phy
|
||||
sta ptr1 ; store pointer
|
||||
stx ptr1+1
|
||||
@1: lda SD_CMD ; wait for status flag
|
||||
beq @1
|
||||
lda SD_ARG
|
||||
ldy #$0
|
||||
sta (ptr1),y
|
||||
lda SD_ARG+1
|
||||
iny
|
||||
sta (ptr1),y
|
||||
lda SD_ARG+2
|
||||
iny
|
||||
sta (ptr1),y
|
||||
lda SD_ARG+3
|
||||
iny
|
||||
sta (ptr1),y
|
||||
ply
|
||||
rts
|
||||
|
||||
Reference in New Issue
Block a user