Xilinx ZYNQ 7000学习笔记五(Xilinx SDK 烧写镜像文件)

news2024/11/29 20:31:28

概述

前面几篇讲了ZYNQ7000的启动过程,包括BootRom和FSBL的代码逻辑,其中关于FSBL代码对启动模式为JTAG被动启动没有进行分析,本篇将通过将JTAG的功能和通过Xilinx SDK烧写镜像文件到flash来顺道把FSBL中的JTAG代码部分给讲解下。

1.JTAG

ZYNQ7000系列SOC通过标准的JTAG(IEEE1149.1)调试接口提供调试访问通道。在内部,SOC期间实现了PS端通过DAP(debug access port )控制器实现访问ARM,通过标准的TAP(test access port)控制器访问PL端。ARM DAP作为Arm CoreSight调试架构的一部分,允许用户利用行业标准的第三方调试工具进行调试。

下图展示了JTAG 的系统框图,在BootROM完成后将控制权移交给用户软件(启动FSBL),JTAG链就会自动启用,假设引导过程为非安全模式,这允许从用户软件入口点进行调试。
在这里插入图片描述

1.1 JTAG主要特性:

JTAG的主要特性有:

1) JTAG 1149.1 支持边界扫描

2) JTAG 1149.1 遵从TAP控制器:一个JTAG TAP控制器和一个ARM DAP控制器

3)AMD TAP控制器针对ZYNQ7000系列 唯一的IDCODE

4)支持IEEE1532可编程系统可配置 (in-system-configurable (ISC))设备

包括:
eFuse programming
BBRAM programming
XADC access

5)flash 编程

6)AMD逻辑分析仪调试支持

7)使用ARM DAP控制器访问Arm 片上调试和跟踪(CoreSight) 架构

8)通过DAP-AP端口间接访问PS地址空间

9)使用PS中的MIO或PL中的EMIO进行外部跟踪捕获

我们在这里知道通过JTAG可以直接操作flash和内存即可。
备注:eFUSE的全名是"Electrically Programmable Read-Only Memory Fuse",它是一种电可编程只读存储器。eFUSE是一种用于存储固定信息的存储器,它的主要特点是一旦编程后就无法再进行擦除或修改,类似于传统的只读存储器(ROM)的功能。eFUSE(熔断保护)通常是硬件特性,而不是预置的软件特性,eFUSE是一种一次性可编程的硬件存储器,用于存储固定的数据或配置信息,例如设备序列号、密钥、硬件配置等。

2.FSBL 代码JTAG模式

2.1 借助JTAG可以直接访问内存地址的功能,仿真器可以直接跳过BootRom对内存直接进行Program来加载ps7_init.tcl或应用至OCM或者DDR。

我们在使用仿真器进行debug时,ps7_init.tcl执行FSBL的等效代码,并走的JTAG分支,而这个分支最终状态只是让处理器进入WFE模式(参见2.2),并在应用程序elf加载到DDR中运行。JTAG模式下,处理器是处于挂起状态,而控制权是由JTAG控制(这也是为什么JTAG叫从模式的原因,因为处理器没有控制权)。红字部分也进行了说明。
在这里插入图片描述

2.2 FSBL JTAG模式分支代码

对应的JTAG模式分支,我们看FSBL的代码会发现JTAG模式的代码没有什么内容,就是调用汇编FsblHandoffJtagExit接口使能cache和mmu就进入WFE休眠了,而这正式释放处理器控制权的操作,以方便仿真器JTAG控制。

	/*
	 * JTAG  BOOT MODE
	 */
	if (BootModeRegister == JTAG_MODE) {
		fsbl_printf(DEBUG_GENERAL,"Boot mode is JTAG\r\n");

		RegVal = Xil_In32(XPS_DEV_CFG_APB_BASEADDR + XDCFG_INT_STS_OFFSET);
		/** If bitstream was loaded in jtag boot mode prior to running FSBL */
		if(RegVal & XDCFG_IXR_PCFG_DONE_MASK)
		{
#ifdef PS7_POST_CONFIG
		ps7_post_config();
		/*
		 * Unlock SLCR for SLCR register write
		 */
		SlcrUnlock();
#endif
		}
		/*
		 * Stop the Watchdog before JTAG handoff
		 */
#ifdef	XPAR_XWDTPS_0_BASEADDR
		XWdtPs_Stop(&Watchdog);
#endif
		/*
		 * Clear our mark in reboot status register
		 */
		ClearFSBLIn();

		/*
		 * SLCR lock
		 */
		SlcrLock();

		FsblHandoffJtagExit();
	}
FsblHandoffJtagExit:
		mcr	 15,0,r0,cr7,cr5,0		/* Invalidate Instruction cache */
		mcr	 15,0,r0,cr7,cr5,6		/* Invalidate branch predictor array */

		dsb
		isb					/* make sure it completes */

	ldr	r4, =0
		mcr	 15,0,r4,cr1,cr0,0		/* disable the ICache and MMU */

		isb					/* make sure it completes */
Loop:
	wfe
	b Loop

2.2 使用SDK烧写镜像文件

当我们通过SDK烧写镜像文件到flash,如果外部启动模式引脚可以进行配置,那么我们可以通过配置外部启动引脚电平然后执行上电复位(POR)实现采集启动模式保存到启动模式寄存器进入FSBL的JTAG分支;另外如果外部启动模式引脚不方便配置,我们也可以直接更改FSBL代码添加BootModeRegister = JTAG_MODE代码时,BootRom会在启动FSBL后走JTAG分支,并通过SDK选择该FSBL代码生成的elf实现代码下载,而直接用FSBL代码下载镜像到flash会失败。
在这里插入图片描述我们现在想想这是什么原因,这是因为如果FSBL不运行JTAG分支,那么JTAG直接加载FSBL代码到OCM会执行nor flash分支,而该分支中运行的操作是将flash中的bit文件(暂存)和应用程序搬移到DDR中,与我们要进行的将镜像Boot.bin 烧写到 flash冲突,导致下载失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1008016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+jxls复杂excel模板导出

JXLS 是基于 Jakarta POI API 的 Excel 报表生成工具,可以生成精美的 Excel 格式报表。它采用标签的方式,类似 JSP 标签,写一个 Excel 模板,然后生成报表,非常灵活,简单! Java 有一些用于创建 …

为什么不推荐使用Lombok?@Data不香吗?

目录 一、前言 二、源码跟踪 三、总结 一、前言 之前写项目遇到的一个Bug,下面是模拟代码。 新建一个springboot的项目,Person一个实体类,定义一个方法传一个JSON数据 Data public class Person {private String name;private String a…

el-table表格动态设置最大高度 高度根据窗口可视高度大小改变自适应

由于表格内容过多,如果不给高度限制,每页100条数据的情况下,去操作底部的分页或者其他功能都需要划到数据最底部操作,用户体验性较差。解决方法是让表格一屏展示,超出部分滚动展示。 1.效果及思路图: 思路是…

【uniapp】小程序开发,初始化项目vscode

使用uniapp开发小程序可以实现一份代码打包成多个不同平台的小程序。 这里使用uniapp官方的项目模板作为示例,采用vue3ts开发,并使用vscode作为开发工具 一、通过命令行创建项目并运行 1、通过以下命令创建模板项目 参考 官方说明 npx degit dcloudi…

Trinitycore学习之windows上用cmake生成vs项目并尝试在windows上启动服务

0:参考 https://trinitycore.info/en/install/requirements/windows 参考该文章安装相关的工具,主要有boost,openssl,cmake,mysql,vs2022自己电脑已经安装。 1:安装mysql 用zip进行安装的方式&#xff…

又一款国产 Web 防火墙工具,开源了?

众所周知,Web 网站是当今互联网上最主流的业务形态,随着开源 Web 框架和各种建站工具的兴起,搭建网站已经是一件成本非常低的事情,但是网站的安全性很少有人关注,WAF 这个品类也鲜为人知。 WAF 是什么 WAF 是网站的防…

多合一小程序商城系统源码完整版 源码开源 支持多行业多门店

分享一个多合一小程序商城系统源码完整版,源码开源,支持多端和多行业适用,将多个小程序商城的功能整合到一个系统中,商家只需通过一个系统就能管理多个小程序商城,一个后台控制7端,支持微信小程序支付宝小程…

Transformers-Bert家族系列算法汇总

🤗 Transformers 提供 API 和工具,可轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本、碳足迹,并节省从头开始训练模型所需的时间和资源。这些模型支持不同形式的常见任务,例如: 📝 自…

智慧城市道路通行时间预测(笔记未完成版)

数据与任务目标分析 数据 道路通行时间 当前道路在该时间段内有车通行的时间 道路长宽情况 道路连接情况 任务 基于历史数据预测某个时间段内,如预测未来一个月travel_time, 每2分钟内通行时间。 构建时间序列,基于时间序列预测 预测高峰点&…

简单介绍Rope Crystal(类似Roop)项目

文章目录 (一)关于 Rope Crystal(二)安装 Rope Crystal(三)运行 Rope Crystal(3.1)选择目录(3.2)加载目录(3.3)选择并替换&#xff08…

MySQL安装validate_password_policy插件

功能介绍 validate_password_policy 是插件用于验证密码强度的策略。该参数可以设定三种级别:0代表低,1代表中,2代表高。 validate_password_policy 主要影响密码的强度检查级别: 0/LOW:只检查密码长度。 1/MEDIUM&am…

行业追踪,2023-09-13

自动复盘 2023-09-13 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

2023下半年创业风口项目:实景自动无人直播!揭秘3大好处!

实景自动无人直播就是2023下半年的创业风口项目,你踩中过风口吗?如果你还没有踩中过风口啊,就缺这么一个机会,那你要注意把握机遇了,建议你看完这篇文章。 为什么说实景自动无人直播将是2023下半年的创业风口项目呢&am…

golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?

问题 for循环select时,如果通道已经关闭会怎么样?如果select中的case只有一个,又会怎么样? 怎么答 for循环select时,如果其中一个case通道已经关闭,则每次都会执行到这个case。如果select里边只有一个ca…

【2023年Google 开发者大会】武侠风格讲述Gloud

文章目录 Google Cloud 如何加速创新,加强信息安全Google Cloud 如何加强信息安全?1.高级安全防护2.强大的身份验证和访问控制3.基于机器学习的威胁检测 Google Cloud 的 3 个 AI 重点发展领域,了解生成式 AI 功能如何助推创意落地Vertex AIV…

Leetcode刷题_贪心相关_c++版

(1)455分发饼干–简单 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b…

Web之tomcat

[TOC](文章目录) 1.程序架构 1.C/S(client/server) 比如:QQ、 微信、 LOL 优点:有一部分代码写在客户端, 用户体验比较好。 缺点: 服务器更新,客户端也要随着更新。 占用资源大。 2. B/S(brows…

【盘点】设计师更偏爱Telerik Kendo UI界面库的4个理由!

就像许多开发人员(错误地)认为设计软件和工具对他们没有任何用处一样,许多设计人员也错误地认为,当涉及到以开发人员为中心的软件和工具时,对他们没有任何价值。事实上,如果双方都愿意走出自己的舒适区去探索,他们都会…

在微信小程序上怎么实现多门店管理功能

微信小程序已经成为连接线上与线下的重要工具,尤其对于拥有多家门店的企业来说,通过微信小程序可以实现多门店管理,提高管理效率和用户体验。下面,我将为大家详细介绍如何在微信小程序上实现多门店管理功能。 一、确定多门店管理功…

打印日志遇到的问题,logback与zookeeper冲突

在做项目时需要打印日志引入了logback打印日志,但是一直无法打印,于是一路查找原因。发现zookeeper中默认带的有个logback和我自己引入的logback版本冲突了,这样直接使用exclusions标签将zookeeper中自带的日志框架全部排除即可 按理说到这一…