Zynq 7000 系列之启动模式—JTAG启动

news2024/11/15 11:15:31

JTAG Boot(JTAG启动)是一种使用JTAG接口来启动设备的方法。JTAG(Joint Test Action Group)是一种国际标准测试协议,最初用于对芯片进行测试,现在已广泛应用于各种设备的调试和启动过程。在JTAG Boot过程中,设备通过JTAG接口接收启动指令和配置数据。这些数据通常包括设备的配置信息、引导加载程序(Bootloader)等。一旦设备接收到这些数据,它就会根据这些信息来初始化硬件、加载操作系统或执行其他必要的启动步骤。

在Zynq设备中,存在两个JTAG控制器:TAP(测试访问端口)控制器和DAP(调试访问端口)控制器。TAP控制器可以控制PL配置过程以及PL中的其他功能。而DAP控制器位于应用处理单元(APU)中。

要访问这些JTAG控制器,有两种链接模式:级联模式和独立模式,如图6-6所示。
在这里插入图片描述

1 JTAG的启用/禁用控制

JTAG的启用/禁用控制涉及到几个关键的机制,这些机制主要控制DAP和TAP控制器。

级联与独立模式
级联模式允许多个JTAG设备通过JTAG接口串联在一起,形成一个JTAG链,从而可以单独测试各个设备。而独立模式则允许设备独立工作,不与其他JTAG设备形成链。

启用/禁用DAP和TAP控制器
可以根据需要启用或禁用DAP和TAP控制器。禁用这些控制器可以防止通过JTAG接口对设备进行调试或访问。

永久禁用JTAG
某些设备提供了永久禁用JTAG的功能,通常通过烧写特定的电子保险丝(eFuse)位来实现。一旦JTAG被永久禁用,将无法通过JTAG接口进行任何调试或访问操作,这有助于保护设备的安全性。

当JTAG处于默认的级联链模式时,可以通过devcfg.CTRL[JTAG_CHAIN_DIS]位来启用或禁用PL(可编程逻辑)JTAG引脚连接。当JTAG_CHAIN_DIS位被设置为1时,PL JTAG引脚信号将无法到达DAP控制器,因此无法通过级联链通过PL JTAG引脚向DAP和TAP控制器发送有意的JTAG指令。

JTAG_CHAIN_DIS并不会阻止PL JTAG的TCK和TMS引脚信号到达PL TAP控制器。因此,如果TCK和TMS被切换,TAP控制器的状态可能会发生变化。

DAP控制器通过设置devcfg.CTRL[DAP_EN]位为111来启用。任何其他值都会导致DAP控制器被绕过。通过设置devcfg.LOCK[DBG_LOCK]位为1,可以锁定这个位。一旦锁定,只能通过POR(上电复位)来解锁。
在这里插入图片描述
DAP和TAP控制器可以通过烧写JTAG链禁用eFuse来永久禁用。一旦eFuse被烧写,这些控制器将永远无法再被访问。软件可以通过devcfg.STATUS[EFUSE_JTAG_DIS]位来读取eFuse的状态。

如果软件试图在没有正确密钥的情况下解锁DevC模块中的APB寄存器空间,那么这将导致DAP控制器被禁用,直到下一次POR(上电复位)发生。这个状态可以通过读取devcfg.STATUS[ILLEGAL_APB_ACCESS]位来检测。

当选择JTAG Boot模式时,BootROM将禁用对所有与安全相关的项的访问,启用JTAG端口,并通过执行WFE指令使CPU进入等待状态。在唤醒CPU并继续启动过程之前,用户有责任通过DAP控制器将启动映像下载到OCM或DDR内存中。

总的来说,JTAG Boot模式提供了一种通过JTAG接口加载启动映像的方式,但在此过程中,BootROM会禁用对安全相关项的访问,并确保CPU在启动映像下载完成之前保持等待状态。用户需要确保在唤醒CPU之前,通过DAP控制器正确地将启动映像加载到内存中。

2 JTAG Boot的示例流程

JTAG Boot模式始终是非安全的;AES单元被禁用,并且不支持加密的映像。JTAG启动和PS/PL配置流程如图6-6所示。具体序列如下:

①PS和PL上电;PS_CLK稳定。
②PS_POR_B复位解除。
③BootROM开始执行并确定启动模式。
④如果启用,BootROM执行CRC自检。
⑤BootROM在MIO上编程VMODE。
⑥BootROM禁用所有安全功能并启用DAP控制器。
⑦BootROM启用JTAG路径:
a. Cascade(级联):JTAG链设置为级联模式;可以使用PL JTAG接口访问DAP和TAP控制器。
b. Independent(独立):JTAG链设置为独立模式;TAP控制器可以通过PL JTAG接口访问,而DAP控制器则通过EMIO ⑧JTAG访问。BootROM会等待最多90秒,以便使用TAP控制器为EMIO JTAG连接编程PL。
⑧BootROM关闭并让CPU运行等待事件(WFE)指令:
a. Cascade:BootROM关闭并将系统控制权释放给TAP和DAP控制器的JTAG接口。
b. Independent:BootROM等待PL初始化完成后关闭。DAP控制器的EMIO JTAG接口必须通过PL使用比特流进行路由才能正常工作。
⑨用户可以访问DAP控制器进行PS系统调试:
a. Cascade:PL JTAG接口链上的第一个设备。
b. Independent:EMIO JTAG接口链上的单个设备。
⑩用户可以访问TAP控制器以配置PL:
a. Cascade:PL JTAG接口链上的第二个设备。
b. Independent:PL JTAG接口链上的单个设备。

在使用L2缓存时,为确保系统的高可靠性,应根据AR# 54190的说明将slcr.L2C_RAM寄存器设置为0x0002_0202的值。

3 级联JTAG链模式

在级联模式下,可以使用PL JTAG接口引脚同时访问两个控制器;来自接口的TDI信号会进入DAP控制器。DAP控制器的TDO信号会被连接到TAP控制器的输入端,形成菊花链结构。然后,TAP控制器的TDO信号会输出到JTAG接口。在JTAG链中,DAP寄存器和数据是最后被移入的。

• 首先访问DAP控制器,然后访问TAP控制器。
• 不需要PL配置。
• 两个控制器都必须启用。
• 指令和数据不能对未指定的目标产生不良影响。

使用级联JTAG链模式时,需要确保正确连接JTAG接口引脚,并遵循相关的JTAG协议和规范,以确保正确访问和配置控制器。此外,为了避免潜在的冲突或干扰,还应确保指令和数据不会对非目标设备造成影响。

4 独立JTAG链模式

独立JTAG链模式将TAP控制器连接到PL JTAG接口,并为用户提供时间,以便使用TAP控制器通过位流配置PL,如图6-6所示。BootROM会等待最多90秒,等待PL配置完成,然后启用DAP控制器并继续启动过程。如果PL未能在规定时间内完成配置,则系统会锁定。

TAP控制器通过PL JTAG引脚进行访问,用于配置PL。在PL通过位流配置完成后,DAP控制器变得可访问。

在独立模式下,TAP控制器的行为类似于AMD 7系列FPGA中的TAP控制器。

5 独立模式下的EMIO PJTAG和MIO PJTAG接口

在独立模式下,EMIO PJTAG接口和MIO PJTAG接口为开发者提供了与DAP控制器交互的途径。

对于EMIO PJTAG接口,PL需要通过加载位流来配置,以启用EMIO PJTAG接口与DAP控制器的连接。在启动后,可以断言PROGRAM_B信号,并在DONE信号被断言后将位流加载到PL中。这样做是为了在独立JTAG模式下启用EMIO PJTAG接口来控制DAP控制器。需要注意的是,这一功能仅在生产硅片时受支持,并且系统需要以独立JTAG启动模式启动。BootROM会等待PL完成自我初始化,然后启用PS-PL电平移位器,启用PL JTAG接口,并在CPU上发出WFE指令。

对于MIO PJTAG接口,DAP控制器也可以与之交互,但这需要FSBL/用户代码使用slcr.MIO_PIN_xx寄存器对MIO多路复用器进行编程。MIO PJTAG接口可以路由到四组MIO引脚中的一组。使用MIO PJTAG接口和DAP控制器时,不需要PL电源。

TAP控制器本身无法直接编程MIO多路复用器。因此,必须从包含FSBL/用户代码的闪存设备启动,该代码负责为MIO PJTAG接口配置MIO多路复用器。一旦MIO多路复用器被编程,就可以使用MIO PJTAG接口访问DAP控制器了。

6 JTAG启动模式下,MIO的引脚状态

在JTAG启动模式下,MIO寄存器的值如Table 6-18所示。这些值对级联(Cascade)和独立(Independent)JTAG启动模式都是有效的。
在这里插入图片描述

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

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

相关文章

是机遇?是未来?拥抱 AI Agent ,拥抱 AI 2.0时代~

✍️ 作者:哈哥撩编程(视频号同名) 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅 程序员:职场关键角色通识宝…

社交媒体数据恢复:飞机 X

飞机 X数据恢复方法 在本文中,我们将探讨如何在不使用特定数据恢复软件的情况下尝试恢复飞机 X聊天记录和文件。请注意,这些方法并不保证100%的成功率,但它们可以在一定程度上帮助您恢复丢失的数据。 1. 检查最近的备份 如果您启用了飞机 …

【17-模型选择与调优:交叉验证和网格搜索在Scikit-learn中的实践】

文章目录 前言交叉验证:保证模型的稳健性理论基础Scikit-learn中的实现网格搜索:寻找最佳参数理论基础Scikit-learn中的实现应用示例结论前言 模型选择和调优是机器学习项目成功的关键步骤。在Scikit-learn中,交叉验证和网格搜索是两个强大的工具,用于选择最佳模型和调整参…

Qt Creator导入第三方so库和jar包——Qt For Android

前言 之前了解了在Android Studio下导入so库和jar包,现在实现如何在Qt上导入so库和jar包。 实现 下面是我安卓开发(需调用安卓接口的代码)的目录(图1),此目录结构和原生态环境(Android Studi…

如何反向查看某个命令所属的rpm包的2个方法?(rpm -qf `which xxx`和yum provides和 rpm -ql xxx.rpm)

文章目录 快速回忆方法1: rpm -qf方法2:yum provides 其他rpm如何查看某个rpm包里面包含哪些命令: rpm -ql主推方法1: rpm -ql方法2:yum info 其他查看rdma-core中包含哪些cmd:一些其他命令所在包探索 快速回忆 rpm -…

使用Gitbook生成电子书

背景 《Google工程实践文档》相对原文Google’s Engineering Practices documentation ,部分内容过时了。需要更新中文版,并使用Gitbook把Markdown文件转换成对应的PDF电子书。   上一次生成PDF电子书是5年前,当时生成电子书的环境早已不在…

在做题中学习(48):朴素的二分查找

. - 力扣(LeetCode) 解法一: 暴力求解 for循环中,从nums[0]枚举到nums[n-1],依次判断,返回 target的值。 时间复杂度 : O(N) :因为要遍历一遍数组 解法二:二分查找 因为此数组为有序的…

【QT学习】14.线程学习

一。线程了解 线程是计算机科学中的一个重要概念,它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流,一个进程可以包含多个线程。与进程相比,线程更轻量级,可以更高效地利用计算机资源。 线程有以下几个特点&…

小酒馆点餐系统实现-C++项目详细过程

目录 项目介绍1、项目描述2、市场调研3、技术调研 项目设计1、概要设计2、详细设计① 数据管理模块:② 业务控制模块:③ 前端界面模块: 3、代码实现实现数据管理模块实现业务控制模块实现前端界面模块 项目介绍 1、项目描述 使用户可以通过…

外包干了3天,技术就明显退步了。。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

UE5 蓝图入门

基础节点创建: 常量: 按住 1 ,点击鼠标左键,创建常量 二维向量: 按住 2 ,点击鼠标左键,创建二维向量 三维向量: 按住 3 ,点击鼠标左键 按 c 键打出一个注释框 参考视…

[数据结构]———交换排序

目录 ​编辑 ​编辑 1.交换排序 第一个定义了一个名为Swap的函数 第二个三数取中 2.冒泡排序 代码解析 冒泡排序的特性总结: 3.快速排序 1. hoare版本 2. 挖坑法 代码解析 3. 前后指针版本 代码解析 1.交换排序 基本思想:所谓交换&#xff0…

maven插件:dockerfile-maven-plugin和docker-maven-plugin

Maven插件dockerfile-maven-plugin和docker-maven-plugin都是为Java开发人员提供了一种便捷的方式,通过Maven构建流程来自动化创建、管理和推送Docker镜像。虽然它们有着相似的目标,即集成Docker与Maven项目,但这两个插件在实现细节、功能侧重…

windows驱动开发-WDF对象

WDF封装了大量的WDF对象,不过,和应用层不一样,不用去尝试从WDF框架对象类上派生和改写原有的WDF类,本意WDF就是希望我们使用这些对象和类,而不是创造新的奇怪的类。 每个WDF对象都代表着对一项驱动需要使用的子功能的…

骑缝电子章怎么盖?

盖骑缝电子章通常涉及几个基本步骤,这里提供一个通用的流程,适用于大多数电子文档处理软件,尤其是那些支持电子签名和印章功能的软件,比如Adobe Acrobat Pro DC、e-章宝(易友EU3000智能盖章软件)等。请注意,具体操作可…

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…

C语言 | Leetcode C语言题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; int uniquePaths(int m, int n) {long long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return ans; }

【linuxC语言】exec函数族

文章目录 前言一、exec函数族二、示例代码2.1 代码12.2 代码22.3 代码3 总结 前言 在Linux环境下&#xff0c;C语言提供了一组强大的函数族&#xff0c;即exec函数族&#xff0c;用于执行其他程序。这些函数允许程序在运行时加载并执行不同的程序&#xff0c;从而实现了程序之…

spring boot 自定义starter示例

springboot 约定规范 Starter项目的命名规范 建议自定义的starter 以 xxx-spring-boot-starter 命名&#xff0c;官方的Starter一般都是以spring-boot-starter-为前缀。这样做的目的是为了避免与官方或其他第三方提供的Starter产生冲突或混淆。 Starter项目的结构规范(重要) …

详解SDRAM基本原理以及FPGA实现读写控制

文章目录 一、SDRAM简介二、SDRAM存取结构以及原理2.1 BANK以及存储单元结构2.2 功能框图2.3 SDRAM速度等级以及容量计算 三、SDRAM操作命令3.1 禁止命令&#xff1a; 4b1xxx3.2 空操作命令&#xff1a;4b01113.3 激活命令&#xff1a;4b00113.4 读命令&#xff1a;4b01013.5 写…