1 前言

第一次接触这款芯片,刚开始对SDK以及数据手册进行了熟悉,和平时开发有些区别,整体来说体验比较好,常见的驱动Demo有文档说明,玩过MCU的开发者,很快就能玩起来。然后本次测评是从SPI和蓝牙着手,使用spi驱动ST7789V2 2.0寸LCD,可以通过屏幕显示一些信息进行人机交互,同时板载蓝牙,音频解码等功能,接入一个屏幕是很有必要的。

2 SPI简介

SPI是Serial Peripheral Interface的缩写,它是一种通信协议,用于在电子设备之间进行数据传输。SPI协议由一个主设备和一个或多个从设备组成,主要用于短距离、高速的串行通信。SPI协议使用四根线(时钟线、数据输入线、数据输出线和片选线)来实现数据的传输。

forum.jpg

通信时序图:

forum.jpg

在本SOC中支持多种SPI模块,支持HSPI、PSPI、SPI Slave模式,本次使用的是PSPI模式,先介绍一下这几种模式的区别:

HSPI(Host SPI)是主机SPI接口,通常由主控芯片或处理器提供。它允许主控芯片作为SPI的主设备与一个或多个从设备进行通信。HSPI在硬件上提供了多个SPI引脚,包括时钟线、数据输入线、数据输出线和片选线,以支持高速、全双工的SPI通信。

相比之下,PSPI(Peripheral SPI)是外设SPI接口,通常用于连接外围设备,例如传感器、存储器等。PSPI接口通常只需要提供数据输入线、数据输出线和片选线,而无需提供独立的时钟线。时钟信号通常由主控芯片的时钟源提供,通过数据线进行同步。

HSPI和PSPI的区别在于:HSPI是主机SPI接口,而PSPI是外设SPI接口。HSPI提供完整的四根SPI引脚,包括时钟线和数据线,可以作为主设备与从设备进行通信。而PSPI通常只需要数据线和片选线,时钟信号通过数据线同步。HSPI更适合主控芯片或处理器集成,而PSPI更适合连接外部外设。

3 硬件连接

打开B91开发板的硬件设计指南,SPI接口如下所示,PSPI对应接口PC4、PC5、PC6、PC7

forum.jpg

本次使用的屏幕参数:

驱动芯片:ST7789V2

分辨率:240*320

尺寸:2.0寸

forum.jpg

屏幕接口与开发板引脚对应关系:

硬件编号

屏幕硬件接口

说明

GND

GND

接地

3.3V

VCC

电源

PC5

SCL

时钟线

PC7

SDA

数据线

PE1

RST


PE0

DC


PC4

CS

片选

实物连接:

forum.jpg


4 LCD接入

4.1工程导入

本次使用的是蓝牙的demo,基于蓝牙的demo接入,方便后面的调试,首先下载好官方提供的蓝牙demo

forum.jpg

搭建好开发环境,开发环境搭建的文章比较多,这里不再说明。导入蓝牙demo

forum.jpg

选择Existing Projiects into Workspace

forum.jpg

选择蓝牙demo路径,然后确定即可

forum.jpg

选择B91_Module工程

forum.jpg

4.2 SPI驱动初始化

主函数在main.c文件中,初始化在app.c文件

forum.jpg

SPI通讯时钟以及引脚配置:

forum.jpg


SPI初始化放在app.c文件下的_attribute_no_inline_ void user_init_normal(void)函数

forum.jpg


4.3 LCD 其他引脚初始化

在LCD使用过程中还有RST,以及DC引脚需要接到开发板上进行控制,分别使用的是PE0,PE1

forum.jpg

同时,在程序调试过程中,很有可能出现死机的情况,所以需要开发板在死机的时候发出一些信号用于判断,这里使用的是一个LED灯,放在while函数中执行,当LED灯不再进行指示,说明程序很有可能死机了。这里初始化的是PB4引脚。

forum.jpg

4.4 LCD驱动接口对接

在SPI驱动初始化完成后,开始添加LCD的代码,首先加入LCD相关文件

forum.jpg

接下里开始调整接口,打开st7789.h,添加RST,DC引脚,用于控制

forum.jpg

forum.jpg
LCD命令发送接口:

forum.jpg

LCD数据写入接口,数据类型在uint8范围内

forum.jpg

LCD数据写入接口,数据类型在65535范围内:

forum.jpg

4.5配置板子其他外设

在整个应用中,使用是不可能为单一外设,为了规范管理,外设在app_config.h中配置

forum.jpg


4.6测试程序

测试代码如下:

forum.jpg

显示结果,拍照原因看着有点奇怪,实际正常显示红色

5 总结

本次完成了SPI驱动ST7789 LCD,使用蓝牙的demo进行调试,进行了SPI的初始,LCD驱动接口的对接,同时蓝牙通信已经调成功,当前未制作UI显示,作为下一步的开发内容,总体使用上来说,还挺不错,对于驱动demo有文档进行说明。唯一可能出现的就是新手入门的时候可能对整个SDK不熟悉,会花一时间进行熟悉。SDK还是挺不错的,同时SOC还支持Zephyr实时操作系统,感兴趣的小伙伴可以去尝试。