sdc: make some space in memory for buffer CRC
This commit is contained in:
parent
34db493496
commit
cac9acca67
@ -65,12 +65,19 @@
|
|||||||
.equ SDC_BUFDIRTY1 SDC_BUFSEC1+2
|
.equ SDC_BUFDIRTY1 SDC_BUFSEC1+2
|
||||||
; The contents of the buffer.
|
; The contents of the buffer.
|
||||||
.equ SDC_BUF1 SDC_BUFDIRTY1+1
|
.equ SDC_BUF1 SDC_BUFDIRTY1+1
|
||||||
|
; CRC bytes for the buffer. They're placed after the contents because that makes
|
||||||
|
; things easier processing-wise. Because the SD card sends them right after the
|
||||||
|
; contents, all we need to do is read SDC_BLKSIZE+2.
|
||||||
|
; IMPORTANT NOTE: This is big endian. The SD card sends the MSB first, so we
|
||||||
|
; keep it in memory this way.
|
||||||
|
.equ SDC_CRC1 SDC_BUF1+SDC_BLKSIZE
|
||||||
|
|
||||||
; second buffer has the same structure as the first.
|
; second buffer has the same structure as the first.
|
||||||
.equ SDC_BUFSEC2 SDC_BUF1+SDC_BLKSIZE
|
.equ SDC_BUFSEC2 SDC_CRC1+2
|
||||||
.equ SDC_BUFDIRTY2 SDC_BUFSEC2+2
|
.equ SDC_BUFDIRTY2 SDC_BUFSEC2+2
|
||||||
.equ SDC_BUF2 SDC_BUFDIRTY2+1
|
.equ SDC_BUF2 SDC_BUFDIRTY2+1
|
||||||
.equ SDC_RAMEND SDC_BUF2+SDC_BLKSIZE
|
.equ SDC_CRC2 SDC_BUF2+SDC_BLKSIZE
|
||||||
|
.equ SDC_RAMEND SDC_CRC2+2
|
||||||
|
|
||||||
; *** Code ***
|
; *** Code ***
|
||||||
; Wake the SD card up. After power up, a SD card has to receive at least 74
|
; Wake the SD card up. After power up, a SD card has to receive at least 74
|
||||||
@ -350,8 +357,8 @@ sdcReadBlk:
|
|||||||
jr .error ; timeout. error out
|
jr .error ; timeout. error out
|
||||||
.loop1end:
|
.loop1end:
|
||||||
; We received our data token!
|
; We received our data token!
|
||||||
; Data packets follow immediately, we have 512 of them to read
|
; Data packets follow immediately, we have 512+CRC of them to read
|
||||||
ld bc, SDC_BLKSIZE
|
ld bc, SDC_BLKSIZE+2
|
||||||
ld hl, (SDC_BUFPTR) ; HL --> active buffer's sector
|
ld hl, (SDC_BUFPTR) ; HL --> active buffer's sector
|
||||||
; It sounds a bit wrong to set bufsec and dirty flag before we get our
|
; It sounds a bit wrong to set bufsec and dirty flag before we get our
|
||||||
; actual data, but at this point, we don't have any error conditions
|
; actual data, but at this point, we don't have any error conditions
|
||||||
@ -372,9 +379,6 @@ sdcReadBlk:
|
|||||||
cpi ; a trick to inc HL and dec BC at the same time.
|
cpi ; a trick to inc HL and dec BC at the same time.
|
||||||
; P/V indicates whether BC reached 0
|
; P/V indicates whether BC reached 0
|
||||||
jp pe, .loop2 ; BC is not zero, loop
|
jp pe, .loop2 ; BC is not zero, loop
|
||||||
; Read our 2 CRC bytes
|
|
||||||
call sdcIdle
|
|
||||||
call sdcIdle
|
|
||||||
; success! wait until card is ready
|
; success! wait until card is ready
|
||||||
call sdcWaitReady
|
call sdcWaitReady
|
||||||
xor a ; success
|
xor a ; success
|
||||||
@ -430,7 +434,10 @@ sdcWriteBlk:
|
|||||||
call sdcSendRecv
|
call sdcSendRecv
|
||||||
|
|
||||||
; Sending our data token!
|
; Sending our data token!
|
||||||
ld bc, SDC_BLKSIZE
|
ld bc, SDC_BLKSIZE+2 ; +2 for CRC. (as of now, however, that
|
||||||
|
; CRC isn't properly updated. Because
|
||||||
|
; CMD59 isn't enabled, it doesn't
|
||||||
|
; matter)
|
||||||
ld hl, (SDC_BUFPTR)
|
ld hl, (SDC_BUFPTR)
|
||||||
inc hl ; sector MSB
|
inc hl ; sector MSB
|
||||||
inc hl ; dirty flag
|
inc hl ; dirty flag
|
||||||
@ -442,9 +449,6 @@ sdcWriteBlk:
|
|||||||
cpi ; a trick to inc HL and dec BC at the same time.
|
cpi ; a trick to inc HL and dec BC at the same time.
|
||||||
; P/V indicates whether BC reached 0
|
; P/V indicates whether BC reached 0
|
||||||
jp pe, .loop ; BC is not zero, loop
|
jp pe, .loop ; BC is not zero, loop
|
||||||
; Send our 2 CRC bytes. They can be anything
|
|
||||||
call sdcIdle
|
|
||||||
call sdcIdle
|
|
||||||
; Let's see what response we have
|
; Let's see what response we have
|
||||||
call sdcWaitResp
|
call sdcWaitResp
|
||||||
and 0b00011111 ; We ignore the first 3 bits of the response.
|
and 0b00011111 ; We ignore the first 3 bits of the response.
|
||||||
@ -464,7 +468,6 @@ sdcWriteBlk:
|
|||||||
; Before returning, wait until card is ready
|
; Before returning, wait until card is ready
|
||||||
call sdcWaitReady
|
call sdcWaitReady
|
||||||
xor a
|
xor a
|
||||||
; A is already 0
|
|
||||||
jr .end
|
jr .end
|
||||||
.error:
|
.error:
|
||||||
; try to preserve error code
|
; try to preserve error code
|
||||||
|
Loading…
Reference in New Issue
Block a user