嵌入式Linux--荔枝派Zero--V3s--ST7789v

news/2024/11/7 21:17:45/

文章目录

  • 前言
    • 血的教训:没有CS引脚是没法运行的!
  • 一、原理图
  • 二、uboot
    • U-Boot编译配置文件
    • 编译uboot
  • 三、Linux Kernel
  • 四、设备树
    • 第一步:注释掉自带的视频输出
    • 第二步:增加屏幕驱动节点
  • 五、烧录
    • 荔枝派是怎么启动的
    • TF卡上需要有什么
    • 实际烧录
  • 六、连线
  • 七、Qt测试
  • 八、使用Qt无法显示字体
    • 配置 /etc/profile

前言

 经过几番折磨,终于搞好了。

在这里插入图片描述

三个屏幕都是ST7789v驱动芯片:

  • 2.0寸分辨率是240x320:GND,VCC,SCL,SDA,RES,DC,CS,BLK
  • 1.54寸分辨率是240x240:GND,VCC,SCL,SDA,RES,DC,CS,BLK
  • 1.3寸分辨率是240x240:GND,VCC,SCL,SDA,RES,DC,BLK

就1.3寸的那个屏少了一个CS引脚死活亮不起来。

血的教训:没有CS引脚是没法运行的!

一、原理图

在这里插入图片描述

二、uboot

步骤如下:

  • (1)清除:make clean
  • (2)配置编译文件:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
  • (3)编译:time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log

U-Boot编译配置文件

荔枝派有三个编译配置文件

  • LicheePi_Zero_480x272LCD_defconfig
  • LicheePi_Zero_800x480LCD_defconfig
  • LicheePi_Zero_defconfig

LicheePi_Zero_800x480LCD_defconfig

CONFIG_ARM=y
CONFIG_ARCH_SUNXI=y
# CONFIG_ARMV7_NONSEC is not set
CONFIG_MACH_SUN8I_V3S=y
CONFIG_DRAM_CLK=360
CONFIG_DRAM_ZQ=14779
CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
CONFIG_VIDEO_LCD_BL_PWM="PB4"
# CONFIG_VIDEO_LCD_BL_PWM_ACTIVE_LOW is not set
CONFIG_DEFAULT_DEVICE_TREE="sun8i-v3s-licheepi-zero"
# CONFIG_CONSOLE_MUX is not set
CONFIG_SPL=y
CONFIG_CMD_BOOTMENU=y
# CONFIG_CMD_IMLS is not set
CONFIG_CMD_MEMINFO=y
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_SF=y
CONFIG_CMD_SPI=y
# CONFIG_CMD_FPGA is not set
CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_SPL_SPI_SUNXI=y
# CONFIG_NETDEVICES is not set
CONFIG_DM_SPI=y
CONFIG_SUNXI_SPI=y
CONFIG_OF_LIBFDT_OVERLAY=y

参考LicheePi_Zero_800x480LCD_defconfig模仿它的编译配置文件我也写一个:
LicheePi_Zero_240x240TFT_defconfig

CONFIG_ARM=y
CONFIG_ARCH_SUNXI=y
# CONFIG_ARMV7_NONSEC is not set
CONFIG_MACH_SUN8I_V3S=y
CONFIG_DRAM_CLK=360
CONFIG_DRAM_ZQ=14779
CONFIG_VIDEO_LCD_MODE="x:240,y:240,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
CONFIG_VIDEO_LCD_BL_PWM="PB4"
# CONFIG_VIDEO_LCD_BL_PWM_ACTIVE_LOW is not set
CONFIG_DEFAULT_DEVICE_TREE="sun8i-v3s-licheepi-zero"
# CONFIG_CONSOLE_MUX is not set
CONFIG_SPL=y
CONFIG_CMD_BOOTMENU=y
# CONFIG_CMD_IMLS is not set
CONFIG_CMD_MEMINFO=y
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_SF=y
CONFIG_CMD_SPI=y
# CONFIG_CMD_FPGA is not set
CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_SPL_SPI_SUNXI=y
# CONFIG_NETDEVICES is not set
CONFIG_DM_SPI=y
CONFIG_SUNXI_SPI=y
CONFIG_OF_LIBFDT_OVERLAY=y

编译uboot

步骤如下:

  • (1)清除:make clean
  • (2)配置编译文件:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_240x240TFT_defconfig
  • (3)编译:time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log

三、Linux Kernel

  • 首先进入目录并配置编译选项文件:make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm licheepi_zero_defconfig

  • 配置自己需要的驱动比如网卡驱动或者小屏幕显示驱动:make ARCH=arm menuconfig

Device Drivers  --->【*】 Staging drivers  ---><*>   Support for small TFT LCD display modules  ---><*>   FB driver for the ST7789V LCD Controller
  • 编译内核:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

至此,kernel算是配置OK了,接下来需要改下设备树。

四、设备树

第一步:注释掉自带的视频输出

vim arch/arm/boot/dts/sun8i-v3s.dtsi

sun8i-v3s.dtsi

...chosen {#address-cells = <1>;#size-cells = <1>;ranges;//      simplefb_lcd: framebuffer@0 {
//          compatible = "allwinner,simple-framebuffer",
//                   "simple-framebuffer";
//          allwinner,pipeline = "de0-lcd0";
//          clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_BUS_DE>,
//               <&ccu CLK_DE>, <&ccu CLK_TCON0>;
//          status = "disabled";
//      };};
...

第二步:增加屏幕驱动节点

注意–血的教训:reset-gpios = <&pio 1 6 GPIO_ACTIVE_HIGH>; // PB6一定要设置为GPIO_ACTIVE_HIGH

vim arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

sun8i-v3s-licheepi-zero-dock.dts

&spi0{status = "okay";st7789v: st7789v@0{compatible = "sitronix,st7789v";reg = <0>;status = "okay";spi-max-frequency = <36000000>;spi-cpol;spi-cpha;rotate = <0>;fps = <60>;buswidth = <8>;rgb;dc-gpios    = <&pio 1 5 GPIO_ACTIVE_HIGH>;  // PB5 reset-gpios = <&pio 1 6 GPIO_ACTIVE_HIGH>;  // PB6led-gpios   = <&pio 1 7 GPIO_ACTIVE_LOW>;   // PB7width = <240>;height= <320>;debug = <0>;};
};

更新设备树:

vim arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

单独编译设备树:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

五、烧录

 这里使用最简单的SD卡启动,以上的那些都会烧录到SD卡里面去。

荔枝派是怎么启动的

 启动的第一步是片内的32KB启动ROM(BROM)。大部分的ARM处理器,为了免去用户外置NOR Flash,通常都在片内集成了这样一个BROM。BROM会尝试从外部存储设备(首先是SD/MMC,接着是SPI NOR,最后是SPI NAND)读取程序。这个程序被全志成为boot0,这里就是SPL。如果BROM没有顺利载入这个程序,则会进入USB启动模式。

 第二步是SPL。SPL其实就是一个精简版的u-boot,只能执行一些特定的任务。SPL会被载入到V3s的内部SRAM中,然后SPL会进行以下操作:

  • 初始化时钟、串口、DRAM和启动设备(SD/MMC/SPI Flash)
  • 把完整的u-boot从启动设备复制到DRAM
  • 跳转到完整的u-boot

 第三步就是u-boot了。u-boot会负责载入内核。在一般情况下,u-boot会尝试从SD卡的第一分区读取并执行“boot.scr”脚本。一般来说boot.scr包括三条指令:把内核载入到SDRAM,把设备树二进制载入到SDRAM,(解压并)运行内核。

TF卡上需要有什么

以下是一个典型的可启动TF卡的结构:

在这里插入图片描述
基本上来说,要创建一个可启动TF卡,需要分区表(通过fdisk)、u-boot with SPL、启动脚本、设备树二进制、内核和根文件系统镜像。

实际烧录

 一张从未用过的TF卡,首先在Windows平台下使用SD Formatter软件进行格式化。
格式化的TF卡如果要烧录一个一体式镜像:

  • 在Windows环境下使用Win32DiskImager软件烧录
  • 在Ubuntu环境下:未使用过

还是那张已经格式化了的TF卡,在Ubuntu下面使用GParted分区编辑器软件对该TF卡进行分区:主要分为两个区如上图,在进行分区时要空出前1MByte的空间放U-Boot,也就是说BOOT区是在1MByte地址之后的。前面的1MByte其实是没有文件系统格式的RAW数据区域。

  • BOOT区:文件系统格式是FAT16用于存放设备树文件和Kernel文件
  • rootfs区:文件系统格式是EXT4用于存放根文件系统

在Ubuntu环境下一般是分开各个文件:

  • U-Boot文件:u-boot-sunxi-with-spl.bin
  • Linux Kernel镜像文件:zImage
  • 设备树二进制文件:sun8i-v3s-licheepi-zero-dock.dtb
  • 根文件系统:rootfs

六、连线

SPI屏lichee pi zero
GNDGND
VCC3v3
SCLSCL(PC1)
SDAMOSI(PC3)
RESSCK(PB6)
DCPWM1(PB5)
CSCS(PC2)
BLKSDA(PB7)
  • 必须要连接的线:MOSI,CLK,CS,DC,VCC,GND。
  • BLK不需要调光可以接3v3
  • RES不需要可以接GND

七、Qt测试

Qt文件夹是之前编译好的。
命令行输入命令出现雪花:

cat /dev/urandom > /dev/fb0
/opt/qt5.12.9-arm/examples/widgets/widgets/analogclock

八、使用Qt无法显示字体

按照我的经验,生成的Qt文件夹里面是没有fonts文件夹的,所以需要额外将字体放在Qt的lib里面目录为:/opt/qt5.12.9-arm/lib/fonts

# pwd
/opt/qt5.12.9-arm/lib/fonts
# ls
DejaVuSans-Bold.ttf             helvetica_100_75.qpf
DejaVuSans-BoldOblique.ttf      helvetica_100_75i.qpf
DejaVuSans-Oblique.ttf          helvetica_120_50.qpf
DejaVuSans.ttf                  helvetica_120_50i.qpf
DejaVuSansMono-Bold.ttf         helvetica_120_75.qpf
DejaVuSansMono-BoldOblique.ttf  helvetica_120_75i.qpf
DejaVuSansMono-Oblique.ttf      helvetica_140_50.qpf
DejaVuSansMono.ttf              helvetica_140_50i.qpf
DejaVuSerif-Bold.ttf            helvetica_140_75.qpf
DejaVuSerif-BoldOblique.ttf     helvetica_140_75i.qpf
DejaVuSerif-Oblique.ttf         helvetica_180_50.qpf
DejaVuSerif.ttf                 helvetica_180_50i.qpf
Vera.ttf                        helvetica_180_75.qpf
VeraBI.ttf                      helvetica_180_75i.qpf
VeraBd.ttf                      helvetica_240_50.qpf
VeraIt.ttf                      helvetica_240_50i.qpf
VeraMoBI.ttf                    helvetica_240_75.qpf
VeraMoBd.ttf                    helvetica_240_75i.qpf
VeraMoIt.ttf                    helvetica_80_50.qpf
VeraMono.ttf                    helvetica_80_50i.qpf
VeraSe.ttf                      helvetica_80_75.qpf
VeraSeBd.ttf                    helvetica_80_75i.qpf
fixed_120_50.qpf                japanese_230_50.qpf
fixed_70_50.qpf                 micro_40_50.qpf
helvetica_100_50.qpf            unifont_160_50.qpf
helvetica_100_50i.qpf

配置 /etc/profile

# cat profile
export PATH=/bin:/sbin:/usr/bin:/usr/sbinif [ "$PS1" ]; thenif [ "`id -u`" -eq 0 ]; thenexport PS1='# 'elseexport PS1='$ 'fi
fiexport PAGER='/bin/more '
export EDITOR='/bin/vi'# Source configuration files from /etc/profile.d
for i in /etc/profile.d/*.sh ; doif [ -r "$i" ]; then. $ifiunset i
doneexport TSLIB_ROOT=/opt/tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.soexport QT_ROOT=/opt/qt5.12.9-arm
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
export QML2_IMPORT_PATH=$QT_ROOT/qml
export QT_QPA_FB_TSLIB=1

http://www.ppmy.cn/news/180415.html

相关文章

全志v3s学习笔记(5)——主线Linux编译与烧录

一、安装交叉编译环境 交叉编译环境跟uboot使用的一样。 参考&#xff1a;arm-linux-gnueabihf 交叉编译工具链安装 二、下载linux源码 # 默认是zero-4.10.y分支&#xff1a; git clone https://github.com/Lichee-Pi/linux.git# 或者zero-4.13.y对网卡的支持更好 git clone …

台式 华硕 win7 耳机 插到 主机 耳机没有声音

台式接了显示器的&#xff0c;显示器下面有个耳机接口&#xff0c;因此就有一个显示器音频。那个地方接耳机有声音的。 在主机哪里有耳机接口&#xff0c;插上没声音&#xff0c;我以为下个驱动精灵&#xff0c;就能解决。然而驱动精灵驱动以后&#xff0c;还是耳机还是没声音…

华硕台式机VT-x设置

华硕台式机设置虚拟化支持&#xff08;在使用虚拟机时&#xff0c;提示vt-x不可用&#xff09; 1.开机时&#xff0c;显示华硕主界面&#xff0c;按delete键&#xff0c;进入华硕主板控制界面&#xff1b; 2.选择主界面的“高级模式”&#xff1b; 3.选择进入advanced&#x…

华硕重装后进入bios_华硕台式机重装系统win10按哪个键进入bios设置

需要为台式机进行重装系统win10的用户&#xff0c;可以在开机时按下DEL键进入bios设置U盘启动重装系统win10。 1.先将U盘插入到电脑中&#xff0c;然后我们在开机出现第一屏启动信息界面时按键盘上的DEL键&#xff0c;直接进入BIOS。 2.进入后按键盘上的右方向键找到“Advanced…

台式计算机华硕电源,美声大师+智能电源 华硕台式电脑M51AC

美声大师智能电源 华硕台式电脑M51AC 2014年04月01日 14:16作者&#xff1a;厂商投稿文章出处&#xff1a;泡泡网原创 分享 随着用户对台式电脑的性能需求日趋多元化&#xff0c;PC产品的创新之路也在向多维度的层面不断拓展。从极速运行到高清影音&#xff0c;从整机内配到技亮…

华硕计算机配置清单表,2019年8月华硕ROG系列全家桶奢华主机配置清单推荐

一直以来&#xff0c;华硕ROG系列硬件都是给人高端奢华的印象&#xff0c;让不少普通用户望而却步。然而对于土豪而言&#xff0c;性价比是不存在的&#xff0c;都是怎么高端奢华怎么来。接下来就为大家推荐一套主板、显卡、散热器、机箱、电源均采用了华硕ROG高端系列硬件的全…

台式计算机网卡型号怎么查找,怎么确定台式机无线网卡驱动版本 台式机无线网卡驱动版本查看方法...

台式机可以无线上网已经不是什么新鲜事&#xff0c;只要外接无线网卡即可实现台式机无线上网&#xff0c;台式机无线网卡大体上分为PCI无线网卡和USB无线网卡&#xff0c;因为USB借口的方便性&#xff0c;现在非常流行USB无线网卡&#xff0c;但是市面上的USB无线网卡种类繁杂&…

台式电脑win7计算机无法启动,台式电脑无法开机该如何解决

最近时常有人提及到关于台式电脑无法开机的问题&#xff0c;那这该如何解决呢?下面就由学习啦小编来给你们说说台式电脑无法开机的解决方法吧&#xff0c;希望可以帮到你们哦! 台式电脑无法开机的解决方法一&#xff1a; Win7的“启动修复”是一个恢复工具&#xff0c;可以用来…