Skip to content

Commit 98ac6ec

Browse files
committed
feat: esp32-s3 support for max1740x chips
1 parent 1abe2e5 commit 98ac6ec

File tree

3 files changed

+49
-44
lines changed

3 files changed

+49
-44
lines changed

components/max1704x/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
idf_component_register(
22
SRCS max1704x.c
33
INCLUDE_DIRS .
4-
REQUIRES i2cdev log esp_idf_lib_helpers
4+
REQUIRES driver log esp_idf_lib_helpers
55
)

components/max1704x/max1704x.c

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@
4141

4242
#include "max1704x.h"
4343

44-
#define I2C_FREQ_HZ 400000
44+
#define I2C_MASTER_NUM 0 /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
45+
#define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */
46+
#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
47+
#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
48+
#define I2C_MASTER_TIMEOUT_MS 1000
4549

4650
/**
4751
* MAX1704X registers
@@ -119,7 +123,6 @@ int16_t le16_to_cpu_signed(const uint8_t data[2])
119123
memcpy(&r, &u, sizeof r);
120124
return r;
121125
}
122-
123126
/**
124127
* Public functions
125128
*/
@@ -128,21 +131,40 @@ esp_err_t max1704x_init_desc(max1704x_t *dev, i2c_port_t port, gpio_num_t sda_gp
128131
{
129132
CHECK_ARG(dev);
130133

131-
dev->i2c_dev.port = port;
132-
dev->i2c_dev.addr = MAX1704X_I2C_ADDR;
133-
dev->i2c_dev.cfg.sda_io_num = sda_gpio;
134-
dev->i2c_dev.cfg.scl_io_num = scl_gpio;
135-
#if HELPER_TARGET_IS_ESP32
136-
dev->i2c_dev.cfg.master.clk_speed = I2C_FREQ_HZ;
137-
#endif
138-
return i2c_dev_create_mutex(&dev->i2c_dev);
134+
/* Initialize and configure the software I2C bus */
135+
int i2c_master_port = I2C_MASTER_NUM;
136+
137+
i2c_config_t conf = {
138+
.mode = I2C_MODE_MASTER,
139+
.sda_io_num = sda_gpio,
140+
.scl_io_num = scl_gpio,
141+
.sda_pullup_en = GPIO_PULLUP_ENABLE,
142+
.scl_pullup_en = GPIO_PULLUP_ENABLE,
143+
.master.clk_speed = I2C_MASTER_FREQ_HZ,
144+
};
145+
146+
i2c_param_config(i2c_master_port, &conf);
147+
return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
148+
}
149+
/**
150+
* @brief Read a sequence of bytes from a MPU9250 sensor registers
151+
*/
152+
static esp_err_t max1704x_register_read(uint8_t reg_addr, uint8_t *data, size_t len)
153+
{
154+
return i2c_master_write_read_device(I2C_MASTER_NUM, MAX1704X_I2C_ADDR, &reg_addr, 1, data, len, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
139155
}
140156

141-
esp_err_t max1704x_free_desc(max1704x_t *dev)
157+
/**
158+
* @brief Write a byte to a MPU9250 sensor register
159+
*/
160+
static esp_err_t max1704x_register_write_byte(uint8_t reg_addr, uint8_t data)
142161
{
143-
CHECK_ARG(dev);
162+
int ret;
163+
uint8_t write_buf[2] = {reg_addr, data};
164+
165+
ret = i2c_master_write_to_device(I2C_MASTER_NUM, MAX1704X_I2C_ADDR, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
144166

145-
return i2c_dev_delete_mutex(&dev->i2c_dev);
167+
return ret;
146168
}
147169

148170
esp_err_t max1704x_quickstart(max1704x_t *dev)
@@ -151,9 +173,7 @@ esp_err_t max1704x_quickstart(max1704x_t *dev)
151173

152174
uint8_t data[2] = { 0x40, 0x00 };
153175

154-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
155-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_write_reg(&dev->i2c_dev, MAX1704X_REGISTER_MODE, data, 2));
156-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
176+
ESP_ERROR_CHECK( max1704x_register_write_byte(MAX1704X_REGISTER_MODE, data));
157177

158178
ESP_LOGD(TAG, "MAX1704X Quickstart");
159179

@@ -167,9 +187,7 @@ esp_err_t max1704x_get_voltage(max1704x_t *dev, float *voltage)
167187
uint8_t data[2];
168188
int value;
169189

170-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
171-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_read_reg(&dev->i2c_dev, MAX1704X_REGISTER_VCELL, data, 2));
172-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
190+
ESP_ERROR_CHECK( max1704x_register_read(MAX1704X_REGISTER_VCELL, data, 2));
173191
// ESP_LOG_BUFFER_HEXDUMP("voltage", data, 2, ESP_LOG_INFO);
174192

175193
if (dev->model == MAX17043_4) {
@@ -187,9 +205,7 @@ esp_err_t max1704x_get_soc(max1704x_t *dev, float *soc)
187205

188206
uint8_t data[2];
189207

190-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
191-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_read_reg(&dev->i2c_dev, MAX1704X_REGISTER_SOC, data, 2));
192-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
208+
ESP_ERROR_CHECK( max1704x_register_read(MAX1704X_REGISTER_SOC, data, 2));
193209
// ESP_LOG_BUFFER_HEXDUMP("soc", data, 2, ESP_LOG_INFO);
194210

195211
*soc = (float)data[0] + ((float)data[1]) / 256;
@@ -206,9 +222,7 @@ esp_err_t max1704x_get_crate(max1704x_t *dev, float *crate)
206222
int16_t crate_value;
207223
uint8_t data[2];
208224

209-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
210-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_read_reg(&dev->i2c_dev, MAX1704X_REGISTER_CRATE, data, 2));
211-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
225+
ESP_ERROR_CHECK( max1704x_register_read(MAX1704X_REGISTER_CRATE, data, 2));
212226

213227
if (dev->model == MAX17043_4) {
214228
ESP_LOGE(TAG, "MAX1704X_REGISTER_CRATE is not supported by MAX17043");
@@ -226,9 +240,7 @@ esp_err_t max1704x_get_version(max1704x_t *dev, uint16_t *version)
226240

227241
uint8_t data[2];
228242

229-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
230-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_read_reg(&dev->i2c_dev, MAX1704X_REGISTER_VERSION, data, 2));
231-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
243+
ESP_ERROR_CHECK( max1704x_register_read(MAX1704X_REGISTER_VERSION, data, 2));
232244

233245
*version = (data[0] << 8) | data[1];
234246
return ESP_OK;
@@ -240,9 +252,7 @@ esp_err_t max1704x_get_config(max1704x_t *dev)
240252

241253
uint8_t data[2];
242254

243-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
244-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_read_reg(&dev->i2c_dev, MAX1704X_REGISTER_CONFIG, data, 2));
245-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
255+
ESP_ERROR_CHECK( max1704x_register_read(MAX1704X_REGISTER_CONFIG, data, 2));
246256

247257
dev->config.rcomp = data[0];
248258
dev->config.sleep_mode = (data[1] & MAX1704X_CONFIG_SLEEP_BIT) ? true : false;
@@ -283,9 +293,7 @@ esp_err_t max1704x_set_config(max1704x_t *dev, max1704x_config_t *config)
283293
dev->config.empty_alert_thresh = 32 - config->empty_alert_thresh;
284294
data[1] |= (32 - config->empty_alert_thresh) << MAX1704X_CONFIG_ATHD_SHIFT;
285295

286-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
287-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_write_reg(&dev->i2c_dev, MAX1704X_REGISTER_CONFIG, data, 2));
288-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
296+
ESP_ERROR_CHECK( max1704x_register_write_byte(MAX1704X_REGISTER_CONFIG, data));
289297

290298
return ESP_OK;
291299
}
@@ -301,9 +309,7 @@ esp_err_t max1704x_get_status(max1704x_t *dev)
301309
return ESP_ERR_NOT_SUPPORTED;
302310
}
303311

304-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
305-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_read_reg(&dev->i2c_dev, MAX1704X_REGISTER_STATUS, data, 2));
306-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
312+
ESP_ERROR_CHECK( max1704x_register_read(MAX1704X_REGISTER_STATUS, data, 2));
307313

308314
dev->status.reset_indicator = (data[0] & MAX1704X_STATUS_RI_BIT) ? true : false;
309315
dev->status.voltage_high = (data[0] & MAX1704X_STATUS_VH_BIT) ? true : false;
@@ -351,8 +357,6 @@ esp_err_t max1704x_set_status(max1704x_t *dev, max1704x_status_t *status)
351357
}
352358
data[1] = 0;
353359

354-
I2C_DEV_TAKE_MUTEX(&dev->i2c_dev);
355-
I2C_DEV_CHECK(&dev->i2c_dev, i2c_dev_write_reg(&dev->i2c_dev, MAX1704X_REGISTER_STATUS, data, 2));
356-
I2C_DEV_GIVE_MUTEX(&dev->i2c_dev);
360+
ESP_ERROR_CHECK( max1704x_register_write_byte(MAX1704X_REGISTER_STATUS, data));
357361
return ESP_OK;
358-
}
362+
}

components/max1704x/max1704x.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
#ifndef __MAX1704X__H__
4141
#define __MAX1704X__H__
4242

43-
#include <i2cdev.h>
43+
#include <driver/i2c.h>
4444
#include <stdbool.h>
4545
#include <esp_err.h>
4646

@@ -93,7 +93,8 @@ typedef struct
9393
*/
9494
typedef struct
9595
{
96-
i2c_dev_t i2c_dev;
96+
int i2c_dev;
97+
i2c_config_t conf;
9798
max1704x_model_t model;
9899
max1704x_config_t config;
99100
max1704x_status_t status;

0 commit comments

Comments
 (0)