使用MT7688A的SPI驱动液晶屏(framebuffer方式)WIDORA NEO
时间:2023-06-21 21:37:00
本帖最后由 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@这一段整体换成:
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 = ;
};
改好的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 ... amp;_dsign=8fcc495f
也可以去官网 https://widora.io https://wiki.widora.io 去搂一眼,