Chisel(Constructing Hardware In a Scala Embedded Language)是UC Berkeley开发的一种开源硬件构造语言。
站长xddcore有话说:在我大二的时候,因为项目需要,接触了Chisel。在体验过后,我被它深深的吸引了。我幻想着它十年后的样子,充满希望。于是创建了这个博客,让更多人的了解Chisel,学习Chisel。

[Vivado 2020.1]ZYNQ7020折腾之路(四)之荔枝糖Hex固化程序到TF卡/NAND FLASH中

内容纲要
Reading Time: 3 minutes

前言

在前面的章节中,我们编写的程序都是存在片上RAM中的。也就意味着,当开发板掉电后,程序就被抹除了。
在本章节中,将会介绍3种程序固化思路,以及实践荔枝糖Hex能够方便使用的两种思路。
本章所用工程搭建教程:https://blog.csdn.net/qq_36229876/article/details/108237478
经过漫长的折腾,以及请教学长,这个NAND FLASH在硬件级上有问题,所以看到这篇博客的大家,直接跳过NAND FLASH程序固化,直接采用将程序固化在TF卡上,避免浪费时间

程序固化

一般对面FPGA,我们采用的是将程序固化到SPI FLASH种,然后FPGA上电后自动运行SPI FLASH种的程序。(比如我之前用的cyclone iv)
不过 对于ZYNQ来说,我们有了更加多样的程序固化方式:

  1. 将程序固化在SPI FLASH中
  2. 将程序固化在 NAND FLASH中
  3. 将程序固化在TF卡中

对于荔枝糖HEX来说,我们使用2和3两种方式进行程序固化。
首先,我们先从比较简单的将程序固化在TF卡中进行说明。

生成需要固化的.bin文件(PS:由于需要使能不同的管脚,所以即便PL端逻辑相同,但是固化在NAND FLASH中或者TF卡中的.bit文件是不同的,具体见下文)

首先创建一个FSBL文件,通过右侧对这个FSBL工程的介绍,我们提取到大概信息。这个ZYNQ FSBL工程主要是将PL侧的.bits文件和PS侧的.elf文件打包下载到NAND/SPI/NOR FLASH中。当然如果我们使用TF卡的话,就不存在下载的说法了,就直接把.bin文件拖入sd卡根目录就行啦。
在这里插入图片描述
然后我们注意到这里有一行报错

This application requires xilffs library in the Board Support Package. You can go back to the previous pages to select a different platform and domain or create a new one with suitable hardware and software.

在这里插入图片描述如何解决这个报错呢?
这个报错的大概意思是 BSP(Board Support Packet,板级支持包) 里面少了个xilffs library。我们只用
在BSP里面添加上这个包就行了。具体操作见博客:https://blog.csdn.net/qq_36229876/article/details/108238233

然后把需要固化的工程生成.bin文件,点击Create Boot Image
在这里插入图片描述然后准备好三个文件,分别是 ps端.elf,pl端.bit,还有FSBL.elf

在这里插入图片描述
点击Create Image,完成生成
在这里插入图片描述

引导模式选择

将生成的BOOT.bin复制进TF卡
在这里插入图片描述把TF卡插入板子上,程序应该是不会运行的。
因为我们注意到,原理图上,default的boot mode是走NAND FLASH
在这里插入图片描述
要想走TF卡,得把SDIO_SDDET脚拉低
在这里插入图片描述
再次观察原理图,我们发现其实设计了全自动电路
在这里插入图片描述
我们把上述的几个原理图连起来分析后,我们可以发现一个事情,说就是当TF卡插入时,会自动进入从TF卡引导程序。当TF卡拔出时,则进入用NAND FLASH引导程序。下面测试的结果也验证了这个原理。(不得不说,设计得挺不错的)
插上TF卡时
在这里插入图片描述
拔出TF卡时
在这里插入图片描述

固化到NAND FLASH

打开VIDADO 之前的ZYNQ IP Core,为了把程序固化到NAND FLASH中,我们需要把相关引脚给ENABLE了
在这里插入图片描述

然后重新综合工程,得到.bits FOR NAND FLASH。然后按照上文章节生成需要固化的.bin文件进行BOOT.bin文件的生成。
然后
在这里插入图片描述

然后
在这里插入图片描述
还有一个容易出错的地方是,软件自动导入的FSBL文件路径不对,应该设置成工程下面的FSBL文件的fsbl.elf文件(如果DEBUG目录下没有这个文件的话,就Build下FSBL工程)
在这里插入图片描述
出现如下错误:

Problem in running uboot
Flash programming initialization failed.
ERROR: Flash Operation Failed

然后查翻了下,需要将FSBL项目下的main.c里面的BootModeRegister = JTAG_MODE在这里插入图片描述

结果还是不行,一直报那个错误,等明天再试试吧。先去睡觉了QAQ。昨晚和女朋友4点钟才去睡觉,今早八点多就起来了,顶不住了QAQ

昨天捣鼓了半天,发现用NAND FLASH固化程序的比较少,于是去xilinx的官网看了看,官网还是比较好的,有一个关于NAND FLASH的问题集合在里面链接如下(https://www.xilinx.com/support/answers/59311.html)
里面有个问题,大概就是需要根据所使用的NAND FLASH芯片来选择合适的时钟周期
在这里插入图片描述
于是我看了下,我的默认设置(太离谱了叭):
在这里插入图片描述

又看了下,板子上NAND FLASH的数据手册
在这里插入图片描述

发现差异还是挺大的。
需要改一下。
修改后的设置如下:
在这里插入图片描述

然后再重新生成bit文件,重新打包.bin文件
然后又折腾了一个多小时,还是不行。后面问了下学长,这个板子上的NAND FLASH存在硬件级的问题,就直接跳过吧。

将程序固化在TF卡中

通过观察原理图,找到TF卡在MIO对应的管脚
在这里插入图片描述
然后ENABLE这几个管脚
在这里插入图片描述

然后重新生成bit文件,重新打包BOOT.bin文件,再把BOOT.bin放到TF卡根目录,即可。
在这里插入图片描述

最后就收工了

Share

xddcore

xddcore www.github.com/xddcore

You may also like...

发表回复

您的电子邮箱地址不会被公开。