Add more trys when switching data width

Try a few times before switching to other data widths. 
The original strategy (simply wait for 20ms ) failed on STM32H743 with an MTFC4GACAJCN-4M (4GB EMMC) when switching data width. 
(unless the debugging info is enabled, which add more delays)
With this EMMC, the fixed delay was set to 50ms for it to be able to work. 

Instead of a fixed delay, I think we better change to trying a few more times with smaller delays.
This commit is contained in:
Jianjia Ma 2021-04-13 18:04:59 +01:00 committed by GitHub
parent c44e5165be
commit 4e74279d27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 5 deletions

View File

@ -300,7 +300,7 @@ static int mmc_select_bus_width(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
MMCSD_BUS_WIDTH_1 MMCSD_BUS_WIDTH_1
}; };
struct rt_mmcsd_host *host = card->host; struct rt_mmcsd_host *host = card->host;
unsigned idx, bus_width = 0; unsigned idx, trys, bus_width = 0;
int err = 0; int err = 0;
if (GET_BITS(card->resp_cid, 122, 4) < 4) if (GET_BITS(card->resp_cid, 122, 4) < 4)
@ -335,10 +335,13 @@ static int mmc_select_bus_width(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
if (err) if (err)
continue; continue;
bus_width = bus_widths[idx]; for(trys = 0; trys < 5; trys++){
mmcsd_set_bus_width(host, bus_width); mmcsd_set_bus_width(host, bus_width);
mmcsd_delay_ms(20); //delay 10ms mmcsd_delay_ms(10);
err = mmc_compare_ext_csds(card, ext_csd, bus_width); err = mmc_compare_ext_csds(card, ext_csd, bus_width);
if(!err)
break;
}
if (!err) { if (!err) {
err = bus_width; err = bus_width;
break; break;