本实践目标
- 熟悉air202的SPI API (SPI目前官方仅支持LCD驱动), 这也是相较air200的升级特性
- 在air202目前支持的LCD12864基础上,查验是否可以支持同类型驱动IC
- 目前选择目标LCD为 UC1701X为目标模块,该LCD分辨率为128X64,无字库, air202固件自带字库,符合本场景
- 点亮LCD,并做实现数字的时钟显示,例如 08-21 11:22:31
相关资料
- 《air202_硬件设计手册_v1.3》
- 《Luat 脚本开发指南V2.8》
- 《lua扩展库V1.5》
- LCD12864(ST7567) 文档,官方目前固件默认支持版本,做参照用途
- LCD12864(UC1701X)文档 https://pan.baidu.com/s/1hsuRWB6
- SPI协议及其工作原理浅析
模块连接
- air202引脚描述
SPI接口
管脚名 | 管脚号 | I/O |
---|---|---|
SPI1_CS | 2 | O |
SPI1_CLK | 3 | O |
SPI1_DO | 4 | O |
SPI1_DI | 5 | I |
LCD RESET
管脚名 | 管脚号 | I/O |
---|---|---|
UART1_CTS | 6 | O |
供电
管脚名 | 管脚号 | I/O |
---|---|---|
VDDIO | 24 | O |
** 输出 2.8V 10mA
-
LCD12864引脚描述
| 管脚名 | 管脚号 | I/O |
| ------------ | ------------ | ------------ |
| 背光LEDA |5|I|
| 地VSS |6|I|
| 电源VDD |7|I|
| 串行时钟SCLK |8|I|
| 串行数据SDA |9|I|
| 寄存器选择RS |10|I|
| 复位RESET |11|I|
| 片选CS |12|I| -
连接关系
| LCD12864 | AIR202 |
| ------------ | ------------ |
| SCK | SPI_CLK |
| SDA | SPI_DO |
|CS|SPI_CS|
|GND|GND|
|RS|SPI_DI|
|VDD|VDDIO|
|RST|UART1_CTS| -
连接示意图
image
要点分析及其说明
-
固件
请使用带UI功能的固件:Luat_VXXXX_Air202_UI.lod:支持SPI接口的LCD功能
因为SPI+LCD的特性较新,为确保更稳定,请使用最新版本的固件,目前使用V0007测试运行了16小时+也很稳定 -
供电
LCD 供电电压极限参数为 2.4V -- 3.6V, air202的 VDDIO 输出2.8v, 可以满足需求
-
通讯
LCD 支持SPI通讯,与air202通过SPI进行连接
-
关键寄存器
通过与ST7567的datasheet比较,两款LCD的寄存器职能非常接近,小差异的地方是起始行,以及寄存器的填充顺序。这个也是我们在initcmd中需要调整的地方
image0xE2, 0x2F, 0x23, 0x81, 0xA2, 0xC8, 0xA0, 0x40, 0xAF
-
背光
该型号液晶自带LED背光源,正常工作电流为 : 24-60mA, LED灯共3颗,每颗灯8-20mA
该光源电流需求超过了VDDIO的输出,所以直接接上的话会导致闪烁现象,可能实际使用中需要外部电源来为背光供电。 -
API描述(disp)
disp.init(para)
初始化SPI的lcd驱动,主要是为驱动IC设置关键寄存器,其中para中指定initcmd等关键参数
这个功能还未官方release doc, 估计还有调整的可能性,我们使用可主要关注initcmd部分disp.puttext("text",x,y)
在LCD(可能为缓存寄存器)上输出文本,固件自带字库,所以可以直接使用中文。
其中x,y 为起点坐标,一般坐标系为左上角为起点,但根据驱动IC不同,可能会有偏移量的差异
例如本驱动IC目前需要将Y轴偏移32行,这个可能会在后期的固件更新中统一为0disp.putimage("img.bmp",0,0)
在LCD(可能为缓存寄存器)上输出图像,应该只支持bmp类型,x,y为起点坐标
disp.clear()
屏幕清除操作
disp.update()
将LCD的缓存寄存器中数据更新到屏幕上,这个应该是刷新友好的,可以一次性构造好本屏幕所有内容,然后进行一次刷新操作。
-
初始化
初始化流程,通过查看air202的demo/ui/mono_lcd/lcd_st7567.lua
并且比较
st7567 datasheet page 21 : 8. INSTRUCTION TABLE
UC1701X datasheet page 7 : 7.1 指令表可以发现他们的寄存器参数以及用途非常相近,主要的差别主要应是init时刻寄存器的填充顺序。
我们推测initcmd中的参数使用方式就是在disp.init时刻,依序通过SPI向LCD送出的初始化寄存器值继续比较:
st7567 datasheet page 29 : 10. OPERATION FLOW
UC1701X datasheet page 14 : LCD模块初始化我们可以明确不同驱动IC需要送入的寄存器值以及顺序,以此推断,将初始化的寄存器参数调整为以下所示,即可正常点亮LCD :
0xE2, 0x2F, 0x23, 0x81, 0xA2, 0xC8, 0xA0, 0x40, 0xAF
具体可见(关键寄存器)
网友评论