aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src/i2c/v2.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-stm32/src/i2c/v2.rs')
-rw-r--r--embassy-stm32/src/i2c/v2.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/embassy-stm32/src/i2c/v2.rs b/embassy-stm32/src/i2c/v2.rs
index 3b09f1b34..6b20a601b 100644
--- a/embassy-stm32/src/i2c/v2.rs
+++ b/embassy-stm32/src/i2c/v2.rs
@@ -454,7 +454,8 @@ impl<'d, M: Mode, IM: MasterMode> I2c<'d, M, IM> {
454 // (START has been ACKed or last byte when 454 // (START has been ACKed or last byte when
455 // through) 455 // through)
456 if let Err(err) = self.wait_txis(timeout) { 456 if let Err(err) = self.wait_txis(timeout) {
457 if send_stop { 457 if send_stop && err != Error::Nack {
458 // STOP is sent automatically if a NACK was received
458 self.master_stop(); 459 self.master_stop();
459 } 460 }
460 return Err(err); 461 return Err(err);
@@ -548,7 +549,9 @@ impl<'d, M: Mode, IM: MasterMode> I2c<'d, M, IM> {
548 (idx != last_slice_index) || (slice_len > 255), 549 (idx != last_slice_index) || (slice_len > 255),
549 timeout, 550 timeout,
550 ) { 551 ) {
551 self.master_stop(); 552 if err != Error::Nack {
553 self.master_stop();
554 }
552 return Err(err); 555 return Err(err);
553 } 556 }
554 } 557 }
@@ -561,7 +564,9 @@ impl<'d, M: Mode, IM: MasterMode> I2c<'d, M, IM> {
561 (number != last_chunk_idx) || (idx != last_slice_index), 564 (number != last_chunk_idx) || (idx != last_slice_index),
562 timeout, 565 timeout,
563 ) { 566 ) {
564 self.master_stop(); 567 if err != Error::Nack {
568 self.master_stop();
569 }
565 return Err(err); 570 return Err(err);
566 } 571 }
567 } 572 }
@@ -571,7 +576,9 @@ impl<'d, M: Mode, IM: MasterMode> I2c<'d, M, IM> {
571 // (START has been ACKed or last byte when 576 // (START has been ACKed or last byte when
572 // through) 577 // through)
573 if let Err(err) = self.wait_txis(timeout) { 578 if let Err(err) = self.wait_txis(timeout) {
574 self.master_stop(); 579 if err != Error::Nack {
580 self.master_stop();
581 }
575 return Err(err); 582 return Err(err);
576 } 583 }
577 584