Skip to content

Commit 5f377a5

Browse files
committed
i2c-master-async: add address nack checking
1 parent 904bceb commit 5f377a5

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

examples/rt685s-evk/src/bin/i2c-master-async.rs

+29-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ use embassy_imxrt::{bind_interrupts, i2c, peripherals};
99
use embassy_time::Timer;
1010
use embedded_hal_async::i2c::I2c;
1111

12+
const NACK_ADDR: u8 = 0x07;
13+
1214
const ACC_ADDR: u8 = 0x1E;
1315

1416
const ACC_ID_REG: u8 = 0x0D;
@@ -94,7 +96,33 @@ async fn main(_spawner: Spawner) {
9496
)
9597
.unwrap();
9698

97-
// Read WHO_AM_I register, 0x0D to get value 0xC7 (1100 0111)
99+
info!("i2c example - write nack check");
100+
let result = i2c.write(NACK_ADDR, &[ACC_ID_REG]).await;
101+
if result.is_err_and(|e| e == i2c::TransferError::AddressNack.into()) {
102+
info!("i2c example - write nack check gets the right error");
103+
} else {
104+
error!("i2c example - write nack check error did not get the error {}", result);
105+
}
106+
107+
info!("i2c example - read nack check");
108+
let mut reg = [0u8; 1];
109+
let result = i2c.read(NACK_ADDR, &mut reg).await;
110+
if result.is_err_and(|e| e == i2c::TransferError::AddressNack.into()) {
111+
info!("i2c example - write nack check gets the right error");
112+
} else {
113+
error!("i2c example - write nack check error did not get the error {}", result);
114+
}
115+
116+
info!("i2c example - write_read nack check");
117+
let mut reg = [0u8; 1];
118+
reg[0] = 0xAA;
119+
let result = i2c.write_read(NACK_ADDR, &[ACC_ID_REG], &mut reg).await;
120+
if result.is_err_and(|e| e == i2c::TransferError::AddressNack.into()) {
121+
info!("i2c example - write nack check gets the right error");
122+
} else {
123+
error!("i2c example - write nack check error did not get the error {}", result);
124+
}
125+
98126
info!("i2c example - ACC WHO_AM_I register check");
99127
let mut reg = [0u8; 1];
100128
reg[0] = 0xAA;

0 commit comments

Comments
 (0)