ZYNQ7000 SPI LCD与Petalinux

article/2025/11/8 7:13:27

前言

ZYNQ内部集成两个ARM Cortex A9核心,Xilinx也推出了Petalinux工具,与Vidado搭配可以方便地完成Linux的uboot、kernel、rootfs部署。
开发板上集成了HDMI,但是需要在FPGA中实现逻辑,但是实现之后占用了7010快一半的资源,多少有点离谱,而且HDMI还是不方便,所以就用linux内核中的fbtft驱动来实现显示,只占用了几个EMIO以及PS端的SPI即可实现。

文中Vivado以及Petalinux版本均为v2018.3。

Vivado

在上文的基础上在PS的ZYNQ7 Processing System中增加使能SD0,ETH0,QSPI Flash,视使用情况而定。
generate output products -> create HDL wapper -> Elaborated Design I/O Ports -> Generate Bitstream -> Export Hardware(勾上include bitstream)。
启动一下SDK,在SDK的工作文件夹里找到system.hdf,拷出供Petalinux用。

Petalinux

Petalinux必须在Linux中运行,Vidado可以在Linux和Windows下运行。

Petalinux Config

安装玩Petalinx后,在每次打开终端之后要source一下petalinux安装目录下的setting.sh。
找一个目录新建vidado工程:petalinux-create -t project --template zynq -n <NAME>
进工程目录在载入HDF硬件描述文件:petalinux-config --get-hw-description=.
=后面跟着的是hdf文件所在目录,如果就在当前目录下写个.就行。
此时会弹出petalinux的配置界面,一般没什么要改的,这里把根文件系统的形式改为SD card。
如果以后要更改这些设置就运行petalinux-config。
请添加图片描述

Save保存,Exit退出。

Kernel Config

一般都要配置一下内核,主要涉及到一些驱动,不过Petalinux已经帮助配置了大部分功能了,直接编译也可以启动。
请添加图片描述

因为板子上连接了一块LCD屏幕,所以这里使能一下fbtft,这是一个Staging Driver,可以把很多LCD配置成fbx显示器。具体位置在Device Drivers → Staging drivers → Support for small TFT LCD display modules,空格使能到[*],即直接编译进内核,再进去使能对应LCD的型号。
请添加图片描述
保存,退出。

Device Tree

内核使能了驱动相应的功能,Linux ARM系统要把功能与设备连接起来还需要设备树。Petalinux工程的供用户修改设备树在<工程目录>/project-spec/meta-user/recipes-bsp/device-tree/file/下的system-user.dtsi文件夹内。还有一部分由Petalinx自动生成的设备树在<用户目录>/components/plnx_workspace/device-tree/device-tree/下,从system-top.dts中可以看出来,用户可修改的设备树在最后,设备树有覆盖的功能呢,所以这里的设备树就不要动了,有需要添加的地方在system-user.dtsi中覆盖修改即可。
system-user.dtsi文件一般卖板子的会给模板,或者基于别的模板修改也行。

/include/ "system-conf.dtsi"
#define GPIO_ACTIVE_HIGH 0
#define GPIO_ACTIVE_LOW  1
/ {  model = "Zybo Development Board"; compatible = "zynq7010,zynq-7020","xlnx,zynq-7000";usb_phy0: phy0 {compatible = "ulpi-phy";#phy-cells = <0>;reg = <0xe0002000 0x1000>;view-port = <0x170>;drv-vbus;};leds {compatible = "gpio-leds";gpio-led1 {label = "led1";gpios = <&gpio0 56 GPIO_ACTIVE_HIGH>;default-state = "off";};gpio-led2 {label = "led2";gpios = <&gpio0 57 GPIO_ACTIVE_HIGH>;default-state = "on";};gpio-led3 {label = "led3";gpios = <&gpio0 58 GPIO_ACTIVE_HIGH>;default-state = "off";};gpio-led4 {label = "led4";gpios = <&gpio0 59 GPIO_ACTIVE_HIGH>;linux,default-trigger = "heartbeat";};};
};
&usb0{dr_mode = "host";usb-phy = <&usb_phy0>;
};
&spi0 {st7789v@0 {status = "okay";compatible = "sitronix,st7789v";reg = <0>;spi-max-frequency =<32000000>;        //SPI时钟32Mrotate =<270>;spi-cpol;spi-cpha;rgb;                           //颜色格式RGBfps =<30>;                      //刷新30帧率buswidth =<8>;                   //总线宽度8reset-gpios=<&gpio0 55 GPIO_ACTIVE_HIGH>;   //EMIO 55dc-gpios  =<&gpio0 54 GPIO_ACTIVE_LOW>;   //EMIO 54width = <240>;height= <320>;debug =<0>;                     //不开启调试};
};

在这里主要添加了四个LED,再在SPI总线上添加LCD显示屏参数,LCD显示屏上还有reset和dc两个GPIO要根据需求添加,这里要注意reset-gpios要设置成GPIO_ACTIVE_HIGH,dc-gpios要设置成GPIO_ACTIVE_LOW。

编译

根文件系统就先不改啥了,直接运行petalinux-build编译。
system-user.dtsi写错了容易编译不通过,所以可以先不改system-user.dtsi编译,第一次通过之后再修改system-user.dtsi,然后只编译内核petalinux-build -c kernel

打包再烧录到SD card

编译通过后要进行打包,这里应该是考虑到petalinux运行在不同的系统上有不同的启动方式,所以打包需要手动运行。
petalinux-package --boot --fsbl --fpga --uboot --force
最后的镜像文件在<工程目录>/images/linux/下,fsbl、bitstream以及uboot封装在BOOT.BIN文件中,芯片上电之后即在SD card的第一个分区中寻找这个文件,然后依次加载运行。kernel内核镜像为image.ub中,如果在petalinux设置中不配置根文件系统在SD card那么根文件系统也会在这个镜像文件中,猜测这个镜像会加载到内存中,导致linux运行时对根文件系统的修改断电会丢失。
根文件系统打包在很多个压缩文件中,这里用rootfs.tar.gz。
把SD卡挂到Ubuntu里,先对SD卡进行分区,用脚本挺麻烦的,可以用gparted工具来进行分区,‘sudo gparted’。
第一个分区为fat32格式,大小约为100M,能放得下BOOT.BIN和image.ub就行,命名Label为“BOOT”。
第二个分区为ext4格式,可以把SD卡剩下的空间都分进去,命名Label为“rootfs”。
请添加图片描述

然后在images/linux/文件夹里执行以下脚本:

#!/bin/sh
sudo rm -rf /media/<ubuntu用户>/BOOT/*
sudo rm -rf /media/<ubuntu用户>/rootfs/*
sudo cp BOOT.BIN image.ub /media/<ubuntu用户>/BOOT/
sudo tar -zxvf rootfs.tar.gz -C /media/<ubuntu用户>/rootfs/
sudo umount /media/<ubuntu用户>/BOOT
sudo umount /media/<ubuntu用户>/rootfs

完成后拔出SD卡。

启动

把SD卡插到板子上设置为SD卡启动,上电,如果成功,linux启动串口会打印信息。
请添加图片描述
请添加图片描述
LCD上也会显示命令行运行。
在这里插入图片描述

总结

fbtft实现之后,在系统中/dev/下即会出现fb0,即linux系统下的显示器,现在就可以在根文件系统中部署图形界面以及qt、lvgl等应用。


http://chatgpt.dhexx.cn/article/JcgAsaT9.shtml

相关文章

ZYNQ7000 (二十)等精度频率计的原理分析和实例实现

等精度频率计的原理分析和实例实现 这一视频主要来分析实现等精度频率计。通过分析硬件实现原理&#xff0c;编写 PL的逻辑实现部分&#xff0c;以及对应 PS的 C语言操作&#xff0c;操作挂在 PS寻址空间的寄存器&#xff0c; 达到控制等精度频率计逻辑&#xff0c;读取计数结果…

ZYNQ7000-MIO与EMIO详解

摘要 本文参考芯片手册详细介绍了ZYNQ7000芯片的信号、接口与引脚&#xff0c;结合芯片封装说明了引脚的类别与分布&#xff0c;并说明了MIO与EMIO的区别。 关键词&#xff1a;ZYNQ&#xff1b;信号&#xff1b;引脚&#xff1b;MIO&#xff1b;EMIO&#xff1b;Bank 前言 了解…

ZYNQ7000 SDK开发使用

Zynq开发平台工具 ZYNQSDK开发使用 Zynq开发平台工具导入硬件平台配置BSP包创建和配置创建应用程序下载固件和调试应用程序创建FSBL工程建立内存测试工程启动模式spi flash及sd卡的测试 参考文档&#xff1a;zynq_sw\Lab_instructions\Lab01 - Explore Zynq Hardware Platform …

Zynq7000 OPENAMP 实验

前言 Zynq7000 openamp实验&#xff0c;最近想做一个多cpu异构系统&#xff0c;后面会用zynqmp去做&#xff0c;先拿zynq7000试一下 首先说明&#xff0c;openamp是开源异构多处理通信框架。现在cpu不再像以前单个cpu&#xff0c;而是越来越复杂&#xff0c;比如TI的TDA4芯片…

ZYNQ7000固化流程

ZYNQ7000固化流程 生成BOOT.bin文件 &#xff08;1&#xff09;在SDK开发环境下&#xff0c;将FSBL.elf文件&#xff0c;FPGA.bit文件和FW.elf文件按次序添加并打包成BOOT.bin文件 2. BOOT.bin文件固化 &#xff08;1&#xff09;在xilinx SDK环境中通过JTAG进行固化&#x…

zynq7000 资源介绍

zynq 7000 资源介绍 整体框架PS端资源PS端资源 整体框架 Zynq7000系列是基于APSOC的可拓展处理平台&#xff0c;它的本质特征是将一个双核ARM Cortex-A9处理器和一个可编程的FPGA芯片集成到一个片上系统中。在进行Zynq7000的详细说明前&#xff0c;本节首先对架构的高层模型进…

zynq7000 创建fsbl工程,并打开log

背景&#xff1a;若通过petalinux编译的启动文件&#xff0c;放到sd卡里面&#xff08;或者flash&#xff09;&#xff0c;上电后串口没有任何log信息&#xff1b;可以考虑搭建fsbl工程。 以2018.3版本为例。 1、把*.hdf文件放到想要创建的文件里面&#xff0c;然后双击“Xil…

ZYNQ7000-GPIO详解

摘要 本文介绍了ZYNQ7000芯片中GPIO的基本概念&#xff0c;分组、功能、控制寄存器、中断设置以及如何在Vitis中配置GPIO。 本文参考&#xff1a;UG585 - Zynq-7000 SoC Technical Reference Manual (v1.12.2) 385~394页–Ch14: General Purpose I/O(GPIO) 关键词&#xff1a…

zynq7000中断系统

7.1环境 这一章节描述了系统级的中断环境以及中断控制器功能。PS端是基于ARM架构的&#xff0c;并且使用了两个Cortex-A9处理器以及型号为pl390的GIC中断控制器。整个中断结构与处理器、可编程逻辑器件(PL)、从外部IO接受到的中断请求有非常紧密的联系。本章节包含了下面这些关…

【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例

UART 简介 我们在使用 PS 的时候&#xff0c;通常会添加 UART 控制器&#xff0c;用于打印信息和调试代码。除此之外&#xff0c;PS 在和外部设备通信时&#xff0c;也会经常使用串口进行通信。 UART 控制器 UART 控制器是一个全双工异步收发控制器&#xff0c;ZYNQ 内部包含…

Xilinx ZYNQ 7000入门

ZYNQ是Xilinx推出的新一代全可编程片上系统&#xff0c;将处理器的软件可编程性与FPGA的硬件可编程性完美整合。 ZYNQ7020&#xff1a;xc7z020clg400-2 ZYNQ7010&#xff1a;xc7z010clg400-1 组合了一个双核ARM Cortex-A9&#xff08;PS&#xff09;处理器和一个传统的…

ZYNQ7000平台介绍

基于ZYNQ7000平台软件开发 ZYNQ7000平台简介 本文介绍ZYNQ7000平台采用Avnet推出的ZedBoard开发板进行讲解&#xff0c;ZedBoard开发板基于Xilinx Zynq-7000 All Programmable Soc&#xff0c;整合了双核Cortex-A9的PS处理单元和PL逻辑单元。 在zynq上&#xff0c;ARM Cortex…

【ZYNQ】ZYNQ7000 全局定时器及其驱动示例

定时器简介 在 ZYNQ 嵌入式系统中&#xff0c;定时器的资源是非常丰富的&#xff0c;每个 Cortex-A9 处理器都有各自独立的 32 位私有定时器和 32 位看门狗定时器&#xff0c;这两个 CPU 同时共享一个 64 位的全局定时器&#xff08;GT&#xff09;。 系统框图 全局定时器&am…

Xilinx ZYNQ 7000学习笔记一(复位和启动)

一、复位系统 参考文献&#xff1a;Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位、看门狗定时器、JTAG控制器复位信号和软件复位信号。其中&#xff0c;硬件复位引脚由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱…

zynq7000系列芯片介绍

ZYNQ从架构上可以划分为两大模块&#xff0c;一个是PS&#xff08;处理器系统&#xff09;&#xff0c;另一个是PL&#xff08;可编程逻辑&#xff09; PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU&#xff08;Application Processor Unit)应用处理单元 即PS【可编…

xilinx zynq-7000 基本知识

Zynq-7000 采用可扩展式处理平台架构&#xff08;Extensible Processing Platform、EPP&#xff09;&#xff0c;是 Xilinx 用 28nm HKMG工艺制成的低功耗&#xff0c;高性能&#xff0c;高扩展性的新型芯片&#xff0c;这款新品里面集成了ARM CORTEX-A9 MPSOC 硬核以及相应的S…

ZYNQ-7000概述

摘要 Xilinx推出的ZYNQ-7000被称为全可编程片上系统&#xff08;SOC&#xff09;&#xff0c;它由FPGA与ARM组合构成&#xff0c;硬件可编程&#xff0c;软件也可编程&#xff0c;在众多应用场合有一定优势。本文根据Xilinx官网的介绍并结合ZYNQ-7000的多份数据手册总结了此产品…

ZYNQ学习笔记(一)---初识ZYNQ-7000系列

前几日刚入手一款ZYNQ-7000系列的板卡&#xff0c;之前我也没用过FPGA&#xff0c;直接跨越到ZYNQ的原因主要是某宝上这款板卡相较于其他片上仅有一块FPGA的板卡性价比更高。作为入门&#xff0c;在学习过程中&#xff0c;笔者选择先单独学习ZYNQ上的FPGA部分&#xff0c;也就是…

ZYNQ7000 Vivado详细教学步骤

ZYNQ7000 Vivado开发 ZYNQ7000 Vivado详细教学步骤 ZYNQ7000 Vivado开发1.建立工程项目2.创建Block Design3.配置IO BANK4.配置DDR和CLOCK5.配置PS外设6.测试PS外设7.增加PL外设 1.建立工程项目 Xilinx提供了一系列开发工具&#xff0c;其中包括Vivado平台工具&#xff0c;它是…

mongodb客户端 robo 3T 查询突破50行限制

robo 3T的小bug 这个mongodb客户端&#xff0c;每次查询数据只有50行&#xff0c;虽然有向下翻页的功能 但实际上点击后会被重置&#xff0c;还是只有前50条 解决办法 DBQuery.shellBatchSize 500; 当前窗口最大查询数量修改到500&#xff08;只有当前窗口生效&#xff09;…