some i2c fixes

This commit is contained in:
me-no-dev
2020-05-17 14:54:41 +03:00
parent d1110013af
commit 31d5120e04
2 changed files with 27 additions and 7 deletions

View File

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

View File

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