1. 初识 SSD1315 OLED 驱动芯片
SSD1315 是一款专门用于驱动有机/聚合物发光二极管点阵图形显示系统的单芯片 CMOS 驱动控制器,内部集成了 128x64 位的 GDDRAM(图形显示数据 RAM),可以直接控制显示内容。
相比常见的 SSD1306,SSD1315 在驱动更大尺寸的 OLED 面板时表现更好。虽然两者的基本命令集很相似,但 SSD1315 在一些系统寄存器设置上有所不同,这也是为什么直接用 SSD1306 的库可能会遇到显示问题的原因。
2. 深入硬件抽象层实现
2.1 I2C 通信协议详解
SSD1315 支持 I2C 通信方式,只需要两根线(SCL 和 SDA)就能搞定,硬件布线特别简单。SSD1315 的 I2C 从地址由固定前缀 011110 加上 SA0 位和 R/W#位组成,具体结构是这样的:
SA0 位由硬件引脚 D/C#决定:当 D/C#接地时,SA0=0,从地址为 0111100(十六进制 0x70);当 D/C#接 VDD 时,SA0=1,从地址为 0111101(十六进制 0x71)。R/W#位则用来指示读写操作:0 表示写操作,1 表示读操作。
在实际编程中,通常这样定义地址:
#define I2C_OLED_SLAVE_ADDR 0x70 // D/C#接地时的地址
使用硬件抽象层接口,发送命令的函数可以这样实现:
void OLED_send_cmd(uint8_t oled_cmd) {
uint8_t tmp_buf[2];
tmp_buf[0] = 0x00; // 控制字节,表示后面是命令
tmp_buf[1] = oled_cmd; // 具体的命令字节
i2c_master_write_data(I2C_TEST, I2C_OLED_SLAVE_ADDR, tmp_buf, 2);
}
这里有个小技巧:第一个字节 0x00 是控制字节,告诉 SSD1315 接下来发送的是命令而不是数据。如果是发送数据,就需要把这个字节改成 0x40。
2.2 地址结构与页寻址模式
SSD1315 的显存结构很有特点,它采用页寻址模式(Page Addressing Mode),将 128x64 的显示区域分成 8 个页(Page0~Page7),每个页包含 8 行像素,对应 128 列。这种结构让显示控制变得很有条理。
设置页面地址的函数是这样的:
void Page_set(uint8_t page) {
OLED_send_cmd(0xb0 + page); // 0xb0~0xb7 对应 Page0~Page7
}
设置列地址就稍微复杂一些,因为需要分两次发送:
void Column_set(uint8_t column) {
OLED_send_cmd(0x10 | (column >> ));
OLED_send_cmd( | (column & ));
}

