浅析 E3210 的 I2C 点亮 OLED 屏幕

1、E3210的外设简介

  1、8 x CAN/CANFD;

  2、12 x LIN/UART;

  3、1 x Gigabit Ethernet TSN2;

  4、1 x USB2.0 Host/Device;

  5、2 x I2S/TDM;

  6、4 x I2C;

  7、4 x SPI;

  8、2 x ePWM, 8-ch per ePWM;

2、E3210的 I2C 的引脚配置

I2Cx

SCL

SDA

MUXx

I2C3

GPIO_B4

GPIO_B5

MUX6

GPIO_X9

GPIO_X10

MUX6

I2C4

GPIO_Y2

GPIO_Y3

MUX6

I2C5

GPIO_Y6

GPIO_Y6

MUX6

I2C6

GPIO_Y8

GPIO_Y9

MUX6

引脚初始化配置:

SCL

SDA

 

1、pin index = GPIO_Y8,

2、mux = PIN_MUX_ALT6,

3、open drain=PIN_PUSH_PULL,

4、pull_config = PIN_PULL_UP

5、drive_strength = PIN_DS_8MA,

6、slew_rate = PIN_SR_FAST,

7、input_select = PIN_IS_CMOS_SCHMITT,

8、data_direction = PIN_INPUT_DIRECTION,

9、interrupt_config = PIN_INTERRUPT_DISABLED,

10、initial_value = PIN_LEVEL_LOW,

11、force_input = PIN_FORCE_INPUT_ENABLE,

12、mode_select = PIN_MODE_DIGITAL,

1、pin_index = GPIO_Y9,

2、mux = PIN_MUX_ALT6,

3、open_drain = PIN_PUSH_PULL,

4、pull_config = PIN_PULL_UP,

5、drive_strength = PIN_DS_8MA,

6、slew_rate = PIN_SR_FAST,

7、input_select = PIN_IS_CMOS_SCHMITT,

8、data_direction = PIN_OUTPUT_DIRECTION,

9、interrupt_config = PIN_INTERRUPT_DISABLED,

10、initial_value = PIN_LEVEL_LOW,

11、force_input = PIN_FORCE_INPUT_ENABLE,

12、mode_select = PIN_MODE_DIGITAL,

1、引脚对应的引脚位数

2、当前引脚的功能选择

3、推挽输出

4、上拉

5、驱动 Max = 8mA

6、引脚快速翻转

7、引脚输入选择 cmos Schmitt

8、引脚配置为输出

9、禁止中断

10、引脚初始输出为低电平

11、配置引脚上下拉

12、配置引脚模式选择


3、OLED的初始化

  初始化流程:

  

发送一个字节,向 SSD1306 写入一个字节,SSD1306 是一款单片 CMOS OLED/PLED 驱动器,具有有机/聚合物发光控制器二极管点阵图形显示系统。它由 128 个段和 64 个公共部分组成。这个 IC 是为普通阴极型 OLED 面板设计。SSD1306 内置对比度控制、显示 RAM 和振荡器,减少了外部组件和功耗。它有 256 级亮度控制。数据/命令是从通用单片机通过硬件可选的 6800/8000 系列兼容并行接口发送,I2C 接口或串行外围接口。它适用于许多紧凑型便携式应用程序,例如手机副显示屏、MP3 播放器、计算器等。



  mode:数据/命令标志 0,表示命令; 1,表示数据。

 void OLED_WR_Byte(uint8_t dat,uint8_t mode);

  void OLED_Init(void)

  {

    0xae - 关闭 oled 面板

    0x00 - 设置低位地址

    0x10 - 设置高位地址

    0x40 - 设置起始行地址

    0x81 - 设置对比度控制寄存器

    0xcf

    0xa1 - 设置段重映射95 为 0

    0xa6 - 设置正常显示

    0xa8 - 设置复用比(1 to 64)

    0x3f - 1/64

    0xd3 - 设置显示偏移量

    0x00 -不补偿

    0xd5 - 设置显示时钟分割比/振荡器频率

    0x80 - 设定分割比例

    0xd9 - 设置电源预值

    0xf1

    0xda - 设置引脚硬件配置

    0x12

    0xdb - 设置 vcomh

    0x40

    0x8d - 设置电源启动/禁用

    0x14 - 设置 0x10 禁用

    0xaf - 开启 oled 屏幕   

  }

 
4、sdrv_i2c 中的函数介绍

  总共有 10 个 函数,分别是:

  1、int sdrv_i2c_set_transmode(sdrv_i2c_t *ctrl,sdrv_i2cdrv_tsmode_t tsmode);
  功能:设置i2c控制器传输模式(仅适用于主设备)。

  2、 int sdrv_i2c_set_speedmode(sdrv_i2c_t *ctrl, sdrv_i2cdrv_speed_t speed);
  功能:设置i2c控制器调速模式(仅适用于主设备)。

  3、 int sdrv_i2c_init_ctrl(sdrv_i2c_t *ctrl);
  功能:初始化i2c控制器。

  4、sdrv_i2cdrv_trans_stat_t sdrv_i2c_write(sdrv_i2c_t *ctrl, uint16_t addr, uint8_t *wbuf, uint16_t wlen, uint32_t timeout, bool need_stop);
  功能:写数据到从设备(仅适用于主设备)。

  5、sdrv_i2cdrv_trans_stat_t sdrv_i2c_read(sdrv_i2c_t *ctrl, uint16_t addr,uint8_t *rbuf, uint16_t rlen, uint32_ttimeout, bool need_stop);
  功能:从从设备读取数据(仅适用于主设备)。

  6、sdrv_i2cdrv_bus_stat_t sdrv_i2c_get_bus_stat(sdrv_i2c_t *ctrl);
  功能:获得总线属性(只适用于主设备)。

  7、int sdrv_i2c_set_bus_stat(sdrv_i2c_t *ctrl,sdrv_i2cdrv_bus_stat_t bus_stat);
  功能:设置总线属性(仅适用于主设备)。

  8、int sdrv_i2c_slv_set_buf(sdrv_i2c_t *ctrl, uint8_t *tbuf, uint8_t *rbuf);
  功能:客户分配 buf 给 i2c 驱动框架(只适用于从设备)。

  9、int sdrv_i2c_slv_set_done(sdrv_i2c_t *ctrl);
  功能:设置接收数据已处理或发送数据已准备好(只适用于从设备)。

  10、sdrv_i2cdrv_slv_event_t sdrv_i2c_slv_get_event(sdrv_i2c_t *ctrl);
  功能:获取当前事件类型(仅适用于从设备)。

  本次驱动 OLED 屏幕用到了 I2C 初始化函数和 I2C 写函数。 这两个函数的基本描述为:

  1、int sdrv_i2c_init_ctrl(sdrv_i2c_t *ctrl);
  该函数有 1 个参数为 I2C 的实例结构体,包括(clk、base、irq、id、 inited、opmode、tsmode、speed、bus_stat)。 

clk = 0,

base = APB_I2C4_BASE,

irq = I2C4_INTR_NUM,

id = 4,

inited = 0,

opmode = SDRV_I2CDRV_MASTER,

tsmode = SDRV_I2CDRV_POLL,

speed = SDRV_I2CDRV_FSPEED,

bus_stat = SDRV_I2CDRV_BUS_IDLE,

配置时钟,

配置 I2C 基地址,

配置 I2C 中断,

配置 ID,

是否已初始化

配置主从模式,

配置轮询或中断模式,

配置波特率,

总线状态获取,

 
2、sdrv_i2cdrv_trans_stat_t sdrv_i2c_write(sdrv_i2c_t *ctrl, uint16_t addr, uint8_t *wbuf, uint16_t wlen, uint32_t timeout, bool need_stop);
该函数有 6 个参数分别为(i2c 控制器实例指针、addr 从设备7位地址不包含 LSB 读写位、Wbuf 指向用于发送的数据 buf、数据 buf 的长度、以毫秒为单位的最大等待时间,只适用于 INTP 模式,POLL 模式省略、是否发送停止信号)。

 5、OLED 原理图

   

注1:SSD1306(OLED驱动芯片介绍)-LCD显示模块_lcd液晶显示屏_长条形 (hzjlcd.com)

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论