From cd12c9cbceb0ba90a493194d8200b1d8e98bba1b Mon Sep 17 00:00:00 2001 From: Andres Oliva Date: Tue, 10 Oct 2023 18:10:53 +0200 Subject: stm32: add timeout to I2C driver --- examples/stm32f4/src/bin/i2c.rs | 8 ++------ examples/stm32h5/src/bin/i2c.rs | 8 ++------ examples/stm32h7/src/bin/i2c.rs | 8 ++------ 3 files changed, 6 insertions(+), 18 deletions(-) (limited to 'examples') diff --git a/examples/stm32f4/src/bin/i2c.rs b/examples/stm32f4/src/bin/i2c.rs index a92957325..10ca2bdc7 100644 --- a/examples/stm32f4/src/bin/i2c.rs +++ b/examples/stm32f4/src/bin/i2c.rs @@ -5,7 +5,7 @@ use defmt::*; use embassy_executor::Spawner; use embassy_stm32::dma::NoDma; -use embassy_stm32::i2c::{Error, I2c, TimeoutI2c}; +use embassy_stm32::i2c::{Error, I2c}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; use embassy_time::Duration; @@ -34,13 +34,9 @@ async fn main(_spawner: Spawner) { Default::default(), ); - // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long. - // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay. - let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000)); - let mut data = [0u8; 1]; - match timeout_i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { + match i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { Ok(()) => info!("Whoami: {}", data[0]), Err(Error::Timeout) => error!("Operation timed out"), Err(e) => error!("I2c Error: {:?}", e), diff --git a/examples/stm32h5/src/bin/i2c.rs b/examples/stm32h5/src/bin/i2c.rs index 8b6fe71ae..4ce378e9b 100644 --- a/examples/stm32h5/src/bin/i2c.rs +++ b/examples/stm32h5/src/bin/i2c.rs @@ -4,7 +4,7 @@ use defmt::*; use embassy_executor::Spawner; -use embassy_stm32::i2c::{Error, I2c, TimeoutI2c}; +use embassy_stm32::i2c::{Error, I2c}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; use embassy_time::Duration; @@ -33,13 +33,9 @@ async fn main(_spawner: Spawner) { Default::default(), ); - // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long. - // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay. - let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000)); - let mut data = [0u8; 1]; - match timeout_i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { + match i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { Ok(()) => info!("Whoami: {}", data[0]), Err(Error::Timeout) => error!("Operation timed out"), Err(e) => error!("I2c Error: {:?}", e), diff --git a/examples/stm32h7/src/bin/i2c.rs b/examples/stm32h7/src/bin/i2c.rs index c2979c59b..7cd12e5eb 100644 --- a/examples/stm32h7/src/bin/i2c.rs +++ b/examples/stm32h7/src/bin/i2c.rs @@ -4,7 +4,7 @@ use defmt::*; use embassy_executor::Spawner; -use embassy_stm32::i2c::{Error, I2c, TimeoutI2c}; +use embassy_stm32::i2c::{Error, I2c}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; use embassy_time::Duration; @@ -33,13 +33,9 @@ async fn main(_spawner: Spawner) { Default::default(), ); - // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long. - // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay. - let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000)); - let mut data = [0u8; 1]; - match timeout_i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { + match i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { Ok(()) => info!("Whoami: {}", data[0]), Err(Error::Timeout) => error!("Operation timed out"), Err(e) => error!("I2c Error: {:?}", e), -- cgit From 4cec4b0548b6782e350bbea0579cdfb6f40d6623 Mon Sep 17 00:00:00 2001 From: Andres Oliva Date: Wed, 11 Oct 2023 23:52:26 +0200 Subject: Remove more unused stuff --- examples/stm32f4/src/bin/i2c.rs | 1 - examples/stm32h5/src/bin/i2c.rs | 1 - examples/stm32h7/src/bin/i2c.rs | 1 - 3 files changed, 3 deletions(-) (limited to 'examples') diff --git a/examples/stm32f4/src/bin/i2c.rs b/examples/stm32f4/src/bin/i2c.rs index 10ca2bdc7..032bd97ee 100644 --- a/examples/stm32f4/src/bin/i2c.rs +++ b/examples/stm32f4/src/bin/i2c.rs @@ -8,7 +8,6 @@ use embassy_stm32::dma::NoDma; use embassy_stm32::i2c::{Error, I2c}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; -use embassy_time::Duration; use {defmt_rtt as _, panic_probe as _}; const ADDRESS: u8 = 0x5F; diff --git a/examples/stm32h5/src/bin/i2c.rs b/examples/stm32h5/src/bin/i2c.rs index 4ce378e9b..8b1662f39 100644 --- a/examples/stm32h5/src/bin/i2c.rs +++ b/examples/stm32h5/src/bin/i2c.rs @@ -7,7 +7,6 @@ use embassy_executor::Spawner; use embassy_stm32::i2c::{Error, I2c}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; -use embassy_time::Duration; use {defmt_rtt as _, panic_probe as _}; const ADDRESS: u8 = 0x5F; diff --git a/examples/stm32h7/src/bin/i2c.rs b/examples/stm32h7/src/bin/i2c.rs index 7cd12e5eb..9aa0ca08b 100644 --- a/examples/stm32h7/src/bin/i2c.rs +++ b/examples/stm32h7/src/bin/i2c.rs @@ -7,7 +7,6 @@ use embassy_executor::Spawner; use embassy_stm32::i2c::{Error, I2c}; use embassy_stm32::time::Hertz; use embassy_stm32::{bind_interrupts, i2c, peripherals}; -use embassy_time::Duration; use {defmt_rtt as _, panic_probe as _}; const ADDRESS: u8 = 0x5F; -- cgit