add 1sec timeouts for I2C read and write

This commit is contained in:
Dan Halbert 2021-03-03 09:43:57 -05:00
parent e3ab394cd6
commit fb7a0f7efc
2 changed files with 22 additions and 8 deletions

View File

@ -157,6 +157,7 @@ SRC_SDK := \
src/common/pico_sync/lock_core.c \
src/common/pico_sync/mutex.c \
src/common/pico_time/time.c \
src/common/pico_time/timeout_helper.c \
src/common/pico_util/pheap.c \
src/rp2_common/hardware_adc/adc.c \
src/rp2_common/hardware_claim/claim.c \

View File

@ -38,6 +38,9 @@
#define NO_PIN 0xff
// One second
#define BUS_TIMEOUT_US 1000000
STATIC bool never_reset_i2c[2];
STATIC i2c_inst_t* i2c[2] = {i2c0, i2c1};
@ -177,24 +180,34 @@ uint8_t common_hal_busio_i2c_write(busio_i2c_obj_t *self, uint16_t addr,
return status;
}
int result = i2c_write_blocking(self->peripheral, addr, data, len, !transmit_stop_bit);
int result = i2c_write_timeout_us(self->peripheral, addr, data, len, !transmit_stop_bit, BUS_TIMEOUT_US);
if (result == len) {
return 0;
} else if (result == PICO_ERROR_GENERIC) {
return MP_ENODEV;
}
return MP_EIO;
switch (result) {
case PICO_ERROR_GENERIC:
return MP_ENODEV;
case PICO_ERROR_TIMEOUT:
return MP_ETIMEDOUT;
default:
return MP_EIO;
}
}
uint8_t common_hal_busio_i2c_read(busio_i2c_obj_t *self, uint16_t addr,
uint8_t *data, size_t len) {
int result = i2c_read_blocking(self->peripheral, addr, data, len, false);
int result = i2c_read_timeout_us(self->peripheral, addr, data, len, false, BUS_TIMEOUT_US);
if (result == len) {
return 0;
} else if (result == PICO_ERROR_GENERIC) {
return MP_ENODEV;
}
return MP_EIO;
switch (result) {
case PICO_ERROR_GENERIC:
return MP_ENODEV;
case PICO_ERROR_TIMEOUT:
return MP_ETIMEDOUT;
default:
return MP_EIO;
}
}
void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) {