ZYNQ7000 SPI LCD与Petalinux

这篇具有很好参考价值的文章主要介绍了ZYNQ7000 SPI LCD与Petalinux。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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。
黑金zynq7z100驱动lcd屏,ZYNQ,fpga开发,linux

Save保存,Exit退出。

Kernel Config

一般都要配置一下内核,主要涉及到一些驱动,不过Petalinux已经帮助配置了大部分功能了,直接编译也可以启动。
黑金zynq7z100驱动lcd屏,ZYNQ,fpga开发,linux

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

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时钟32M
       	rotate =<270>;
       	spi-cpol;
       	spi-cpha;
       	rgb;                           //颜色格式RGB
       	fps =<30>;                      //刷新30帧率
       	buswidth =<8>;                   //总线宽度8
        reset-gpios=<&gpio0 55 GPIO_ACTIVE_HIGH>;   //EMIO 55
       	dc-gpios  =<&gpio0 54 GPIO_ACTIVE_LOW>;   //EMIO 54
	    width = <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”。
黑金zynq7z100驱动lcd屏,ZYNQ,fpga开发,linux

然后在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启动串口会打印信息。
黑金zynq7z100驱动lcd屏,ZYNQ,fpga开发,linux
黑金zynq7z100驱动lcd屏,ZYNQ,fpga开发,linux
LCD上也会显示命令行运行。
黑金zynq7z100驱动lcd屏,ZYNQ,fpga开发,linux

总结

fbtft实现之后,在系统中/dev/下即会出现fb0,即linux系统下的显示器,现在就可以在根文件系统中部署图形界面以及qt、lvgl等应用。文章来源地址https://www.toymoban.com/news/detail-695539.html

到了这里,关于ZYNQ7000 SPI LCD与Petalinux的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • petalinux定制ZYNQ的Linux操作系统

    在进行Zynq-7000的Linux系统开发时,Xilinx官方提供了一个名为petalinux的工具。该工具运行在pc端的linux环境下,使用这个工具可以为目标板有量身定制kernel、rootfs等。该工具可与vivado设计工具一起配合使用,旨在简化 Zynq-7000 的Linux系统开发过程,提高设计生产力。本文将介绍pe

    2024年02月16日
    浏览(41)
  • zynq7000系列芯片介绍

    ZYNQ从架构上可以划分为两大模块,一个是PS(处理器系统),另一个是PL(可编程逻辑) PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU(Application Processor Unit)应用处理单元 即PS【可编程逻辑里面最最核心的东西】,它由两个双核心的Cortex-ARM A9、一些缓存和存储组成

    2024年02月06日
    浏览(55)
  • petalinux-2021.1在zynq7020的flash上启动linux

    一、 前言 在电脑上安装虚拟机或者找一个电脑安装linux,用于编译petalinux工程; 安装与vivado对应的petalinux-tool; 版本信息: 1)linux:ubuntu16.04.06; 2)vivado:v2021.1; 3)petalinux:v2021.1; 4)petalinux工程参考bsp:xilinx-zc702-v2021.1-final.bsp; vivado可以在linux中,也可在windows中; 离

    2024年02月07日
    浏览(43)
  • Xilinx ZYNQ 7000学习笔记三(小结)

    ZYNQ 7000的启动模式由外部引脚决定的,5个模式引脚MIO[6:2]用于配置NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash以及JTAG 一共5种启动模式。具体而言就是复位时,zynq-7000 SOC对下述引脚进行连续3个时钟周期采样。复位采样MIO[6:2]并将采样的模式值保存到系统级控制寄存器SL

    2024年02月09日
    浏览(45)
  • XILINX ZYNQ 7000 AXI总线 (二)

    了解了AXI 的大部分内容后,开始做一个实战,就是完成AXI 结构的输入输出搭建。 一.创建一个IP 3. 4. 5. 6.选择AXI FULL,创界主接口和从接口 7. 8.可以看到XILINX AXI FULL 的源代码 二.创建一个新的工程,把IP导入到这个工程 2.创建 block design 放入两个AXI IP 三 设计 创建两个 接口进行

    2024年02月16日
    浏览(56)
  • ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条

    简介 像素(Pixel):像素是指由图像的小方格组成的,这些小方快都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。 分辨率(Resolution):是屏幕图像的精密度,是指显示器所能显示的像素有多少。 像素格式(Pixel Format):将RGB三

    2024年02月06日
    浏览(44)
  • xilinx zynq7000系列 sdio时钟超频详解

    zynq7000的时钟系统很简单,首先是PS_CLK输入时钟,这是外部33.33333Mhz晶振时钟,直接输入到三路PLL(锁相环),分别是 ARM PLL、I/O PLL、DDR PLL;ARM PLL给 CPU核心、SCU(用来管理多核通信)、OCM、AXI总线提供时钟;I/O PLL给各类外设包括SDIO、USB、Ethernet等提供时钟;DDR PLL仅用来给DDR2/3提供

    2023年04月08日
    浏览(41)
  • Xilinx ZYNQ 7000学习笔记一(复位和启动)

    参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位、看门狗定时器、JTAG控制器复位信号和软件复位信号。其中,硬件复位引脚由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱动。在PS中,有3个看门狗定时器可用来产生复位信号;JTA

    2024年02月06日
    浏览(83)
  • zynq7000学习(1)——vivado环境下PL配置

    一、新建工程:       现开发板型号为xc7z100ffg900-2  选择芯片 (选择芯片7100的话,就输入xc7z100  后面的-1和-2是速度等级), 更改项目名为system 。 Create Block Design (创建模块化的设计)——设置设计名称为system。     这时会出现design窗口和source窗口、画布窗口,source中出

    2024年02月13日
    浏览(56)
  • ZYNQ-XC7Z020 JTAG 连接不上 Vivado

    平台: 【ALINX黑金开发板,板载JTAG】 【Vivado 2017.4】 最近项目需要使用到FPGA,没接触过被迫学习,第一关就遇到了困难。 具体情况: Vivado   Auto Connect 连接不上板子。 解决: 运行安装目录下 install_digilent.exe 程序。 G:XilinxVivado2017.4dataxicomcable_driversnt64digilentinstall_di

    2024年02月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包