1 前言
第一次接触这款芯片,刚开始对SDK以及数据手册进行了熟悉,和平时开发有些区别,整体来说体验比较好,常见的驱动Demo有文档说明,玩过MCU的开发者,很快就能玩起来。然后本次测评是从SPI和蓝牙着手,使用spi驱动ST7789V2 2.0寸LCD,可以通过屏幕显示一些信息进行人机交互,同时板载蓝牙,音频解码等功能,接入一个屏幕是很有必要的。
2 SPI简介
SPI是Serial Peripheral Interface的缩写,它是一种通信协议,用于在电子设备之间进行数据传输。SPI协议由一个主设备和一个或多个从设备组成,主要用于短距离、高速的串行通信。SPI协议使用四根线(时钟线、数据输入线、数据输出线和片选线)来实现数据的传输。
通信时序图:
在本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
本次使用的屏幕参数:
驱动芯片:ST7789V2
分辨率:240*320
尺寸:2.0寸
屏幕接口与开发板引脚对应关系:
硬件编号 | 屏幕硬件接口 | 说明 |
GND | GND | 接地 |
3.3V | VCC | 电源 |
PC5 | SCL | 时钟线 |
PC7 | SDA | 数据线 |
PE1 | RST | |
PE0 | DC | |
PC4 | CS | 片选 |
实物连接:
4 LCD接入
4.1工程导入
本次使用的是蓝牙的demo,基于蓝牙的demo接入,方便后面的调试,首先下载好官方提供的蓝牙demo
搭建好开发环境,开发环境搭建的文章比较多,这里不再说明。导入蓝牙demo
选择Existing Projiects into Workspace
选择蓝牙demo路径,然后确定即可
选择B91_Module工程
4.2 SPI驱动初始化
主函数在main.c文件中,初始化在app.c文件
SPI通讯时钟以及引脚配置:
SPI初始化放在app.c文件下的_attribute_no_inline_ void user_init_normal(void)函数
4.3 LCD 其他引脚初始化
在LCD使用过程中还有RST,以及DC引脚需要接到开发板上进行控制,分别使用的是PE0,PE1
同时,在程序调试过程中,很有可能出现死机的情况,所以需要开发板在死机的时候发出一些信号用于判断,这里使用的是一个LED灯,放在while函数中执行,当LED灯不再进行指示,说明程序很有可能死机了。这里初始化的是PB4引脚。
4.4 LCD驱动接口对接
在SPI驱动初始化完成后,开始添加LCD的代码,首先加入LCD相关文件
接下里开始调整接口,打开st7789.h,添加RST,DC引脚,用于控制
LCD命令发送接口:
LCD数据写入接口,数据类型在uint8范围内
LCD数据写入接口,数据类型在65535范围内:
4.5配置板子其他外设
在整个应用中,使用是不可能为单一外设,为了规范管理,外设在app_config.h中配置
4.6测试程序
测试代码如下:
显示结果,拍照原因看着有点奇怪,实际正常显示红色
5 总结
本次完成了SPI驱动ST7789 LCD,使用蓝牙的demo进行调试,进行了SPI的初始,LCD驱动接口的对接,同时蓝牙通信已经调成功,当前未制作UI显示,作为下一步的开发内容,总体使用上来说,还挺不错,对于驱动demo有文档进行说明。唯一可能出现的就是新手入门的时候可能对整个SDK不熟悉,会花一时间进行熟悉。SDK还是挺不错的,同时SOC还支持Zephyr实时操作系统,感兴趣的小伙伴可以去尝试。