255|1

34

帖子

0

TA的资源

一粒金砂(中级)

【瑞萨RA8D1开发板,基于M85内核的图形MCU测评】RT-Thread I2C驱动OLED [复制链接]

 
开发环境:
IDE:MKD 5.38a
开发板:CPKCOR-RA8D1B开发板
MCU:R7FA8D1BHEC332AS00

1 RA8D1 I2C简介

I2C 通讯协议(Inter-Integrated Circuit)是由Philips公司开发的,由于它引脚少,硬件实现简单,可扩展性强, 不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
RA8D1有多个I2C外设,它们的I2C通讯信号引出到不同的GPIO引脚上,使用时必须配置到这些指定的引脚,其功能框图如下图所示。
221401ddqunnncux7mtenn.png

2 OLED简介

OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示,OLED 效果要来得好一些。 以目前的技术, OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。
221401rgkt1dzsd0qsifz1.png
Figure 2-1 OLED外部结构
OLED 显示模块有以下特点:
1)模块有单色和双色两种可选,单色为纯蓝色,而双色则为黄蓝双色。
2)尺寸小,显示尺寸为 0.96 寸,而模块的尺寸仅为 27mm*26mm 大小。
3)高分辨率,该模块的分辨率为 128*64。
4)多种接口方式,该模块提供了总共 5 种接口包括:6800、 8080 两种并行接口方式、3线或 4 线的穿行 SPI 接口方式、 IIC 接口方式(只需要 2 根线就可以控制 OLED)。
Table 2-1 MCU interface assignment under different bus interface mode
221401efpk2pz2bnupsapp.png
5)不需要高压,直接接 3.3V 就可以工作了。
本文将介绍基于I2C接口的OLED显示。

2.1 OLED的I2C通信协议

I2C总线协议允许数据和命令在设备间的通讯。

2.1.1 I2C写模式

I2C总线接口允许将数据和命令写入设备。
221401g0s8qecabhadvzae.png
Figure 2-2 I2C写格式
1.主设备开始数据通讯通过开始条件,开始条件的定义如下图。开始条件发生在SCL高电平期间,SDA产生一个下降沿的跳变。
221401xqq1f877227j72qq.png
Figure 2-3 I2C起始和停止信号
2.从地址紧跟着开始信号,用于设备从设备。对于SSD1306来说,从地址可能是“b0111100”或者“b0111101”。通过改变“SA0位”为0或1,(D/C引脚作为SA0)。
3.写模式发生在R/W#位是低电平。
4.应答信号在接收到一个字节的数据后有从设备产生,包括从地址和R/W#位,参考下面关于应答信号的图示。应答信号定义为在SCL时钟周期的高电平期间SDA拉低。
221401ekmdbyb33b4bapka.png
Figure 2-4 I2C应答信号
5.在从地址发送结束后,不管是控制字节还是数据姐姐都可以发送通过SDA线。一个控制字节主要包括Co位和D/C#位在六个0后,
  1. 如果Co位为低电平,发送的后续信息只能是数据字节。
  2. D/C#位决定下一个数据字节是数据还是命令字节,如果D/C#字节设置为低电平,这意味着下一个字节是命令字节,如果D/C#为是高电平,下一个数据字节是数据字节,将被存储在GDDRAM中,GDDRAM的列地址指针在每一个数据写之后自加一。
6. 应答为在接收到一个数据字节或只命令字节后产生。
7. 写模式在接受到停止信号之后结束。停止信号发生在SCL高点平期间SDA的上升沿,作为停止信号。

2.1.2 命令解码器

这个模块用来决定输入的到底是数据还是命令,通过D/ C#位来判断。
如果D/C#是高电平,D[7:0]是作为显示数据写在图像数据随机存储器中(GDDRM),如果是低电平,输入的数据是被理解为命令。然后数据输入被解码并且写在相应的命令寄存器中。

2.1.3 振荡器电路和显示时间发生器

这个模块是一个片上低功耗RC振荡电路。工作时钟(CLK)可以由内部振荡器产生或者外部时钟源(CL引脚),通过引脚CLS选择,如果CLS引脚被拉到高电平,内部的时钟被选择,CL应该开路,将CLS引脚拉低则不使用内部振荡电路,这时为了工作正常一定要连接CL引脚。当内部振荡器被选择时,输出频率Fosc由命令D5h A[7:4]改变。
EEWORLDIMGTK6
Figure 2-5 振荡器电路
显示时序发生器的显示时钟(DCLK)源于CLK。分频系数D可以通过命令D5H 从1变到16。
DCLK = FOSC / D
显示帧频率由以下公式决定:
EEWORLDIMGTK7
  • D代表时钟分频率,通过命令D5H A[3:0]决定,范围是从1到16.
  • K是每行的显示时钟,该值源于K=相1周期+相2周期+BANK0脉宽 =2+2+54(电源复位时)
  • 多路复用比通过命令A8H配置,复位值是(64MUX)。
  • Fosc是振荡器频率,可以通过命令D5h [7:4]改变,这个值越大,设置的最终频率越高。

2.1.4 FR Synchronization

向OLED驱动器写一个新的图片的开始时间依赖于MCU的写速度,如果MCU可以完成写一帧图片在一个帧周期内,这个MCU被分类位高速写MCU。对于MCU需要更长的时间完成写操作(超过一个帧周期但每到两个帧周期),就是慢速的一种了。
221401e0wm8a7f7mm86491.png
Figure 2-6 FR同步信号
  • 对于高速写微控制器:MCU应该开启向ram里写一个新的帧数据紧跟在FR的上升沿之后,并且应该在下一个上升沿到来之前完成。
  • 对于低速写微控制器:MCU在第一个下降沿之前开始写,必须在第三个FR脉冲上升沿到来之前完成。

2.1.5 段驱动器和公共驱动器

段驱动器给予128个电流源来驱动OLED板,驱动电流可以在0~100uA调节(256份),公共驱动器发生电压扫描脉冲。
段驱动波形被分割成三相:
  1. 在相1,OLED上一个图片的像素放电为了准备下一个图像显示内容。
  2. 在相2,OLED像素被驱动到目标电压,像素驱动到相当的对地电压,相2的周期可以被编程为1到16个DCLK的长度。如果OLED像素的电容值更大,需要更长的周期来给电容充电到达期望的电压值。
  3. 在相3,OLED驱动选择使用电流源去驱动OLED像素,并且这时现在的电流驱动环节。
221401y134g43gtgdt6i5t.png
Figure 2-7 段驱动器输出波形
完成这三相之后,驱动IC将回到相1去显示下一个图片数据,这三步环节连续执行去刷新显示在OLED上。
在相3,如果电流驱动脉宽设置为50,在完成50个DCLK周期在现在的驱动相,驱动IC将回到相1继续下一个显示。

2.1.6 图片显示数据随机存储(GDDRAM)

GDDRAM是一个位映射静态RAM,保持位模式直到显示在OLED上,RAM的大小是128*64位且RAM分成8页,从第零页达第七页,用来存128*64个单色点阵显示,如下图所示。
221401nk2atm3k6p5oi2kp.png
Figure 2-8 图片显示数据随机存储器
但一个数据字节被写在GDDRAM中,当前页的所有的行图像数据被填满(例,一列(8位)使得列地址指针填满),数据为b0被写到最顶的一行,当数据位D7被写到最底下一行。如下图所示。
221401g4aczv77gz7wf5ef.png
Figure 2-9 GDDRAM填充
为了灵活性,段复用和公共复用输出可以通过软件选择。
为了显示的垂直移动,一个内部寄存器存储显示开始行可以被设置通过RAM中的数据位置映射到显示屏上。(命令D3h)

2.1.7 开机和关机条件

下面用图解的方法给出了推荐的SSD1306开机和关机条件
OLED上电条件:
  1. VDD上电
  2. 在VDD电源稳定之后,设置RES#引脚为逻辑低至少3us然后拉高。
  3. 在RES#处于低电平状态之后,扥带至少3us,然后打开VCC。
  4. 在Vcc稳定后,发送命令AFh,打开显示。SEG/COM在100ms(Taf)后开启。
221401czm4buzoxububzum.png
Figure 2-10 OLED开机时序
OLED关机条件:
  1. 发送命令AEh,关闭显示。
  2. 关掉Vcc。
  3. 等待Toff,关闭VDD.(典型值toff=100ms)。
221401lyj9bzama9k9yq9a.png
Figure 2-11 OLED关机条件
注意:
  1. ESD保护电路连接达VDD和VCC之间,当VCC关闭时VDD比VCC要高。在图中用点线表示。
  2. VCC在关闭时时浮空的。
  3. 电源引脚(VDD,VCC)在关闭情况下一定不要拉到地。

3 RT-Thread 的I2C简介

I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA(serial data),另一根是双向时钟线 SCL(serial clock)。
I2C 总线允许同时有多个主设备存在,每个连接到总线上的器件都有唯一的地址,主设备启动数据传输并产生时钟信号,从设备被主设备寻址,同一时刻只允许有一个主设备。如下图所示:
221401vhmi5ctcm945zim9.png
一般情况下 MCU 的 I2C 器件都是作为主机和从机通讯,在 RT-Thread 中将 I2C 主机虚拟为 I2C总线设备,I2C 从机通过 I2C 设备接口和 I2C 总线通讯,相关接口如下所示:
函数 描述
rt_device_find() 根据 I2C 总线设备名称查找设备获取设备句柄
rt_i2c_transfer() 传输数据
关于I2C更详细的内容,请参看官方手册:

4 硬件I2C

4.1 硬件I2C硬件连接

硬件接口如下:
221401j11kwbsgoc2ud404.png
笔者这里使用的I2C1,即P511和P512。

4.2 RA8D1 I2C配置

接下来配置I2C,只需要简单配置就可使用。双击工程中的 RA Smart Configurator 图标,第一次打开需要配置正确的 FSP 安装路径。
 
221401h676z77535jyy8yc.png
221401tlrcvprxjukrpjsr.png
  • FSP配置I2C
    1.配置I2C对应的引脚
    首先依次点击 “Pins” -> “Peripherals” -> “IIC” ,配置为I2C,对应的引脚为 P511,P512。如下图所示。
    221401vavxkqa7rovax17v.png
    2.配置I2C参数
    在 FSP 配置界面里面我们依次点击 “Stacks”-> “New Stack”-> “Connectivity”-> “I2C Master(r_iic_master) ” 来配置I2C模块。
    221401a1lbb1zmlil1plbz.png
    然后配置对应的参数。
    221401b82bf8x0reex1b0z.png
    配置完成之后可以按下快捷键“Ctrl + S”保存, 最后点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码即可。
  • 配置I2C接口
    然后打开对应的I2C接口。
    221401m8xv07r0vbs4h7vb.png
    接下来就是配置OLED驱动,笔者这里使用的SSD1306的软件包。
    221401cq15q55s2oo5koor.png
    以上参数默认即可,笔者这里还使用了SSD1306的sample。
 
 

4.3 硬件I2C测试验证


编译下载,然后在终端输入“ssd1306_TestAll”即可进行测试。
221401z8gcz853czzxkqkt.png
正常情况下,OLED将会点亮。

5 软件I2C

5.1 软件I2C硬件连接

 

33.png

 


笔者这里使用P508和P509。

 

5.2 RA8D1 I2C配置

 

接下来配置I2C,FSP默认即可。

  • RT-Thread Studio配置I2C
然后打开对应的I2C。
221401giq8vevgqo73v7j4.png
配置对应的pin为P508和P509。当然可以换成其他空闲的GPIO。
接下来就是配置OLED驱动,笔者这里使用的SSD1306的软件包。
221401cq15q55s2oo5koor.png
以上参数默认即可,笔者这里还使用了SSD1306的sample。

5.3 软件I2C测试验证

编译下载,然后在终端输入“ssd1306_TestAll”即可进行测试。
221401z8gcz853czzxkqkt.png
正常情况下,OLED将会点亮。

最新回复

Fosc是振荡器频率,可以通过命令进行设置的   详情 回复 发表于 7 天前

回复
举报

6122

帖子

0

TA的资源

五彩晶圆(高级)

Fosc是振荡器频率,可以通过命令进行设置的


回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表