前言
近期做了一个项目是使用esp32s3 + 准亿科技的TFT屏幕
该屏幕使用的驱动IC为:GC9A01
通讯方式是:4线SPI ,
三线spi和四线SPI区别在于:是否使用D/C信号线
开发LCD屏幕驱动, 可以参考乐鑫官网LCD显示屏指南
SPI 一共有4种工作模式. 根据接线 , 驱动方式的不同.
可分3 , 4 线SPI , 还可分接口类型I
, 接口类型II
这里我们使用:
4 line SPI 时序图如下:
下载后打开;esp_lcd_gc9a01.h
文件
#define GC9A01_PANEL_IO_SPI_CONFIG(cs, dc, callback, callback_ctx) \
{ \
.cs_gpio_num = cs, \
.dc_gpio_num = dc, \
.spi_mode = 0, \
.pclk_hz = 80 * 1000 * 1000, \
.trans_queue_depth = 10, \
.on_color_trans_done = callback, \
.user_ctx = callback_ctx, \
.lcd_cmd_bits = 8, \
.lcd_param_bits = 8, \
}
// trans_queue_depth spi设备传输数据的队列深度
// EPS芯片驱动SPI屏幕推荐使用整数频率(eg: 20 \ 40 \60)
// lcd_cmd_bits spi 接口数据传输的位数
打开路径:E:\ESP32_File\esp-idf\esp-idf\components\esp_lcd\include
esp_lcd_panel_commands.h
查看驱动芯片的LCD命令和idf中的LCD命令是否一致,如果有欠缺,则在
include\esp_lcd_gc9a01.h
中添加补充
确认命令地址被正确使用。具体可参考:移植驱动组件
配置SPI屏
- 从idf中复制一个空白的sample_project作为模板
ESP系列芯片SPI的传输位数一般是8bit、
所以像素颜色位数,最好使用8 的倍数
,比如8、16、24bit
GC9A01,支持 : 12bit , 16bit , 18bit 的颜色像素bit
如果使用lvgl 库,数据传输一般都是8bit , 16bit , 32bit 、
综合下来16bit是最合适的选择
SPI lcd驱动流程
初始化接口设备需要先初始化总线,再创建接口设备。
-
若 LCD 驱动 IC 配置为 Interface-I 接口模式,软件仅需设置 ·
mosi_io_num
为其数据线 IO,而设置miso_io_num
为 -1 -
SPI 驱动 在传输数据前会对输入数据量的大小进行判断,若单次传输的字节数超过 max_transfer_sz 则会报错。但是, SPI 单次 DMA 传输允许的最大字节数 不仅取决于 ·
max_transfer_sz
,而且受限于 ESP-IDF 中的SPI_LL_DATA_MAX_BIT_LEN
(不同系列 ESP 的值不同),即满足 最大字节数<= MIN(max_transfer_sz, (SPI_LL_DATA_MAX_BIT_LEN / 8))
。由于 esp_lcd 驱动 会提前判断输入的数据量是否超过限制,如果超过则进行 分包处理 后才控制 SPI 进行多次传输, 因此max_transfer_sz
通常设为全屏大小即可