From 3705cc09d14ed242cea2699f12d35be6dc5fb6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Mon, 15 Jun 2020 21:31:49 +0200 Subject: [PATCH] SDIO driver: Fix minor issues in SDIO driver --- .../fatfs/shimatta_sdio_driver/shimatta_sdio.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/stm-firmware/fatfs/shimatta_sdio_driver/shimatta_sdio.c b/stm-firmware/fatfs/shimatta_sdio_driver/shimatta_sdio.c index d764419..48cf8cc 100644 --- a/stm-firmware/fatfs/shimatta_sdio_driver/shimatta_sdio.c +++ b/stm-firmware/fatfs/shimatta_sdio_driver/shimatta_sdio.c @@ -238,6 +238,8 @@ static int sdio_check_status_register_cmd13(uint16_t rca, uint32_t *status) uint32_t response; int res; + *status = 0UL; + do { sdio_send_cmd(13, (rca<<16)&0xFFFF0000, SHORT_ANS); if (!(res = sdio_get_response(13, SHORT_ANS, &response))) { @@ -465,10 +467,14 @@ static int sdio_send_select_card_cmd7(uint16_t rca) { } while(--timeout > 0); /* Check, if card in in TRANS state */ - if (sdio_check_status_register_cmd13(rca, &(status.value))) + if (sdio_check_status_register_cmd13(rca, &status.value)) { res = -1; + goto ret_val; + } if (status.statusstruct.CURRENT_STATE != CURRENT_STATE_TRAN) res = -2; + +ret_val: return res; } @@ -705,9 +711,10 @@ DRESULT sdio_disk_write(const BYTE *buff, DWORD sector, UINT count) while (count) { do { - sdio_check_status_register_cmd13(card_info.rca, &status.value); + ret = sdio_check_status_register_cmd13(card_info.rca, &status.value); } while (status.statusstruct.CURRENT_STATE == CURRENT_STATE_PRG || - status.statusstruct.CURRENT_STATE == CURRENT_STATE_RCV); + status.statusstruct.CURRENT_STATE == CURRENT_STATE_RCV || + !ret); if (status.statusstruct.CURRENT_STATE == CURRENT_STATE_STBY) { if (sdio_send_select_card_cmd7(card_info.rca))