1
0
mirror of https://github.com/whowechina/chu_pico.git synced 2025-02-21 04:16:28 +01:00

Add timeout to I2C operations, so more stable

This commit is contained in:
whowechina 2023-09-10 20:12:01 +08:00
parent 956a86ecd8
commit a92352c98a
3 changed files with 6 additions and 6 deletions

Binary file not shown.

View File

@ -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];
}

View File

@ -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);
}