Skip to content

Commit e17c30e

Browse files
authored
Merge pull request #301 from LMESTM/i2c_scan
Handle I2C scan with specific call to HAL_I2C_IsDeviceReady
2 parents 61f4ebd + 137ed67 commit e17c30e

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

Diff for: cores/arduino/stm32/twi.c

+18-2
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,11 @@ i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address,
366366
uint32_t tickstart = HAL_GetTick();
367367
uint32_t delta = 0;
368368

369+
/* When size is 0, this is usually an I2C scan / ping to check if device is there and ready */
370+
if (size == 0) {
371+
return i2c_IsDeviceReady(obj, dev_address, 1);
372+
}
373+
369374
do{
370375
if(HAL_I2C_Master_Transmit_IT(&(obj->handle), dev_address, data, size) == HAL_OK){
371376
ret = I2C_OK;
@@ -458,8 +463,19 @@ i2c_status_e i2c_IsDeviceReady(i2c_t *obj, uint8_t devAddr, uint32_t trials)
458463
{
459464
i2c_status_e ret = HAL_OK;
460465

461-
if(HAL_I2C_IsDeviceReady( &(obj->handle), devAddr, trials, I2C_TIMEOUT_TICK) != HAL_OK) {
462-
ret = I2C_BUSY;
466+
switch (HAL_I2C_IsDeviceReady( &(obj->handle), devAddr, trials, I2C_TIMEOUT_TICK)) {
467+
case HAL_OK:
468+
ret = HAL_OK;
469+
break;
470+
case HAL_TIMEOUT:
471+
ret = I2C_TIMEOUT;
472+
break;
473+
case HAL_BUSY:
474+
ret = I2C_BUSY;
475+
break;
476+
default:
477+
ret = I2C_TIMEOUT;
478+
break;
463479
}
464480

465481
return ret;

0 commit comments

Comments
 (0)