mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-07-29 18:27:15 +02:00
some i2c fixes
This commit is contained in:
@ -1792,13 +1792,25 @@ struct i2c_struct_t {
|
|||||||
i2c_port_t num;
|
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 * 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(i2c_num >= 2){
|
||||||
if(out == NULL){
|
return NULL;
|
||||||
log_e("malloc failed");
|
}
|
||||||
return NULL;
|
i2c_t * out = NULL;
|
||||||
}
|
if(i2c_ports[i2c_num] == NULL){
|
||||||
out->num = (i2c_port_t)i2c_num;
|
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;
|
i2c_config_t conf;
|
||||||
conf.mode = I2C_MODE_MASTER;
|
conf.mode = I2C_MODE_MASTER;
|
||||||
@ -1811,12 +1823,14 @@ i2c_t * i2cInit(uint8_t i2c_num, int8_t sda, int8_t scl, uint32_t clk_speed){
|
|||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
log_e("i2c_param_config failed");
|
log_e("i2c_param_config failed");
|
||||||
free(out);
|
free(out);
|
||||||
|
i2c_ports[i2c_num] = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ret = i2c_driver_install(out->num, conf.mode, 0, 0, 0);
|
ret = i2c_driver_install(out->num, conf.mode, 0, 0, 0);
|
||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
log_e("i2c_driver_install failed");
|
log_e("i2c_driver_install failed");
|
||||||
free(out);
|
free(out);
|
||||||
|
i2c_ports[i2c_num] = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
|
@ -107,7 +107,7 @@ bool TwoWire::begin(int sdaPin, int sclPin, uint32_t frequency)
|
|||||||
|
|
||||||
sda = sdaPin;
|
sda = sdaPin;
|
||||||
scl = sclPin;
|
scl = sclPin;
|
||||||
i2c = i2cInit(num, sdaPin, sclPin, frequency);
|
i2c = i2cInit(num, sda, scl, frequency);
|
||||||
if(!i2c) {
|
if(!i2c) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -129,6 +129,12 @@ uint16_t TwoWire::getTimeOut()
|
|||||||
|
|
||||||
void TwoWire::setClock(uint32_t frequency)
|
void TwoWire::setClock(uint32_t frequency)
|
||||||
{
|
{
|
||||||
|
#if CONFIG_IDF_TARGET_ESP32S2
|
||||||
|
i2c = i2cInit(num, sda, scl, frequency);
|
||||||
|
if(!i2c) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
i2cSetFrequency(i2c, frequency);
|
i2cSetFrequency(i2c, frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user