ssd1306_driver.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "ssd1306_driver.h"
  2. #include "driver/i2c.h"
  3. #ifdef ENABLE_SSD1306
  4. esp_err_t i2c_tx_cmd(uint8_t *data, const uint8_t length) {
  5. i2c_cmd_handle_t handle = i2c_cmd_link_create();
  6. i2c_master_start(handle);
  7. i2c_master_write_byte(handle, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN);
  8. i2c_master_write_byte(handle, COMMAND_MODE, ACK_CHECK_EN);
  9. i2c_master_write(handle, data, length, ACK_CHECK_EN);
  10. i2c_master_stop(handle);
  11. esp_err_t retVal = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, 1000 / portTICK_RATE_MS);
  12. i2c_cmd_link_delete(handle);
  13. return retVal;
  14. }
  15. esp_err_t i2c_tx_data(uint8_t *data, const uint8_t length) {
  16. i2c_cmd_handle_t handle = i2c_cmd_link_create();
  17. i2c_master_start(handle);
  18. i2c_master_write_byte(handle, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN);
  19. i2c_master_write_byte(handle, DATA_MODE, ACK_CHECK_EN);
  20. i2c_master_write(handle, data, length, ACK_CHECK_EN);
  21. i2c_master_stop(handle);
  22. esp_err_t retVal = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, 1000 / portTICK_RATE_MS);
  23. i2c_cmd_link_delete(handle);
  24. return retVal;
  25. }
  26. void i2c_master_init() {
  27. int i2c_master_port = I2C_MASTER_NUM;
  28. i2c_config_t conf;
  29. conf.mode = I2C_MODE_MASTER;
  30. conf.sda_io_num = I2C_SDA_PIN; // Data pin
  31. conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
  32. conf.scl_io_num = I2C_CLK_PIN; // Clock pin
  33. conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
  34. conf.master.clk_speed = 100000;
  35. i2c_param_config(i2c_master_port, &conf);
  36. i2c_driver_install(i2c_master_port,
  37. conf.mode,
  38. I2C_MASTER_RX_BUF_DISABLE,
  39. I2C_MASTER_TX_BUF_DISABLE,
  40. 0);
  41. }
  42. #endif