oled-SSD1315
I2CI2C inter-integrated circuit 用在集成电路之间的通信协议串行同步两根信号线 SCL 和 SDA每个设备都有独立的地址只能通过主设备发起从设备只能被动响应,SCL的每个时钟周期SDA传一位数据I2C规定在每个时钟周期的高电平读取数据,连续发送的数据需要在scl低电平的时候准备好并在scl高电平的时候保持稳定每个从设备都有一个唯一地址 》7位主设备发送地址读写位读写意图广播到所有从设备从设备和自己的设备地址匹配如果匹配到了回复ack,也就是0,I2C规定发送方每发送1个字节的数据接收方都要回复一个1位的确认信号可以是ack: acknowledge,也可以是nack: negative acknowledge, 0:表示成功1表示失败I2C规定主设备和从设备的每次通信都必须由起始信号开始停止信号结束空闲状态 scl 和 sda都是高电平起始信号 scl高电平 sda下拉结束信号 scl高电平 sda从低变到高结束信号之后相当于又回到了空闲状态起始信号和结束信号都只能由主设备产生SSD1315OLED organic light emitting diode 有机放光二极管SSD1315是oled的驱动芯片用来控制每个像素的亮灭OLED分为两类 PMOLED passive matrix OLED被动矩阵和LED点阵屏类似逐列或者逐行扫描驱动AMOLED active matrix OLED主动矩阵每个像素点都有一个单独的控制电路一个像素点就是一个led灯SSD1315芯片在屏幕的最下面向外引出了很多线最下面那层PCB是厂家对他的封装如果是I2c的屏幕就只外接了I2c的线SSD1315中MCU Interface默认支持很多种通信协议不止I2C显示都是通过SSD1315芯片自己显示的我们只是将数据传递过去传递的数据可能是命令控制屏幕对比度亮度灯也可能是数据MCU Interface外部暴露了很多引脚因为SSD1315支持很多种通讯协议不止适配I2CI2C只是这些引脚里面的其中两根MCU Interface会判断他是命令还是数据如果是命令就会交给command decoder处理如果是数据就会存入GDDRAMgraphic display data RAM中… 这个GDDRAM大小正好也是128*64bit和屏幕的像素点相对应下面的common Drivers和segment drivers就是根据 GDDRAM中存的数据产生OLED屏幕驱动信号segment drivers控制列显示 有128位也就是0~127common drivers: 控制行显示 64位。。0-63那块屏幕分为OLED玻璃面板 只会发光的玻璃本身只有行列电极不能直接接单片机必须靠芯片控制SSD1315芯片SSD1315的drivers行列序号左上角不是从0开始的而是127–》0 63—》0显示屏幕本质是将GDDRAM中的数据通过SSD1315的drivers刷到屏幕上GDDRAM和SSD1315 中数据是一一对应的也就是GDDRAM和SSD1315中segment Drivers的值是0到127GDDRAM和SSD1315中common Drivers的值是0-63,他们的值顺序是对应的但是OLED玻璃面板和drivers的对应关系是反的也就是如果完全按照GDDRAM中的数据去显示渲染出来是反的屏幕和SSD1315的连线是硬件焊死的改不了只能改GDDRAMSSD1315提供了重映射功能用户通过命令重新定义GDDRAM和引脚对应关系segment重映射common重映射SSD1315 一次至少写一个字节 128*64最多写8个pageSSD1315有两个指针一个是指向列的column address pointer…一个是指向行page address pointer因为column由segment drivers控制也就是0到127 分为高四位和低四位存储,避免和其他命令冲突而page只会取0-7三个二进制位就够了设置行和列都有指定的指令这个指定指令去设置当前指针指向哪里后面就会在那里写数据SSD1315寻址方式为了方便连续写多个字节每当成功写入一个字节后page address pointer或者column address pointer会自动递增不同的寻址方式指针递增的逻辑不同设置这个寻址方式也要通过发送命令一共有三种页寻址 page需要自己变化column会自增水平寻址 column自增column满了之后page跳到下一页垂直寻址 page自增page满了之后column跳到下一个一般用页寻址。。默认也是页寻址OLED写数据过程i2c起始从机地址 读写标识ack发送control byte 表示后面发送的是命令还是数据第一位是co continuation bit 声明后续内容是否连续0连续发送 1后面只发一位第二位是DC: data command selection bit : 1data 0command后面六位都是 0dc一旦确定当前通信不允许改变ack发数据 每发一个byte需要一个回复位i2c结束初始化SSD1315charge pump 电荷泵 芯片内部提供了升压电路需要手动开启最简初始化熄灭屏幕 0xAE行列反转开启电荷泵电量屏幕 0xAF显示字符 可以显示小一点 6*8 一页显示完也可以 8 * 16 分两个page显示完