Xilinx ZYNQ 7000学习笔记三(小结)

news2024/11/26 10:23:15

1 启动模式:

ZYNQ 7000的启动模式由外部引脚决定的,5个模式引脚MIO[6:2]用于配置NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash以及JTAG 一共5种启动模式。具体而言就是复位时,zynq-7000 SOC对下述引脚进行连续3个时钟周期采样。复位采样MIO[6:2]并将采样的模式值保存到系统级控制寄存器SLCR内的BOOT_MODE寄存器内。(我们查看fsbl代码中确认当前的启动模式就是通过读取BOOT_MODE寄存器来确定不同的启动分支的)

2 关于nor flash 32M大小限制的说明:

zynq 7000的flash控制器可以配置为IO模式和线性模式,需要注意的是IO模式下才可以对flash进行读写擦操作。而线性模式下,flash相当于一个只读存储器,不能写和擦除。在IO模式下,软件负责对所有flash操作的管理;在线性模式下,控制器负责对所有必要的读数据管理。换句个人理解,系统默认的是线性模式,但是我们作为flash使用者,如果要擦写flash必须配置为IO模式,由我们自己写的驱动操作实际的flash。
注意:只有在线性模式下才有最大32M地址空间的限制,也就是说zynq 7000最大加载的fabl+bit+应用得到的boot.bin最大不能超过32M,地址映射空间就是32M。
而我们自己如果使用flash,由于使用的IO模式,实际的操作是由我们自己写的驱动管理的,和系统的内存映射没有什么关系,当然不受32M大小的限制。比如控制器可以直接连接一个128M或者两片的 norflash芯片,我们通过驱动操作flash任意地址空间(两片可以通过cs片选区分),毕竟实际操作的flash地址是我们驱动在控制和映射没关系。无非就是系统上电加载时(此时是线性模式,两片到底加载的使用的哪片flash有待研究)只能加载最大32M的底层软件而已。

3 启动流程

上电后在从0地址运行之前,bootRom会从nor flash(假设是nor flash启动模式)拷贝boot.bin的前n kB(小于等于192K)数据拷贝到OCM中,然后跳转到0地址OCM中开始运行。(OCM地址0000_0000 to 0003_FFFF)。随后专门写个分析boot.bin文件的内容,分析下boot.bin的数据格式

4 关于JTAG模式的说明

我们知道,ZYNQ7000支持5种启动设备,包括NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash以及JTAG。我们需要知道在JTAG模式下,JTAG都是无法直接访问CPU的外设的,而是通过CPU让CPU访问外设,那么JTAG怎么知道CPU访问外设的指令呢,这是由SDK告诉的(不同芯片访问CPU的指令不同)。整个示意图如下:
SDK <-> JTAG<-> CPU <->外设

基于上面的理解,我们在回头看我们为什么需要在通过JLINK仿真器烧写boot.bin到flash时需要将FSBL代码中的读取BOOT_MODE_REG寄存器模式后改为JTAG_MODE模式,实际上我们看fsbl代码中的JTAG_MODE分支会发现并没有什么对flash的操作,那么我们烧写的操作是怎么完成的呢,正式jink通过jtag接口通知CPU访问的,并且这个时候我们也没有进行仿真模式,那么JTAG怎么知道具体什么指令呢,正是通读取SDK提供的指令表实现的。
在这里插入图片描述
首先执行FSBl的elf文件执行结束后进入wfe模式,然后由JTAG接管来实现对flash的更新。我们会注意到,实际上代码的作用主要就是实现JTAG模式,让后控制权交给PC机而非CPU。如果我们能更改启动模式引脚的电平,那么实际上FSBL不用更改,只需要pin改为JTAG模式即可,fsbl 文件都不需要

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

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

相关文章

从Overleaf提交到arxiv

1.文件结构注意避坑&#xff01;&#xff01;&#xff01; 前期在overleaf写论文时&#xff0c;为了使文件结构目录清晰&#xff0c;分别建了section, image等子文件夹&#xff0c;即 >project>image-XXx.pdf-xxx.pdf>sections-abstract.tex-method.tex>main.tex…

ProcessWindowFunction 结合自定义触发器的陷阱

背景&#xff1a; flink中常见的需求如下&#xff1a;统计某个页面一天内的点击率,每10秒输出一次&#xff0c;我们如果采用ProcessWindowFunction 结合自定义触发器如何实现呢&#xff1f;如果这样实现问题是什么呢&#xff1f; ProcessWindowFunction 结合自定义触发器实现…

基于YOLOv8模型的安全背心目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的安全背心目标检测系统可用于日常生活中检测与定位安全背心目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训…

Zabbix 利用 Grafana 进行图形展示

安装插件 配置数据源 导入模版 查看 1.安装 wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/Packages/grafana-10.0.0-1.x86_64.rpm [rootrocky8 apps]# yum install grafana-10.0.0-1.x86_64.rpm [rootrocky8 apps]# systemctl start grafana-server.service …

Mac 手动安装 sshpass

1. 下载安装包 https://sourceforge.net/projects/sshpass/ 解压并进入到安装包目录 tar -zxvf sshpass-xx.xx.tar.gz cd sshpass-xx.xx2. 检验环境&#xff0c;编译源码安装 ./configuremake&&make install3. 检测安装是否成功 ▶ sshpass Usage: sshpass [-f|-…

freertos之资源管理

中断屏蔽 屏蔽中断函数 在任务中使用 taskENTER_CRITICA()/taskEXIT_CRITICAL() 在中断中使用 taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR() 功能介绍 使用上述函数&#xff0c;进入临界中断&#xff0c;任务不会切换&#xff0c;且中断优先级处于con…

邮件钓鱼的防守策略

一、攻击背景 在历年的实战攻防演练中&#xff0c;人的漏洞是网络安全最大的脆弱点&#xff0c;而钓鱼攻击就是从内部攻破堡垒至关重要的手段。攻击者通过伪装成可信来源发送虚假邮件&#xff0c;诱导接收者点击恶意链接、提供敏感信息或执行恶意附件&#xff0c;从而获取机密…

python解压gz包

import gzipdef un_gz(file_name):# 获取文件的名称&#xff0c;去掉后缀名f_name file_name.replace(".gz", "")# 开始解压g_file gzip.GzipFile(file_name)#读取解压后的文件&#xff0c;并写入去掉后缀名的同名文件&#xff08;即得到解压后的文件&am…

聊聊操作系统中 进程 and 线程中哪些事??

操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境&#xff0c;操作系统可以分为桌面操作系统&a…

java 身份证号码验证

需要编号文件 编号文件部分内容如下 11:北京市 1101:市辖区 110101:东城区 110102:西城区 110105:朝阳区 110106:丰台区 110107:石景山区 110108:海淀区 ...... 编号文件内容比较多 csdn点击 下载地址 java代码如下 import java.io.*; import java.text.ParseException; im…

Win10怎么设置默认看图软件?Win10设置自带看图软件为默认程序操作方法

大小&#xff1a;4.19 GB类别&#xff1a;雨林木风系统 Win10怎么设置默认看图软件&#xff1f;有用户在使用电脑去浏览图片内容的时候&#xff0c;总是使用第三方的看图软件自动打开&#xff0c;不使用系统自带的看图软件来开启图片。那么怎么设置系统自带的看图软件为默认程序…

【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式&#xff0c;在实际项目中内存管理特别重要 一般在主函数中&#xff08;main&#xff09;使用malloc函数&#xff0c;然后在通过free函数进行释放内存&#xff0c;但有时候如果必须在子函数长调用malloc函数该怎样进行…

[HDCTF 2023]YamiYami

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言涉及知识点解题详细过程session伪造反弹shell 前言 从暑假末尾一直搁置&#xff0c;当时卡在反弹shell搞得离flag就差一步。不过最近一两天学习完反弹shell的知…

面试算法-数据结构二

大厂算法面试 1&#xff09; 图论 2&#xff09; 大数据 3&#xff09;动态规划 优秀的算法往往取决于你采取那种数据结构 高级数据结构 1&#xff09;优先队列 2&#xff09;图 3&#xff09;前缀树 4&#xff09;线段树 5&#xff09;树状数组 在分析问题的时候&a…

OB Cloud 初体验

文章来源&#xff1a;韩锋频道 韩锋 数据库行业资深从业者&#xff0c;著有《SQL 优化最佳实践》、《数据库高效优化》等数据库相关著作。 OceanBase&#xff08;下文简称OB&#xff09; 作为国内一款优秀的分布式数据库&#xff0c;这些年来发展很快&#xff0c;在金融、电商…

UDP协议结构及其注意事项

UDP报文结构 UDP报文结构主要是由两个部分组成的&#xff1a;UDP头部和数据部分。 UDP头部 源端口号&#xff1a;16位字段&#xff0c;指示数据发送方的端口号。目的端口号&#xff1a;16位字段&#xff0c;指示数据接收方端口号。UDP报文长度&#xff1a;16位字段&#xff0…

new HashMap{{put(“a“,“b“)}}

如题&#xff0c;这是什么鬼&#xff1f; Runnable r new Runnable(){Overridepublic void run() {}}; 上面这种写法大家不陌生吧&#xff0c;实际上 就是 定义了一个匿名内部类。 比如&#xff1a;下面这个就是 定义了一个 匿名的Test子类&#xff0c;旁边那个向下的箭头就…

Lua02——应用场景及环境安装

应用场景 是当今游戏领域使用最广泛的脚本语言之一。 搭配 OpenResty 使用&#xff0c;可以扩展Nginx服务器的功能&#xff0c;使用者仅需要编写Lua代码就能轻松完成业务逻辑。 与 Redis 结合。 Adobe Photoshop Lightroom 搭配 Lua 编写插件。 与游戏结合&#xff1a; C/…

DNS域名解析 不同网段的 实验

路漫漫其修远兮&#xff0c;吾将上下而求索 前言 知识应该是 有难宜简&#xff0c;用简单的语言讲清楚&#xff0c;而不是干拧螺丝的事&#xff0c;却说着造火箭的理论。 &#xff08;尤其是大学讲台上的那一部分人&#xff0c;想想人家的学费&#xff0c;你的工资&#xff…

震惊!可视化大屏都卷成这样了!

如果你还认为可视化大屏只是一个屏幕展示几个数据、图表&#xff0c;那就大错特错了。进入2023年&#xff0c;可视化大屏都内卷到可以实时更新、多维动态、模板一键套用了。 奥威BI系统可视化大屏特点&#xff1a; 1、实时更新 所有取数都基于底层数据&#xff0c;当底层数据…