【Linux】NanoPi-NEO2外接spi-lcd

news2024/11/22 16:29:40

这是目录

  • 一、显示接口
    • 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-neo2

UBOOT:
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- -j16

KERNEL:
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- -j16

make 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.coloradmin.cn/o/430323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这款知名开车软件,居然暗藏大量病毒

想必大家见多了网上有关 Windows 系统宝藏神级软件的种种推荐。 其中有这么一款软件一直占据推荐榜单前列,并且坐拥无数好评。 它就是在 Steam 上售价仅 19 元,表面看起来平平无奇的 Wallpaper Engine (壁纸引擎)。 别看它价格不…

常见分布式锁4:zookeeper 瞬时znode节点 + watcher监听机制,ChatGPT回复的解决死锁的方案

原文地址在这里 临时节点具备数据自动删除的功能。当client与ZooKeeper连接和session断掉时,相应的临时节点就会被删除。zk有瞬时和持久节点,瞬时节点不可以有子节点。会话结束之后瞬时节点就会消失,基于zk的瞬时有序节点实现分布式锁&#x…

windows 环境下安装ITOP

该文章修改自旧版本的教程,如有侵权或其他问题请及时联系 windows 环境下安装ITOP 1、安装环境的下载 安装的相关文件列表,自用的程序安装包是版本3.0.2-1,环境是3.2.6版本;也可以直接通过下面链接找到最新的版本进行下载 1.1…

GitLab与jekins结合构建持续集成(cl)环境(2)

目录 GItlab配置邮箱 绑定邮箱 创建群组 添加人员 创建一个项目 添加文件 新建分支 如何拉取代码 Git bash 演示 Git GUI演示 安装jenkins 更改插件镜像源 配置jenkins使用gitlab更新代码 安装jekins插件 配置jenkins免密拉取gatlab代码 jenkins创建项目 将代码…

一种vivado联合vcs仿真以及verdi查看波形的方法

上一篇中提到vivado仿真xilinx官方的axi vip耗时过长、且每次缩放波形时加载慢的问题。后来用了正点原子的AXI DDR例程,将AXI DDR换成了AXI RAM进行读写测试,用以学习了解AXI的工作方式。详见此文读写AXI4接口RAM的简单示例_给米PHY的博客-CSDN博客。 在…

力扣题库刷题笔记20-有效的括号

1、题目如下: 2、个人Python代码实现如下: 第一次读题就理解错了题意,以为是只判断小括号闭合,大括号、中括号只是干扰元素。再次读题后,代码实现如下: 以上代码仍旧是没有理解清楚题意,以为是只…

Linux Shell 实现一键部署二进制docker+docker_compose

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 d…

协议篇之以太网UDP协议

协议篇之以太网UDP协议一、写在前面二、TCP/IP协议分层三、UDP协议数据报格式2.1 MAC层/物理层:2.2 IP层/网络层:2.3 UDP层/传输层:2.4 应用层:四、总结四、写在后面一、写在前面 TCP/IP协议是指一个协议簇,可以理解为…

测试包的更新

有的项目有配了ci自动打包更新,开发有权限,就不用测试更新;有的是在阿里云上,测试没有权限,也是开发更新;测试自己的测试服务器,部分开发没有上传下载的权限,所以需要测试来进行更新…

CentOS 8自动化安装MongoDB并安装和实验master-slave集群、副本集群(Replica Set)、分片集群(Sharding)

文章目录CentOS 8自动化安装MongoDB安装Master-Slave集群安装并测试副本集(Replica Set)集群安装副本集(Replica Set)集群实验测试安装并测试分片集群(Sharding)注意实验使用的是ARM架构的CentOS 8 虚拟机 CentOS 8自动化安装MongoDB 首先,更…

分布式事务-概念-实现方式

分布式事务 文章目录分布式事务一、分布式事务相关概念1.分布式事务架构图2.理解本地事务相关概念3.理解分布式事务相关概念1.CAP理论2.刚性事务(CP)与柔性事务(AP)3.基于AP模型衍生下的BASE理论4 .如何从大方向选择分布式事务&am…

MySQL正则表达式 | 事务详解

目录 一、正则表达式 实例操作 二、事务 事务控制语句 MYSQL 事务处理主要有两种方法 SQL测试代码 PHP中使用事务实例 使用保留点 SAVEPOINT 一、正则表达式 MySQL可以通过 LIKE ...% 来进行模糊匹配。 MySQL 同样也支持其他正则表达式的匹配, MySQL中使用…

【嵌入式Linux内核驱动】GPIO子系统

GPIO子系统 总体框架 通用功能 可以设为输出:让它输出高低电平;可以设为输入,读取引脚当前电平;可以用来触发中断 通用属性 Active-High and Active-LowOpen Drain and Open Source 开漏和开源 GPIOLIB向上提供的gpiod相关接…

数据结构与算法之手撕排序算法

前言 为什么要学习排序算法? 根据统计,早起大型机CPU资源的四分之一都花在了数据排序上面。排序算法作为最基础的算法,各种操作系统、编程语言都提供了内置的实现。既然排序实现随处可见,我们为什么还要自己动手实现呢&#xff1…

文章伪原创-文章伪原创工具

伪原创原理 文章伪原创的原理是将一篇原始文章进行修改、改写、调整或者替换一些词句等方式,生成与原始文章类似但又不完全相同的新文章。 文章伪原创的实现需要用到自然语言处理技术和相关的算法。具体的过程包括以下几个步骤: 分析原始文章&#xff…

YML是一种数据存储格式

读取yml配置信息 Value("${province}") private String province; Value("${user.sname}") private String name1; Value("${user1[1].name}") private String name; Value("${server.port}") private int port; server:port: 8099 #…

大数据现在找工作难么

大数据行业工作好找还是难找不是光靠嘴说出来的结合实际,看看市场上的招聘需求和岗位要求就大致知道了 要想符合企业用人规范,学历,工作经验,掌握技能都是非常重要的~ 先来看几个招聘网站的报告数据: Boss直聘发布的…

Linux应用编程(系统信息与系统资源)

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取系统信息,譬如获取系统时间、日期以及设置系统时间、日期等&#xf…

java拦截器怎么实现

Java拦截器是一种对象拦截器,它可以拦截任何的类、方法和字段。拦截器还可以用于检查类是否已经加载以及对字段的访问权限是否符合规范。下面就让我们来了解一下 java拦截器怎么实现吧。 在 Java中,可以通过重写方法和代码块来实现拦截功能,但…

通俗讲解什么是Socket通讯

Socket通讯原理 1、什么是Socket? Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。 Socket是一套…