From 14bb4ee9e414137f318f64e82d808d4012e30680 Mon Sep 17 00:00:00 2001 From: Anton Lazarev Date: Mon, 31 Mar 2025 11:43:35 -0700 Subject: [PATCH] use ready_for_data status to determine when write has finished `read_sd_status` works, but it's somewhat of a hack, but also won't work on eMMC devices. The official spec for both SD and eMMC recommends using this method. --- embassy-stm32/src/sdmmc/mod.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/embassy-stm32/src/sdmmc/mod.rs b/embassy-stm32/src/sdmmc/mod.rs index 2229347f4..a28fd51e8 100644 --- a/embassy-stm32/src/sdmmc/mod.rs +++ b/embassy-stm32/src/sdmmc/mod.rs @@ -1292,12 +1292,12 @@ impl<'d, T: Instance> Sdmmc<'d, T> { // TODO: Make this configurable let mut timeout: u32 = 0x00FF_FFFF; - // Try to read card status (ACMD13) + let card = self.card.as_ref().unwrap(); while timeout > 0 { - match self.read_sd_status().await { - Ok(_) => return Ok(()), - Err(Error::Timeout) => (), // Try again - Err(e) => return Err(e), + let status = self.read_status(card)?; + + if status.ready_for_data() { + return Ok(()); } timeout -= 1; }