diff --git a/Hardware/Component/Screen/SPI/Waveshare/1.9inch_LCD_Module/1.9inch_LCD_Module_fbtft_驱动_for_RK356x.md b/Hardware/Component/Screen/SPI/Waveshare/1.9inch_LCD_Module/1.9inch_LCD_Module_fbtft_驱动_for_RK356x.md new file mode 100644 index 0000000..b316bdb --- /dev/null +++ b/Hardware/Component/Screen/SPI/Waveshare/1.9inch_LCD_Module/1.9inch_LCD_Module_fbtft_驱动_for_RK356x.md @@ -0,0 +1,409 @@ +# 1.9inch LCD Module fbtft 驱动 for RK356x + +由于需要在 RK356x 平台下驱动 SPI 显示屏,因此做了一下技术调查。这种屏的驱动主要使用 fbtft,这一种 framebuffer 驱动。另一说可以使用基于 DRM 技术的 [TinyDRM](https://github.com/notro/tinydrm) 驱动。 + +framebuffer 的缺点在于,使用非桌面环境的 Qt 图形程序时不支持视频播放。但是 Qt 的 Animation(AnimatedImage、PropertyAnimation 等) 是可以正常使用的。 + +我对 TinyDRM 的框架存有许多疑问,但时间有限,不能仔细阅读其框架代码,只好先使用 fbtft 来驱动。 + +我所使用的 SPI 显示屏是 微雪 的 1.9inch LCD 模块,其控制芯片为 ST7789V2,对于这款芯片,内核是有类似驱动的,参考微雪官方示例代码对此文件和设备树进行修改即可。 + +Linux 内核版本为 4.9。 + +## 1. 显示屏信息 + +本驱动对应 微雪 1.9inch SPI 显示屏,该显示屏参数如下: + +- 工作电压: 3.3V/5V +- 通信接口:SPI +- 屏幕类型:IPS +- 控制芯片:ST7789V2 +- 分辨率:170(H)RGB × 320(V) +- 显示尺寸:22.70 × 42.72mm +- 像素间距:0.1335 × 0.1335mm +- 产品尺寸:27.3 × 51.2mm +- 像素格式:RGB444、RGB565、RGB666 + +官方资料及参考代码下载见:[微雪 1.9inch LCD Module 资料连接](https://www.waveshare.net/wiki/1.9inch_LCD_Module) + +## 2. 接线方式 + +| LCD Module | RK356x | +|------------|--------| +| VCC | V3.3 | +| GND | GND | +| DIN | SPI3_MOSI_M1 | +| CLK | SPI3_CLK_M1 | +| CS | GPIO4_C4 | +| DC | GPIO3_A6 | +| RST | GPIO1_A4 | +| BL | GPIO3_A5 | + +注意 SPI 通讯使用 Mode 0。 + +## 3. 内核驱动及设备树 + +Linux 在 /drivers/staging/fbtft 下有 fb_st7789v.c 文件,直接在此文件基础上进行修改,内容如下: + +```cpp +// SPDX-License-Identifier: GPL-2.0+ +/* + * FB driver for the ST7789V LCD Controller + * + * Copyright (C) 2015 Dennis Menschel + */ + +#include +#include +#include +#include +#include +#include