From a92352c98a4e7e884a3da9feb510f3df5ae08a28 Mon Sep 17 00:00:00 2001 From: whowechina Date: Sun, 10 Sep 2023 20:12:01 +0800 Subject: [PATCH] Add timeout to I2C operations, so more stable --- Production/Firmware/chu_pico.uf2 | Bin 81408 -> 81408 bytes firmware/src/gp2y0e.h | 10 +++++----- firmware/src/i2c_hub.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Production/Firmware/chu_pico.uf2 b/Production/Firmware/chu_pico.uf2 index 4bf1518b7d7ce95c2af7c746563ad9c34a1436a6..8b9247c0175e4bd9b1ba57b433e467d3b073764e 100644 GIT binary patch delta 7132 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 OkWBwgo4ov3(EkEE#EF{# delta 7062 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 diff --git a/firmware/src/gp2y0e.h b/firmware/src/gp2y0e.h index d483112..9aa9612 100644 --- a/firmware/src/gp2y0e.h +++ b/firmware/src/gp2y0e.h @@ -14,15 +14,15 @@ static inline uint16_t gp2y0e_write(i2c_inst_t *i2c_port, uint8_t addr, uint8_t val) { uint8_t cmd[] = {addr, val}; - i2c_write_blocking(i2c_port, GP2Y0E_DEF_ADDR, cmd, 2, false); + i2c_write_blocking_until(i2c_port, GP2Y0E_DEF_ADDR, cmd, 2, false, time_us_64() + 1000); } static inline uint8_t gp2y0e_dist(i2c_inst_t *i2c_port) { uint8_t cmd[] = {0x5e}; - i2c_write_blocking(i2c_port, GP2Y0E_DEF_ADDR, cmd, 1, true); + i2c_write_blocking_until(i2c_port, GP2Y0E_DEF_ADDR, cmd, 1, true, time_us_64() + 1000); uint8_t data; - i2c_read_blocking(i2c_port, GP2Y0E_DEF_ADDR, &data, 1, false); + i2c_read_blocking_until(i2c_port, GP2Y0E_DEF_ADDR, &data, 1, false, time_us_64() + 1000); return data; } @@ -31,9 +31,9 @@ static inline uint8_t gp2y0e_dist(i2c_inst_t *i2c_port) static inline uint16_t gp2y0e_dist16(i2c_inst_t *i2c_port) { uint8_t cmd[] = {0x5e}; - i2c_write_blocking(i2c_port, GP2Y0E_DEF_ADDR, cmd, 1, true); + i2c_write_blocking_until(i2c_port, GP2Y0E_DEF_ADDR, cmd, 1, true, time_us_64() + 1000); uint8_t data[2]; - i2c_read_blocking(i2c_port, GP2Y0E_DEF_ADDR, data, 2, false); + i2c_read_blocking_until(i2c_port, GP2Y0E_DEF_ADDR, data, 2, false, time_us_64() + 1000); return (data[0] << 4) | data[1]; } diff --git a/firmware/src/i2c_hub.h b/firmware/src/i2c_hub.h index f6cd988..ab4e90e 100644 --- a/firmware/src/i2c_hub.h +++ b/firmware/src/i2c_hub.h @@ -22,7 +22,7 @@ static inline void i2c_hub_init() static inline void i2c_select(i2c_inst_t *i2c_port, uint8_t chn) { sleep_us(10); - i2c_write_blocking(i2c_port, I2C_HUB_ADDR, &chn, 1, false); + i2c_write_blocking_until(i2c_port, I2C_HUB_ADDR, &chn, 1, false, time_us_64() + 1000); sleep_us(10); }