Changchun Master Li

drive waveshare 4inch RPi LCD(C), by Python

2019-09-30

introduction

微雪电子的东西不错,有很多 raspberry pi 可以用的配件。
这块微雪的屏是块好屏,买回家在 raspberry pi 的 raspbian 上可以开箱即用。
缺点在于资料并不公开,用在其他的 linux distribution 或者 一个过于定制的 linux 会很麻烦。
不加改造,可玩性很差,对不起这一百块钱。

official support installation

https://github.com/waveshare/LCD-show

这是官方发布的安装包,根据它的教程安装方式很 easy ,但这种发布方式很脑残。

explore

chip

安装完后,raspberry pi 马上就可以显示了。lsmod 一下,细心的你就会找到

Module                  Size  Used by
fb_ili9486              3256  2
fbtft                  32587  1 fb_ili9486

原来是 ili9486 芯片

overlay

我们还需要知道引脚定义、SPI参数等

1
$ sudo dtc -I dtb -O dts waveshare4c-overlay.dtb

用 dtc 反编译 dtb 文件,可以得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
tft35a@0 {
compatible = "ilitek,ili9486";
reg = <0x0>; 低电平使能写寄存器,所以高电平写数据
pinctrl-names = "default";
pinctrl-0 = <0x1>;
spi-max-frequency = <0x8f0d180>; 速率 150M(我记得 raspberry pi 的 SPI 最高也就支持 125M。。)
txbuflen = <0x8000>;
rotate = <0x5a>; 旋转90
bgr = <0x0>;
fps = <0x1e>; 30
buswidth = <0x8>; 数据位宽 8bit
regwidth = <0x10>; 寄存器位宽 16bit
reset-gpios = <0xdeadbeef 0x19 0x0>; gpio25 reset
dc-gpios = <0xdeadbeef 0x18 0x0>; gpio24 dc(data command 选择)
debug = <0x0>; debug level
init = <0x10000f0 0xc3 0x10000f0 0x96 0x1000036 0x68 0x100003a 0x5 0x10000b0 0x80 0x10000b10000e8 0x40 0x8a 0x0 0x0 0x29 0x19 0xa5 0x33 0x10000c2 0x10000a7 0x10000e0 0xf0 0x9 0x13 0x12 0x12 0x2b 0x3c 0x44 0x4b 0x1b 0x18 0x17 0x1d 0x21 0x10000e1 0xf0 0x9 0x13 0xc 0xd 0x27 0x3b 0x44 0x4d 0xb 0x17 0x17 0x1d 0x21 0x1000036 0xec 0x10000f0 0x3c 0x10000f0 0x69 0x1000013 0x1000011 0x1000029>;
linux,phandle = <0x2>;
phandle = <0x2>;
};

在 tft35a (我也不知道为啥要叫35a啊,明明是4c)这个 block 中清晰的定义了 spi 引脚、速率、位宽等。
另外值得注意的是,init是一段初始化指令,要想驱动这块屏幕,启动时得把这些指令写进去才可行。
其中很多指令在芯片手册里也找不到,我也搞不懂是什么意思,总之无脑写就好了。

userspace driver

https://github.com/muchrooms/waveshare4c

最后,写了一个简单得python驱动,移植到其他平台时也可以参考它

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章