forked from espressif/arduino-esp32
some i2c fixes
This commit is contained in:
@ -1784,13 +1784,25 @@ struct i2c_struct_t {
|
||||
i2c_port_t num;
|
||||
};
|
||||
|
||||
static i2c_t * i2c_ports[2] = {NULL, NULL};
|
||||
|
||||
i2c_t * i2cInit(uint8_t i2c_num, int8_t sda, int8_t scl, uint32_t clk_speed){
|
||||
i2c_t * out = (i2c_t*)malloc(sizeof(i2c_t));
|
||||
if(out == NULL){
|
||||
log_e("malloc failed");
|
||||
return NULL;
|
||||
}
|
||||
out->num = (i2c_port_t)i2c_num;
|
||||
if(i2c_num >= 2){
|
||||
return NULL;
|
||||
}
|
||||
i2c_t * out = NULL;
|
||||
if(i2c_ports[i2c_num] == NULL){
|
||||
out = (i2c_t*)malloc(sizeof(i2c_t));
|
||||
if(out == NULL){
|
||||
log_e("malloc failed");
|
||||
return NULL;
|
||||
}
|
||||
out->num = (i2c_port_t)i2c_num;
|
||||
i2c_ports[i2c_num] = out;
|
||||
} else {
|
||||
out = i2c_ports[i2c_num];
|
||||
i2c_driver_delete((i2c_port_t)i2c_num);
|
||||
}
|
||||
|
||||
i2c_config_t conf;
|
||||
conf.mode = I2C_MODE_MASTER;
|
||||
@ -1803,12 +1815,14 @@ i2c_t * i2cInit(uint8_t i2c_num, int8_t sda, int8_t scl, uint32_t clk_speed){
|
||||
if (ret != ESP_OK) {
|
||||
log_e("i2c_param_config failed");
|
||||
free(out);
|
||||
i2c_ports[i2c_num] = NULL;
|
||||
return NULL;
|
||||
}
|
||||
ret = i2c_driver_install(out->num, conf.mode, 0, 0, 0);
|
||||
if (ret != ESP_OK) {
|
||||
log_e("i2c_driver_install failed");
|
||||
free(out);
|
||||
i2c_ports[i2c_num] = NULL;
|
||||
return NULL;
|
||||
}
|
||||
return out;
|
||||
|
@ -96,7 +96,7 @@ bool TwoWire::begin(int sdaPin, int sclPin, uint32_t frequency)
|
||||
|
||||
sda = sdaPin;
|
||||
scl = sclPin;
|
||||
i2c = i2cInit(num, sdaPin, sclPin, frequency);
|
||||
i2c = i2cInit(num, sda, scl, frequency);
|
||||
if(!i2c) {
|
||||
return false;
|
||||
}
|
||||
@ -118,6 +118,12 @@ uint16_t TwoWire::getTimeOut()
|
||||
|
||||
void TwoWire::setClock(uint32_t frequency)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32S2
|
||||
i2c = i2cInit(num, sda, scl, frequency);
|
||||
if(!i2c) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
i2cSetFrequency(i2c, frequency);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user