ZYNQ7020

您所在的位置:网站首页 串口登陆不打印信息 ZYNQ7020

ZYNQ7020

2024-07-11 18:15| 来源: 网络整理| 查看: 265

写在前面:本文用于记录自己在zynq7020-串口开发上遇到的一些小问题,问题如何被解决的可以参考点这里,建议首先把本篇文章看完

目录 抛出问题Q1:UBOOT可以启动,内核无法启动Q2:配置完串口后,UBOOT 和 内核都无输出打印 一、vivado中使用PL端串口IP新建工程 二、制作系统

抛出问题 Q1:UBOOT可以启动,内核无法启动

使用串口IP的时候出现了,uboot可以启动,但是内核启动不了,启动就会被kill…如下图: 在这里插入图片描述

出现如图所示的问题,恭喜!你找到答案了,如果不是这个问题,下面的文章也就不用看了,(学习如何使用串口除外)。 解决办法:在vivado中将串口中断连线连接到PS中断连线上,不连接无法启动内核。。。。参考新建工程第二小节

Q2:配置完串口后,UBOOT 和 内核都无输出打印

        如果在Q1没问题的基础上,出现这种问题,多半是设备树没有正确配置,加入串口IP后,系统默认串口是PL端的串口。

解决办法:参考生成系统第二小节。

一、vivado中使用PL端串口IP

        工程中我使用的是:UART Lite,直接在vivado中搜索串口,会出现两个IP,如图所示。 在这里插入图片描述

选择本文所用的UART Lite,这两个IP的区别在于,UART 16550更加高级(具体自己查资料),因为我的项目使用UART Lite足够了。

新建工程

        新建工程说一句,尽量不要使用特殊的名字命名工程,最好不要用数字,因为后期做系统的时候稍微有些麻烦,尤其是产生fsbl文件的时候。可以采用如下: >project_zynq 但尽量不要使用: projject_zynq_V.1.20 1、PS配置自己需要的功能即可。(本文直接参考的正点原子7020教程,直接在他的工程上进行的修改,感谢!!!!)如图所示:需要网口的单独添加网口。这里删除了网口IP,如果需要直接参考最终连线图。 在这里插入图片描述

2、添加IP后,连线不需要我们手动,直接自动连接即可,IP如图所示。在这里插入图片描述

注意此时发现IP核的中断端口并未连接,因此需要手动连接,如图: 在这里插入图片描述

注意:这里不连接,后期内核无法启动。。。。这就是问题核心所在。。。。,连接完成后如图所示。(这里我加入了网口,因为编程需要,所以添加单独的模块。。最好加上。。)

在这里插入图片描述

**IP核默认是9600波特率,**如果需要修改的,双击IP核打开直接修改。 在这里插入图片描述

全部连接完成后,点击运行分析,这里还需要分配管脚,先分析,完成再生产bitl流。 在这里插入图片描述

分配管脚:这里的管脚我是随便写的,根据需要自己修改… 在这里插入图片描述

点击生成hdf文件。。

在这里插入图片描述

最后导出hdf文件。输出在xxx.sdk文件夹下。 在这里插入图片描述

二、制作系统

说明:在zynq上制作系统的方法有很多种,可以直接peatlinux,也可以单独来做。以下内容军参考正点原子ZYNQ7020linux开发教程-第20章,单独编译每个部分。教程文档最后有,需要的可以直接下载。 在这里插入图片描述

1、首先根据hdf文件,生成设备树等文件,具体按照教程走。在hsi中生成设备树的时候,会出现提示:如果前面没有连接串口IP 的中断引脚, 这里会提示一个警告:串口中断的引脚未连接。第一次遇到这个警告我没在意,结果这就是问题。必须连接这个中断到对应的控制器上 在这里插入图片描述

这一步会生成xxx.bit文件,将其重命名为system.bit

2、输入hsi命令后:

open_hw_design navigator_7020_wrapper.hdf set_repo_path /home/liuyu/device-tree/device-tree-xlnx-xilinx-v2018.3 create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0 generate_target -dir ./dts close_sw_design device-tree set hwdsgn navigator_7020_wrapper set_repo_path /home/liuyu/embeddedsw/embeddedsw-xilinx-v2018.3 generate_app -hw $hwdsgn -os standalone -proc ps7_cortexa9_0 -app zynq_fsbl -compile -sw fsbl -dir ./fsbl

命令执行完成会生成设备树文件。如下图所示:将下图中的navigator_7020_wrapper.bit 修改成system.bit 在这里插入图片描述 进入到dts文件夹下。 在这里插入图片描述

首先修改system-top.dts。这里是另外的一个坑点,外加的串口IP,在zynq中默认是排在前面的,这就直接导致了,采用默认的设备树文件会导致系统默认串口的改变,下需要将system-top.dts的串口顺序换一下,修改后如下所示。 在这里插入图片描述

3、换好后将pl.stdi pcw.dtsi zynq_7000.dtsi system-top.dts文件复制到uboot:arch/arm/dts中,进行编译,首先生成u-boot可执行文件,将u-boot改成boot.elf,然后生成BOOT。

执行下面这条命令编译 u-boot:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

编译完成之后得到 u-boot,将其重命名为 u-boot.elf,执行下面这条命令生成 BOOT.BIN 文件: Navigator_7020.sdk这个位置需要更改 注意下面的工程路径也需要修改:

petalinux-package --boot -p /home/liuyu/petalinux/v2018.3/ALIENTEK-ZYNQ --fsbl /home/liuyu/hdf/TEST_TEST.sdk/fsbl/executable.elf --u-boot ./u-boot.elf -o ./BOOT.BIN --force

4、同样将上面几个文件复制到内核目录:arch/arm/boot/dts中,这里需要进一步修改设备树,加入ZYNQ的一些信息, 此时可以加入内核心跳led,指示系统是否正常运行,在调试过程中尤为重要,具体可以参考正点原子的linux开发教程第XXX页。 修改完设备树后,首先编译内核:这一步骤会生成zimage文件 这里需要注意,在内核中需要打开对应的饿串口端口支持。 在这里插入图片描述 执行下面这条命令编译内核出内核镜像文件 zImage:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j16

编译成功之后,zImage 内核镜像文件所在路径为 arch/arm/boot/zImage。 然后编译设备树: 这一步会生成system-top.dtb文件,并重命名为system.dtb 需要修改设备树。在 arch/arm/boot/dts文件夹下的system-top.dts,这就是最终的设备树,按照自己需要修改。 dts文件如下:

/* * CAUTION: This file is automatically generated by Xilinx. * Version: HSI 2018.3 * Today is: Tue Jun 1 10:09:12 2021 */ #define GPIO_ACTIVE_HIGH 0 #define GPIO_ACTIVE_LOW 1 /dts-v1/; #include "zynq-7000.dtsi" #include "pl.dtsi" #include "pcw.dtsi" #include #include / { model = "Alientek ZYNQ Development Board"; chosen { bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait"; stdout-path = "serial0:115200n8"; }; aliases { ethernet0 = &gem0; ethernet1 = &gem1; i2c0 = &i2c0; i2c1 = &i2c1; serial0 = &uart0; serial1 = &uart1; serial2 = &axi_uartlite_0; spi0 = &qspi; }; memory { device_type = "memory"; reg = ; }; /* user-leds { compatible = "gpio-leds"; led@0 { label = "ps_led0"; gpios = ; linux,default-trigger = "heartbeat"; default-state = "on"; }; }; */ }; &gem0 { local-mac-address = [00 0a 35 00 1e 53]; }; &qspi { #address-cells = ; #size-cells = ; flash0: flash@0 { compatible = "n25q512a","micron,m25p80"; reg = ; #address-cells = ; #size-cells = ; spi-max-frequency = ; partition@0x00000000 { label = "boot"; reg = ; }; partition@0x00500000 { label = "bootenv"; reg = ; }; partition@0x00520000 { label = "kernel"; reg = ; }; partition@0x00fa0000 { label = "spare"; reg = ; }; }; };

然后编译生成设备树文件。。。 这一步会生成system-top.dtb文件,并重命名为system.dtb

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb

5、将上面的四个文件 system.bit BOOT zimage system.dtb 拷入SD卡,然后启动开发板。启动后可以选择是从SD加载根目录还是网络挂载,默认是SD卡。 在这里插入图片描述 步骤具体参考领航者 ZYNQ 之 Linux 开发指南20.7小节, 打开开发板,应该可以正常加载串口了;

在这里插入图片描述

如图就是PL端的串口,这个图片是我后期制作的,并不会当前工程的,但是名字大同小异的,都是ttyUL开头的。

资料



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3