summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/ata-sd-pp.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/firmware/target/arm/ata-sd-pp.c b/firmware/target/arm/ata-sd-pp.c
index fafc5f20d9..7929449a23 100644
--- a/firmware/target/arm/ata-sd-pp.c
+++ b/firmware/target/arm/ata-sd-pp.c
@@ -546,11 +546,11 @@ static inline void copy_write_sectors(const unsigned char** buf)
546 546
547static int sd_select_bank(unsigned char bank) 547static int sd_select_bank(unsigned char bank)
548{ 548{
549 unsigned char card_data[512]; 549 unsigned char card_data[FIFO_LEN*2];// FIFO_LEN words=FIFO_LEN*2 bytes
550 const unsigned char* write_buf; 550 const unsigned char* write_buf;
551 int i, ret; 551 int i, ret;
552 552
553 memset(card_data, 0, 512); 553 memset(card_data, 0, sizeof card_data);
554 554
555 ret = sd_wait_for_state(SD_TRAN, EC_TRAN_SEL_BANK); 555 ret = sd_wait_for_state(SD_TRAN, EC_TRAN_SEL_BANK);
556 if (ret < 0) 556 if (ret < 0)
@@ -569,13 +569,15 @@ static int sd_select_bank(unsigned char bank)
569 card_data[0] = bank; 569 card_data[0] = bank;
570 570
571 /* Write the card data */ 571 /* Write the card data */
572 write_buf = card_data;
573 for (i = 0; i < SD_BLOCK_SIZE/2; i += FIFO_LEN) 572 for (i = 0; i < SD_BLOCK_SIZE/2; i += FIFO_LEN)
574 { 573 {
574 write_buf = card_data;
575 /* Wait for the FIFO to empty */ 575 /* Wait for the FIFO to empty */
576 if (sd_poll_status(STAT_XMIT_FIFO_EMPTY, 10000)) 576 if (sd_poll_status(STAT_XMIT_FIFO_EMPTY, 10000))
577 { 577 {
578 copy_write_sectors(&write_buf); /* Copy one chunk of 16 words */ 578 copy_write_sectors(&write_buf); /* Copy one chunk of 16 words */
579 /* clear buffer: only the first chunk contains interesting data (bank), the remaining is zero filling */
580 memset(card_data, 0, sizeof card_data);
579 continue; 581 continue;
580 } 582 }
581 583