1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #include "ssd1306_driver.h"
- #include "driver/i2c.h"
- #ifdef ENABLE_SSD1306
- esp_err_t i2c_tx_cmd(uint8_t *data, const uint8_t length) {
- i2c_cmd_handle_t handle = i2c_cmd_link_create();
- i2c_master_start(handle);
- i2c_master_write_byte(handle, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN);
- i2c_master_write_byte(handle, COMMAND_MODE, ACK_CHECK_EN);
- i2c_master_write(handle, data, length, ACK_CHECK_EN);
- i2c_master_stop(handle);
- esp_err_t retVal = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, 1000 / portTICK_RATE_MS);
- i2c_cmd_link_delete(handle);
- return retVal;
- }
- esp_err_t i2c_tx_data(uint8_t *data, const uint8_t length) {
- i2c_cmd_handle_t handle = i2c_cmd_link_create();
- i2c_master_start(handle);
- i2c_master_write_byte(handle, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN);
- i2c_master_write_byte(handle, DATA_MODE, ACK_CHECK_EN);
- i2c_master_write(handle, data, length, ACK_CHECK_EN);
- i2c_master_stop(handle);
- esp_err_t retVal = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, 1000 / portTICK_RATE_MS);
- i2c_cmd_link_delete(handle);
- return retVal;
- }
- void i2c_master_init() {
- int i2c_master_port = I2C_MASTER_NUM;
- i2c_config_t conf;
- conf.mode = I2C_MODE_MASTER;
- conf.sda_io_num = I2C_SDA_PIN; // Data pin
- conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
- conf.scl_io_num = I2C_CLK_PIN; // Clock pin
- conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
- conf.master.clk_speed = 100000;
- i2c_param_config(i2c_master_port, &conf);
- i2c_driver_install(i2c_master_port,
- conf.mode,
- I2C_MASTER_RX_BUF_DISABLE,
- I2C_MASTER_TX_BUF_DISABLE,
- 0);
- }
- #endif
|