【JokerのZYNQ7020】QSPI启动。

2023-05-16

软件环境:vivado 2017.4        硬件平台:XC7Z020


通常来说,系统做好以后是放SD卡里,上电以后,根据boot引脚的配置,从SD卡引导系统启动。如果你像我一样,板子上还带有QSPI+EMMC,当然也可以选择另外一种启动方式,从QSPI启动,文件系统从EMMC加载,摆脱SD卡束缚,如果工程上用的话,最好也使用这种引导方法,因为可以避免SD卡槽松动或者插拔次数过多引起的接触不良等问题。

既然说到了QSPI+EMMC,那么在配置ZYNQ核的时候,这两项自然要配置好, 下面的SD0和SD1一个是我的SD卡槽,另一个是EMMC,接下来编译,生成bitstream,导入SDK,都是跟以前一样的步骤,但是但是,如果你使用默认的设备树,不做修改的话,系统当然是可以正常启动,但是在烧写到QSPI时候会遇到各种问题,接下来说下我遇到的问题,和怎么解决的这些问题。

当使用默认设备树,启动以后,准备给EMMC进行分区并烧写QSPI,一顿操作以后,但是会看到提示/dev/mtdblock0 is missing!找不到QSPI设备,什么鬼?。

接下来顺着去看下/dev下面确实没有QSPI相关的mtd设备文件,怀疑是不是设备树没有加对。 

看了下生成的设备树顶层system-top.dts,确实只有短短这么几行。

/dts-v1/;
/include/ "zynq-7000.dtsi"
/include/ "pl.dtsi"
/include/ "pcw.dtsi"
/ {
	chosen {
		bootargs = "earlycon";
		stdout-path = "serial0:115200n8";
	};
	aliases {
		ethernet0 = &gem0;
		serial0 = &uart1;
		spi0 = &qspi;
	};
	memory {
		device_type = "memory";
		reg = <0x0 0x40000000>;
	};
};

那肯定是有问题的呀,接着在里面把相关描述加上后如下。

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version:  
 * Today is: Sun Nov  3 03:02:17 2019
 */


/dts-v1/;
/include/ "zynq-7000.dtsi"
/include/ "pl.dtsi"
/include/ "pcw.dtsi"
/ {
	chosen {
		bootargs = "earlycon";
		stdout-path = "serial0:115200n8";
	};
	aliases {
		ethernet0 = &gem0;
		serial0 = &uart1;
		spi0 = &qspi;
		mmc0 = &sdhci0;
		mmc1 = &sdhci1;
	};
	memory {
		device_type = "memory";
		reg = <0x0 0x40000000>;
	};
};

&qspi {
	u-boot,dm-pre-reloc;
	status = "okay";
	is-dual = <0>;
	num-cs = <1>;
	flash@0 {
		compatible = "n25q128a11";
		reg = <0x0>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
		spi-max-frequency = <125000000>;
	};
};

&sdhci0 {
	u-boot,dm-pre-reloc;
	status = "okay";
	xlnx,has-cd = <0x1>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
};

&sdhci1 {
	status = "okay";
	xlnx,has-cd = <0x0>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
};

主要是两个地方,一个是aliases里面,把spi0 = &qspi,mmc0 = &sdhci0和mmc1 = &sdhci1这三句加上,另外就是下面&qspi、&sdhci0和&sdhci1的对应部分加上。系统重新跑起来以后,再去/dev下,已经能看到刚才提示缺少的mtdblock0设备了。

 上面的mmcblk0和mmcblk1就是SD卡和EMMC设备文件了,设备都能看到以后,就能正常的进行格式化、分区、烧写等操作了,一切都进行完毕后,拔出SD卡,调整BOOT引脚的拨码开关状态,上电启动以后,可以看到正常从QSPI引导了。


 本来写到这里就应该是结束了的,但其实不是这样,因为想从QSPI启动板子是几个月前遇到的问题,而上面的一系列操作是今天为了写这篇文章补上的,还有一个问题是我当时解决了,但是今天却各种尝试,没有办法复现的,只说一下现象,和当时的解决办法,可能问题的细节记得不是特别清楚,但是大概的解决方向肯定是没问题的。

在向system-top.dts添加QSPI和EMMC部分后,EMMC的格式化是可以正常进行了,但是改变BOOT引导方式以后,没法正常启动,会提示MMC device1 not found,结果发现,原来UBOOT里还有个devicetree而那个devicetree中,也要进行QSPI和EMMC部分的添加,添加完毕以后生成的工程,才能正常在uboot阶段完毕以后,正确的从EMMC中的程序段引导系统。

uboot中devicetree的路径大概是在/uboot/arch/arm/dts/xxx.dts。


2020-03-03更新    qspi内系统启动说明

上面所有的介绍说的都是从SD卡启动的系统应该如何操作的说明,这里有一点需要注意的,就是从QSPI启动的系统的设备树system-top.dts中,也同样别忘了添加qspi和emmc部分,不然从qspi启动的时候,会卡在uboot结束,进入kernel的地方。

&qspi {
	u-boot,dm-pre-reloc;
	status = "okay";
	is-dual = <0>;
	num-cs = <1>;
	flash@0 {
		compatible = "n25q128a11";
		reg = <0x0>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
		spi-max-frequency = <125000000>;
	};
};

&sdhci0 {
	u-boot,dm-pre-reloc;
	status = "okay";
	xlnx,has-cd = <0x1>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
};

&sdhci1 {
	status = "okay";
	xlnx,has-cd = <0x0>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JokerのZYNQ7020】QSPI启动。 的相关文章

  • (二)为AI和机器学习创建Docker容器

    目录 介绍 基本镜像 创建Dockerfile 构建镜像 运行容器 总结 下载源文件 154 4 KB 介绍 Docker 等容器技术显着简化了软件的依赖管理和可移植性 在本系列文章中 xff0c 我们探讨了 Docker 在机器学习 ML
  • 自定义EF Core迁移历史记录表

    目录 背景 更改表名称和架构 更改列名称 添加具有默认值的列 添加必填列 关于代码示例 引用 下载源代码 13 9 KB 背景 实体框架核心通过在名为 EFMigrationsHistory 和架构 dbo 的表中添加日志来跟踪应用的迁移
  • 使用EF Core 6执行原始SQL查询

    目录 背景 现有选项 ExecuteSqlRaw 插入 更新 删除 FromSqlRaw FromSqlInterpolated 自定义数据库上下文扩展方法 ExecuteScalar ExecuteNonQuery FromSqlQuer
  • 仓库更新了,git pull拉取远端失败

    仓库更新了 span class token punctuation span git pull拉取远端失败 span class token operator span error span class token operator sp
  • xPath 用法总结整理

    最近在研究kafka xff0c 看了一堆理论的东西 xff0c 想动手实践一些东西 xff0c 奈何手上的数据比较少 xff0c 突发奇想就打算写个爬虫去抓一些数据来玩 xff0c 顺便把深入一下爬虫技术 之前写过一些小爬虫 xff0c
  • vi编辑器

    目录 简介 基本操作 1 移动光标 2 定位 3 删除 4 复制 5 查找
  • 使用libevent搭建简单http服务器

    64 使用libevent搭建简单http服务器 一 libevent 的下载 可通过官网直接进行下载libevent库 xff1b 例子使用的是V2 1 1版本 xff0c 下载完成后 xff0c 解压 xff1b 可以再解压目录下获取
  • C++动态链接库中的全局变量面试题

    其实主要问题是三个模块 xff1a 模块 a 静态库 a 模块 b 二进制 b 静态引用a 动态加载c 模块 c 动态链接库c 静态引用a 关键在于静态库a里有一个静态全局变量 xff0c 没错就是我们的日志模块 原先的这个静态的模块中的静
  • Linux 桌面修改文件mime类型图标

    在多数的Linux发行版中 xff0c 默认的桌面的文件类型图标着实不好看 xff0c 比如我常用的Linux之一Debian xff0c 默认文件类型图标就很不好看 如果我们自定义了一种mime类型的话肯定也是没有图标的啦 xff0c 下
  • 比 MyBatis 快了 100 倍

    比 MyBatis 效率快 100 倍的条件检索引擎 xff0c 天生支持联表 xff0c 使一行代码实现复杂列表检索成为可能 xff01 2开源协议 使用Apache 2 0开源协议 3界面展示 你的产品给你画了以上一张图 xff0c 还
  • 【GIT】GIT基础教程(新手必看)

    准备工作 1 首先要下载git xff0c git官网下载比较缓慢 xff0c 这里提供一个淘宝镜像的网站 https npm taobao org mirrors git for windows 里边有各种版本的git xff0c 选择与
  • Python常见内置类属性介绍

    文章目录 64 TOC 文章目录 什么是内置类属性一 dict 的用法二 name 的用法三 file 的用法 什么是内置类属性 当python创建一个类之后 xff0c 系统就自带了一些属性 xff0c 叫内置类属性 这些属性名用双下划线

随机推荐

  • win32应用程序和win32控制台应用程序

    win32应用程序是有窗体的 xff08 当然也可以没有 xff09 xff0c 有Windows消息循环机制的 而win32控制台应用程序只是在控制台下运行的程序 xff0c 类似以前dos的程序 Win32 Application和Wi
  • springBoot 启动指定配置文件环境多种方案

    springBoot 启动指定配置文件环境理论上是有多种方案的 xff0c 一般都是结合我们的实际业务选择不同的方案 xff0c 比如 xff0c 有pom xml文件指定 maven命令行指定 配置文件指定 启动jar包时指定等方案 xf
  • tigervnc黑屏及mate-session缺失

    1 项目信息 host os xff1a Kylin Server V10 arm64 2022 04 29 2 问题描述及原因分析 通过一下命令安装vnc server yum install tigervnc server 然后通过vn
  • (Java)集合工具类:Collections

    文章目录 一 Collections 简介二 Collections 操作实例1 实例操作一 xff1a 返回不可变的集合2 实例操作二 xff1a 为集合增加内容3 实例操作三 xff1a 反转集合中的内容4 实例操作四 xff1a 检索
  • Seata快速开始

    Seata分TC TM和RM三个角色 xff0c TC xff08 Server端 xff09 为单独服务端部署 xff0c TM和RM xff08 Client端 xff09 由业务系统集成 Seata Server 部署 步骤一 xff
  • 点击Anaconda中的Jupyter Notebook无法打开浏览器

    解决方法一 xff1a 通过修改配置文件来指定浏览器打开notebook 步骤 xff1a 打开anaconda promote 输入 xff1a jupyter notebook generate config 输出结果 xff1a Wr
  • 深度学习——入门经典案例《波士顿房价预测》深度解析

    一 深度学习 机器学习算法理论在上个世纪90年代发展成熟 xff0c 在许多领域都取得了成功应用 但平静的日子只延续到2010年左右 xff0c 随着大数据的涌现和计算机算力提升 xff0c 深度学习模型异军突起 xff0c 极大改变了机器
  • freemarker实现word文档模板动态生成

    携手创作 xff0c 共同成长 xff01 这是我参与 掘金日新计划 8 月更文挑战 的第29天 xff0c 点击查看活动详情 1 写在前面 很多时候 xff0c 我们可能需要根据一个word模板 xff0c 动态生成 xff0c 我们所需
  • 生信学习——R语言练习题-初级(附详细答案解读)

    题目目录 1 打开 Rstudio 告诉我它的工作目录 2 新建6个向量 xff0c 基于不同的数据类型 xff08 重点是字符串 xff0c 数值 xff0c 逻辑值 xff09 3 告诉我在你打开的rstudio里面 getwd 代码运
  • 生信学习——GEO数据挖掘

    步骤 STEP1 xff1a 表达矩阵ID转换STEP2 xff1a 差异分析STEP3 xff1a KEGG数据库注释完整代码 写在前面 按照生信技能树的学习路线 xff0c 学完R语言就该学习GEO数据挖掘了 有人说GEO数据挖掘可以快
  • 机器学习——基于python的鸢尾花SVM练习(包含超参数批量筛选、交叉验证)

    目录 1 最普通的SVM2 交叉验证 筛选超参数法一 xff1a cross val score法二 xff1a GridSearchCV xff08 推荐 xff09 3 完整代码 写在前面 虽然本人一直对机器学习感兴趣 xff0c 但是
  • python学习——tsv文件批量转为csv文件、csv文件列合并

    写在前面 近日在处理数据的时候发现有的文件为csv文件 xff0c 有的为tsv文件 xff0c 大概搜了一下了解到 xff1a TSV是用制表符 xff08 t xff09 作为字段值的分隔符 xff1b CSV是用半角逗号 xff08
  • PPI网络的构建与美化(String+Cytoscape)

    目录 写在前面一 使用string分析数据二 使用Cytoscape构建网络1 导入TSV文件2 Analyze Network3 Generate Style4 CytoNCA计算Betweenness 三 美化网络1 根据Between
  • 生信刷题之ROSALIND——Part 2

    目录 1 Counting Point MutationsProblemSample DatasetSample OutputCodeOutput 2 Mendel 39 s First LawProblemSample DatasetSa
  • 生信刷题之ROSALIND——Part 3

    目录 1 Mortal Fibonacci RabbitsProblemSample DatasetSample OutputCodeOutput 2 Overlap GraphsProblemSample DatasetSample Ou
  • 生信刷题之ROSALIND——Part 4 (MPRT, MRNA, ORF)

    目录 写在前面1 Finding a Protein MotifProblemSample DatasetSample OutputCodeOutput 2 Inferring mRNA from ProteinProblemSample
  • Pandas第三次作业20200907

    练习1 读取北向 csv 指定trade date为行索引 查看数据的基本信息 有无缺失值 对其缺失值进行处理 删除缺失值所在行 查看数据的基本信息 查看数据是否清洗完毕 index列没啥用 将index列删除 观察数据是否有重复行 将重复
  • Linux设置开机默认进入命令行或者图形界面

    开机默认进入命令行模式 xff1a sudo systemctl set default multi user target 开机默认进入图形用户界面 xff1a sudo systemctl set default graphical t
  • 美团后端笔试

    文章目录 整场笔试下来 xff0c 整体难度一般 xff0c 只不过在第三题扑克牌游戏的时候进行的不是很顺利 xff0c 附加题难度一般 xff0c 不知道有没有小伙伴和我一样时间耗费在第三题上面的 1 魔法外卖 题目描述 xff1a 炸鸡
  • 【JokerのZYNQ7020】QSPI启动。

    软件环境 xff1a vivado 2017 4 硬件平台 xff1a XC7Z020 通常来说 xff0c 系统做好以后是放SD卡里 xff0c 上电以后 xff0c 根据boot引脚的配置 xff0c 从SD卡引导系统启动 如果你像我一