【Linux】NanoPi-NEO2外接spi-lcd

news/2024/10/18 9:19:04/

这是目录

  • 一、显示接口
    • 1.1、LCD接口
    • 1.2、核心板接口
  • 二、添加驱动
    • 2.1、确认驱动型号
    • 2.2、添加驱动
  • 三、测试
  • 四、附加
    • 4.1、交叉编译器安装
    • 4.2、内核和module编译
    • 4.3、扩展rootfs大小

本文使用环境:
电脑:Ubuntu 18.04.5 LTS
开发板:NanoPi-NEO2 500M
GUI:lvgl
交叉编译器:aarch64-linux-gnu
内核版本:4.14
显示屏:1.33寸LCD高清IPS
显示屏资料:https://openmv.io/products/lcd-shield (128,为什么会这么贵,搞不清楚)

写在前面
机缘巧合咸鱼上收了一块nanopi得开发板,抽空研究研究玩一玩,记录一下心得体会。
本文使用的内核为4.14,不支持3.x的,因此需要单独编译: 本文编译内核的教程

一、显示接口

1.1、LCD接口

我TB买的显示屏,然后自己按照尺寸画的扩展板,接的LCD。
立创工程:链接: 暂时还没有做好,做好了再放上来
在这里插入图片描述
接口是直接SPI通讯的,如下:
在这里插入图片描述

1.2、核心板接口

核心板接口参考两个文章,
核心板管脚: 核心板管脚定义
在这里插入图片描述

nanopi教程推荐的LCD: 教程推荐的lcd管脚定义
在这里插入图片描述
参考上面两个文章,可以看出,自己的LCD只需要按照对应的接线进行配置即可,需要linux的pin号,后期驱动需要。

PinNameLinux gpioPinNameLinux gpio
1VDD_3.3V2
34
56
7LCD_RESET2038
910
11LED_EN012
1314
1516
1718
19LCD_MOSI6420
21LCD_MISO6522LCD_D/C1
23LCD_CLK6624LCD_CS67

二、添加驱动

2.1、确认驱动型号

首先要确认内核是存在改驱动的,要不然就麻烦了。那么如何确认?
可以参考文章
在这里插入图片描述
简而言之就是直接找内核中有没有定义该驱动,本文所有LCD屏幕驱动为ST7789,内核文件中存在改驱动,因此直接使用即可。
在这里插入图片描述

2.2、添加驱动

这小节也可以参考之前的文章。
可以参考文章

sudo modprobe fbtft_device custom name=admatec_c-berry28  busnum=0 cs=0 gpios=reset:203,dc:1,led:0 rotate=90 debug=7

其中 name gpios 都需要根据驱动的具体型号进行确定。本文的1.2小节有对应的编号
name:fbtft_device.c中是什么就是什么
busnum:用于指定使用第几个spi控制器,(本文是spi 0)
CS:SPI的第几个CS片选线,(本文是cs 0)
rotate:屏幕翻转角度
debug:debug等级7.
在这里插入图片描述
加载后可以通过lsmod查看全部模块加载情况。
lsmod | grep xxx,单独查看模式加载情况
dmesg | grep “fb” 查看log,排查异常情况

虽然但是,这里还是很麻烦,7789的驱动并没有单独编译出来,所以需要下载内核文件编译输出ko文件。。。。。。
本文编译内核的教程
交叉编译器、内核和uboot需要自己下载。交叉编译器需要安装,教程也在上面的链接。
我这里直接上传.ko文件。
链接: 驱动文件

后续的添加启动可以参考:
可以参考文章

三、测试

到这里应该是可以点亮了,具体的显示内容可以根据自己的需求配置。
参考之前的lvgl文章:【Linux】linux上使用lvgl
在这里插入图片描述

四、附加

4.1、交叉编译器安装

在这里插入图片描述

4.2、内核和module编译

在这里插入图片描述
上图的nodule编译非常重要,lcd的驱动是按照module来处理的。

4.3、扩展rootfs大小

编译完成后的镜像不能直接下进入系统,因此太大了。系统没有扩容,rootfs只有1.几个G,完成不够。。。。。。。注意:烧写完成的SD卡不要插入nanopi启动。。要不然以下步骤有点麻烦。本文是烧写完后直接用SD卡进行的扩容。
接下来扩容。需要用到电脑。UBUNTU。。。
插入SD卡,然后在 Ubuntu 电脑中安装下 gparted 这个软件,执行下列命令:注意不要在SD卡的路径下操作。。

sudo apt install -y gparted
sudo gparted

选择SD卡。
在这里插入图片描述
可以看出rtoofs已经基本用完,因此目标是把rootfs扩大。

简单一点把userdata直接删掉,全部分给rootfs。。。。。。
在这里插入图片描述

编译的命令总结如下:


nanopi-neo2:使用的的:sun50i-h5-nanopi-neo2UBOOT:
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- distclean
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- nanopi_neo2_defconfig
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- -j16KERNEL:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- distclean
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j16make Image dtbs ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-cp arch/arm64/boot/Image /media/zxx/boot/
cp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb /media/zxx/boot/编译modules:make modules ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-sudo make modules_install INSTALL_MOD_PATH=/media/zxx/rootfs ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-教程:
https://wiki.friendlyelec.com/wiki/index.php?title=Building_U-boot_and_Linux_for_H5/H3/H2%2B&redirect=no

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

相关文章

Microsoft Power Apps部署方案

目录 前言 一、准备条件 二、Power Apps环境部署 三、应用程序部署 四、最佳实践 总结

[异常]java常见异常

Java.io.NullPointerException null 空的,不存在的NullPointer 空指针 空指针异常,该异常出现在我们操作某个对象的属性或方法时,如果该对象是null时引发。 String str null; str.length();//空指针异常 上述代码中引用类型变量str的值为…

DS树--二叉树高度

题目描述 给出一棵二叉树,求它的高度。 注意,二叉树的层数是从1开始 输入 第一行输入一个整数t,表示有t个二叉树 第二行起输入每个二叉树的先序遍历结果,空树用字符‘0’表示,连续输入t行 输出 每行输出一个二叉…

基于 DSP+FPGA+1553B总线的水下信息融合系统的设计

在一个大型水下系统中,针对不同分系统的特 性,通常采用不同的通信协议。串行通信具有抗干扰 能力强,传输距离远等特点,适用于需要远距离通信 的分系统; MIL-STD-1553B 总线在传输方面具有极强 的可靠性和实时性&a…

Linux DHCP服务

DHCP 作用 DHCP动态主机配置协议作为服务端负责集中给客户端分配各种网络地址参数(主要包括IP地址、子网掩码、广播地址、默认网关地址、DNS服务器地址) 传输协议端口 服务端 UDP 67端口 客户端 UDP 68端口 工作原理 1) 客户端广播发送DISCOVER报文寻找服务端 2) 服务端广播发…

OpenAI-ChatGPT最新官方接口《语音智能转文本》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(六)(附源码)

Speech to text 语音智能转文本 Introduction 导言Quickstart 快速开始Transcriptions 转录python代码cURL代码 Translations 翻译python代码cURL代码 Supported languages 支持的语言Longer inputs 长文件输入Prompting 提示其它资料下载 Speech to text 语音转文本 Learn how…

Java常见集合类区别

Java常见集合类区别 1. List和Map区别1.1 深入阐述 2. ArrayList和Vector的区别2.1 具体区别 3. ArrayList, Vector, LinkedList的存储性能和特性4. HashMap和Hashtable的区别4.1 两者区别总结 1. List和Map区别 List:存放单个元素的集合 List集合所包含的元素可以…

世界大学机械工程TOP10,国内大学哪家强?

就在前不久世界大学的排名已经发布,机械工程学科是工科类学科当中代表学科之一,相信很多小伙伴是非常想要了解的。那么,我给大家介绍一下2023年QS世界大学(机械工程)学科排名。 本次排名比较分析了包括世界93个地区的…