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.
This commit is contained in:
Anton Lazarev 2025-03-31 11:43:35 -07:00
parent 5d01712d84
commit 14bb4ee9e4
No known key found for this signature in database
GPG Key ID: FBD20243E0CD9104

View File

@ -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;
}