哈喽,大家好。前段时间笔者在大大通的方案专栏分享了基于中科蓝讯 BT8958B2 的 Smart Watch 方案,今天这篇博文就基于此方案跟大家分享一下如何在中科蓝讯 BT8958B2 SDK 中更换屏幕驱动进行 UI 界面显示。
一、平台准备- 使用的 SDK 版本是 SDK_BT8958_LVGL_S2835_20230202。
- 使用的 LCD 芯片型号为 SPD2010,LCD 尺寸为 412x412,支持 QSPI 通讯,本次以 QSPI 通讯为例进行驱动屏幕显示的分享。
- 硬件连接如下图所示。
主控 BT8958B2 中与 LCD 的连接如上图所示,需要注意的是,除了屏幕复位引脚以及背光控制引脚可改动外,其他引脚分配不可以改动。
屏幕软板接口如上图所示。主控通过 PE2 引脚给 LCD 供电 3.3V,通过 VDDIO 引脚给 LCD 背光电路供电 3.3V。
二、驱动文件准备
参考 SDK 中默认屏幕驱动的编写方式,创建 lcd_spd2010.c 以及 lcd_spd2010.h 文件。
- 结构体创建。
首先参考 SDK 中默认的屏幕驱动 lcd_gc9c01.c 文件编写 lcd_spd2010.c 文件。
如上图所示,SDK 中屏幕驱动相关函数是以屏幕驱动结构体的形式去调用的。
参考默认屏幕驱动的结构体创建新屏幕驱动结构体,下一步需编写完成相关的函数。
- 外设初始化。
首先进行 BT8958B2 与 LCD 所接 IO 口的配置,包括 QSPI、LCD 供电口(该 IO口默认已配置为供电输出)以及 LCD背光 IO 的配置,接着进行时钟的配置,SDK 中已封装好 LCD 的 QSPI 接口配置以及时钟配置,照着配置即可。
- 接着进行 LCD 复位的配置,SDK 中已封装好该配置函数。
根据 LCD 使用情况,调用该函数进行配置即可。
这里使用硬件复位,软件复位函数为空即可。
- 屏幕驱动初始化。
SDK 中提供了发送一个字节数据的接口函数 despi_sendbyte(uint8_t val),可以根据屏幕驱动手册中 QSPI 的时序,将发送数据的函数进行封装。
如上图中所用时序为例,首先以单线 SPI 进行数据发送,接着以四线 SPI 进行数据发送。
函数封装后,如上图所示。
屏幕初始化中还涉及到开窗函数,如上图所示。
接着,进行屏幕驱动的初始化,根据屏幕驱动手册发送命令和数据进行驱动,不同屏幕驱动程序不同,此处不对发送的指令和数据进行解释。
- 模式设置。
如上图所示,参考默认的屏幕驱动中的函数,修改函数名即可。模式相关函数的设置中包括睡眠模式、显示模式、低功耗模式,此时不进行展开。
- 方转圆。
由于不使用方转圆,该函数直接返回 draw_buf 即可。
- 信号设置。
如上图所示,参考默认的模式函数即可,修改函数名即可。
- 显示。
显示相关的函数也参考默认的模式函数即可。
完成以上内容后,即完成了 spd2010.c 文件的编写。
9. 接下来需进行 spd2010.h 文件的编写。参考 lcd_gc9c01.h 文件,对屏幕驱动结构体进行外部声明,如上图所示。
到这里就完成了驱动文件的准备,下一步进行 SDK 中屏幕驱动的相关配置的设置。
三、SDK 更换屏幕驱动配置说明
- 将屏幕驱动 .c 以及 .h 文件复制到工程文件夹目录 app\gui\lcd 下,在工程对应位置添加文件。
- 在 lcd_conf.h 文件下,添加屏幕型号,如下图所示:
以及添加屏幕型号的屏幕宏定义参数。
接着把当前屏幕型号改为上一步添加的屏幕型号。
- 在 lv_port_disp.c 中对头文件进行包含。
- 在 disp_buf_conf.h 中需要添加与显示 Buffer 相关的屏幕像素的宏定义参数。
至此,屏幕配置完成。
显示一张图片的效果如上图所示。
四、总结
以上就是屏幕驱动的全部内容,其中屏幕背光控制 IO 口仅配置为普通 IO 使用,如需了解通过 PWM 控制屏幕背光,请参考我的另一篇博文《中科蓝讯 BT8958B2 SDK 开发——PWM 控制屏幕背光》,感谢阅读。
五、参考资料
- SDK_BT8958_LVGL_S2835_20230202
- BT895X DataSheet.pdf
- SPD2010(L-WEA2010)_0.50.pdf