From f471f72d3173f91ebbc1b6eb797278e7ff988e4e Mon Sep 17 00:00:00 2001 From: Brian Schwind Date: Sat, 4 Oct 2025 13:30:06 +0900 Subject: xspi: properly configure the transfer size --- embassy-stm32/src/xspi/mod.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/embassy-stm32/src/xspi/mod.rs b/embassy-stm32/src/xspi/mod.rs index cfc24422a..1f051bffe 100644 --- a/embassy-stm32/src/xspi/mod.rs +++ b/embassy-stm32/src/xspi/mod.rs @@ -538,8 +538,8 @@ impl<'d, T: Instance, M: PeriMode> Xspi<'d, T, M> { w.set_dmaen(false); }); - // self.configure_command(&transaction, Some(buf.len()))?; - self.configure_command(&transaction, Some(buf.len())).unwrap(); + let transfer_size_bytes = buf.len() * W::size().bytes(); + self.configure_command(&transaction, Some(transfer_size_bytes))?; let current_address = T::REGS.ar().read().address(); let current_instruction = T::REGS.ir().read().instruction(); @@ -578,7 +578,8 @@ impl<'d, T: Instance, M: PeriMode> Xspi<'d, T, M> { w.set_dmaen(false); }); - self.configure_command(&transaction, Some(buf.len()))?; + let transfer_size_bytes = buf.len() * W::size().bytes(); + self.configure_command(&transaction, Some(transfer_size_bytes))?; T::REGS .cr() @@ -1145,7 +1146,8 @@ impl<'d, T: Instance> Xspi<'d, T, Async> { // Wait for peripheral to be free while T::REGS.sr().read().busy() {} - self.configure_command(&transaction, Some(buf.len()))?; + let transfer_size_bytes = buf.len() * W::size().bytes(); + self.configure_command(&transaction, Some(transfer_size_bytes))?; let current_address = T::REGS.ar().read().address(); let current_instruction = T::REGS.ir().read().instruction(); @@ -1185,7 +1187,8 @@ impl<'d, T: Instance> Xspi<'d, T, Async> { // Wait for peripheral to be free while T::REGS.sr().read().busy() {} - self.configure_command(&transaction, Some(buf.len()))?; + let transfer_size_bytes = buf.len() * W::size().bytes(); + self.configure_command(&transaction, Some(transfer_size_bytes))?; T::REGS .cr() .modify(|v| v.set_fmode(Fmode::from_bits(XspiMode::IndirectWrite.into()))); @@ -1215,7 +1218,8 @@ impl<'d, T: Instance> Xspi<'d, T, Async> { // Wait for peripheral to be free while T::REGS.sr().read().busy() {} - self.configure_command(&transaction, Some(buf.len()))?; + let transfer_size_bytes = buf.len() * W::size().bytes(); + self.configure_command(&transaction, Some(transfer_size_bytes))?; let current_address = T::REGS.ar().read().address(); let current_instruction = T::REGS.ir().read().instruction(); @@ -1255,7 +1259,8 @@ impl<'d, T: Instance> Xspi<'d, T, Async> { // Wait for peripheral to be free while T::REGS.sr().read().busy() {} - self.configure_command(&transaction, Some(buf.len()))?; + let transfer_size_bytes = buf.len() * W::size().bytes(); + self.configure_command(&transaction, Some(transfer_size_bytes))?; T::REGS .cr() .modify(|v| v.set_fmode(Fmode::from_bits(XspiMode::IndirectWrite.into()))); -- cgit