avr-arm 发表于 2018-1-20 14:25:29

使用MT7688A的SPI驱动液晶屏(framebuffer方式)WIDORA NEO

本帖最后由 avr-arm 于 2018-1-20 14:33 编辑

使用MT7688A的硬件SPI驱动液晶屏幕,并且使用了framebuffer方式,这种方式的好处有两个:一是无需关心刷屏,例化为标准fb0设备,以方便后边增加QT、Xorg等等标准界面程序,二是CPU使用率极低,具体底层操作都是内核层完成的,应用只需要关心fb0即可。
算是轻微另类玩法吧,毕竟在路由器SOC上玩标准界面还是挺新颖的。我们widora就喜欢折腾好玩的东东。
教程做好的固件:

准备
iLi9341控制器的SPI液晶,也可以其他控制器,例如ST7735r,保证留出来SPI接口。
openwrt_widora代码,保证最新的master即可。 https://github.com/widora/openwrt_widora
MT7688 NEO一块,杜邦线若干。(其他MT7688开发板也应该行)
硬件连接

拿我手里的液晶屏为例,是一块240*320分辨率的IPS液晶,液晶屏原理图:

与NEO的连接:

连接实际效果图:


修改代码

首先,保证有openwrt_widora的代码并且编译过,因为涉及到内核代码修改,不编译是找不到内核源码的。

1 进入内核视频驱动目录:cd build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29/drivers/video/

2 使用git下载fbtft工程到这里:git clone https://github.com/notro/fbtft.git ,下载完后文件列表如下:

mangodeMacBook-Pro:video mango$ ls
Kconfig             built-in.o          fbdev               logo                of_display_timing.c videomode.c
Makefile            console             fbtft               modules.builtin   of_videomode.c
backlight         display_timing.c    hdmi.c            modules.order       vgastate.c
mangodeMacBook-Pro:video mango$

3 运行如下两句,让内核知道你这里添加了驱动

在video/Makefile最后添加了一行 obj-y += fbtft



在video/Kconfig 中source “drivers/video/fbdev/Kconfig”行下添加一行:source “drivers/video/fbtft/Kconfig”



4 回到openwrt_widora根目录,运行make kernel_menuconfig,找

Device Drivers--->
Character devices--->
使能虚拟的terminal设备,如下图:


Graphics support —>


分别展开看:

Direct Rendering Manager--->
    < > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)----

Frame buffer Devices--->
    <*> Support for small TFT LCD display modules--->
      <*>   FB driver for the ILI9341 LCD Controller
   


-*- Backlight & LCD device support---> 这一项无需关心
Console display driver support--->
   {{::屏幕快照_2018-01-20_上午11.21.39.png|}}
   
Bootup logo--->                                                                        
                     [ ]   Standard black and white Linux logo (NEW)      
                     [*]   Standard 16-color Linux logo (NEW)            
                     [*]   Standard 224-color Linux logo (NEW)
                     
配置完后,推出时保存配置。



修改DTS,这里对应NEO,我们修改Widora32M.dts,路径是:target/linux/ramips/dts/Widora32M.dts 从105行,spidev@1这一段整体换成:

ili9341@1 {
                               #address-cells = <1>;
                               #size-cells = <1>;
                               status = "okay";
                               compatible = "ilitek,ili9341";
                               reg = <1 0>;
                               spi-max-frequency = <32000000>;
                               txbuflen = <16>;
                               rotate = <0>;
                               bgr;
                               fps = <15>;
                               buswidth = <8>;
                               dc-gpios = <&gpio0 11 1>;
                     };

改好的DTS在此:


回到openwrt_widora根目录开始编译,make V=s 由于配置内核后,会和openwrt里个别选项冲突,例如有如下需要手动选择的情况,按照正常平台选择即可。



颜色反了

修改fb_ili9341.c,在0x11前增加一条0x21指令:

write_reg(par, 0x21);
write_reg(par, 0x11); /* sleep out */
修改后编译,刷入NEO。

测试

不出意外,可以看到启动logo了:



终端,可以看到/dev/下有了fb0设备:



把随机数打印到屏幕,不出意外看到花屏,root@Widora:~# cat /dev/urandom > /dev/fb0



把屏幕例化成了很多tty设备,所以也可以往屏幕打印字符了:

root@Widora:~# echo hello > /dev/tty0
root@Widora:~# echo hello > /dev/tty0
root@Widora:~# echo hello > /dev/tty0
root@Widora:~# echo hello > /dev/tty0
root@Widora:~# echo hello > /dev/tty0
效果:



找了一下之前在MT7688上跑QT的图片,也贴到这里吧,后边有时间了把如何移植QT到MT7688也写一写。



更多想了解widora的之前有个帖子: 联发科MT7688AN(Widora-NEO)开源资料贴 https://www.amobbs.com/forum.php?mod=viewthread&tid=5683191&highlight=widora&_dsign=8fcc495f   
还可以去官网 https://widora.io https://wiki.widora.io 去搂一眼,{:lol:}

ifus 发表于 2018-1-20 15:03:22

高大上的wifi呀{:lol:}

天荒 发表于 2018-1-20 15:04:35

赞一个,2.8寸屏已到手,现在开始搞。

lindabell 发表于 2018-1-20 15:31:01

SPI刷屏不行吧
用STM32F1 模拟 SPI移植STemwin弄个窗口都能看到刷屏

WM_CH 发表于 2018-1-20 15:59:05

设备树方面的东东,哪里介绍比较详细啊,撸主

avr-arm 发表于 2018-1-20 17:12:17

WM_CH 发表于 2018-1-20 15:59
设备树方面的东东,哪里介绍比较详细啊,撸主

一直觉得这个还不错,

avr-arm 发表于 2018-1-20 18:31:17

lindabell 发表于 2018-1-20 15:31
SPI刷屏不行吧
用STM32F1 模拟 SPI移植STemwin弄个窗口都能看到刷屏

SPI刷屏没那么快,所以不适合做视频,倒是普通UI还不错,拉窗帘的感觉不明显

huangqi412 发表于 2018-1-20 19:26:23

lindabell 发表于 2018-1-20 15:31
SPI刷屏不行吧
用STM32F1 模拟 SPI移植STemwin弄个窗口都能看到刷屏

不做视频应该还行

honami520 发表于 2018-1-20 22:14:35

我做的全志A20,spi驱动的oled,1秒钟刷新10帧,硬件SPI,不过没有搞过framebuffer,直接是一次刷新一整屏。

avr-arm 发表于 2018-1-21 10:27:45

honami520 发表于 2018-1-20 22:14
我做的全志A20,spi驱动的oled,1秒钟刷新10帧,硬件SPI,不过没有搞过framebuffer,直接是一次刷新一整屏 ...

以前用过MT7688的IIC驱动OLED,不做动画,也就是显示些系统信息IP地址什么的。反正这些接口玩视频是够呛了

duxingkei 发表于 2018-1-21 11:48:00

avr-arm 发表于 2018-1-20 17:12
一直觉得这个还不错,

说的通俗易懂,好久没折腾linux了,收藏了先

jordonwu 发表于 2018-1-21 15:19:38

本帖最后由 jordonwu 于 2018-1-21 16:02 编辑

avr-arm 发表于 2018-1-21 10:27
以前用过MT7688的IIC驱动OLED,不做动画,也就是显示些系统信息IP地址什么的。反正这些接口玩视频是够呛 ...

LZ计划搞个LCD Shell?

avr-arm 发表于 2018-1-21 19:11:54

jordonwu 发表于 2018-1-21 15:19
LZ计划搞个LCD Shell?

按照这个教程后会找到dev下一大堆tty0-x的设备,就是LCD的字符型设备。
想要什么shell内容到屏幕,就在命令后加“> /dev/tty0”即可。

fengyunyu 发表于 2018-1-21 21:35:26

LZ现在是老板兼系统架构师?

WM_CH 发表于 2018-1-22 09:48:21

avr-arm 发表于 2018-1-20 17:12
一直觉得这个还不错,

谢谢撸主{:lol:}

avr-arm 发表于 2018-1-22 10:00:15

fengyunyu 发表于 2018-1-21 21:35
LZ现在是老板兼系统架构师?

对的,毕竟技术出身

avr-arm 发表于 2018-2-1 08:14:01

金手指版本的MT7688AN核心板,第一次样品{:lol:}
连接器选用了3.2mm高度的NGFF接口,很小巧,节省面积

loveavr999 发表于 2018-8-8 08:02:58

avr-arm 发表于 2018-2-1 08:14
金手指版本的MT7688AN核心板,第一次样品
连接器选用了3.2mm高度的NGFF接口,很小巧,节省面积
...

底板右边那个是1117? 功率够吗? 会不会发热?

有2个bit4打算自己做个底板。

avr-arm 发表于 2018-8-8 09:08:16

loveavr999 发表于 2018-8-8 08:02
底板右边那个是1117? 功率够吗? 会不会发热?

有2个bit4打算自己做个底板。 ...

供电只要瞬间承受极限800mA即可,1117能扛住。
发热,实测1117温升是12度,摸上去热乎乎的。正常跑起来电流170-190mA(WiFI打开)

hl1200 发表于 2019-5-19 21:19:57

刚刚准备做单色led屏控制卡,就找到这个神器。

fchen2 发表于 2019-7-13 19:48:44

赞楼主,文档详细。
页: [1]
查看完整版本: 使用MT7688A的SPI驱动液晶屏(framebuffer方式)WIDORA NEO