keil下载程序具体过程2:硬件链路

引言

        本篇博客将介绍keil下载程序的过程中,镜像文件将经过哪些硬件,以及简单的介绍他们之间的协议。

一、硬件连接

图1 硬件连接

        将PC、jlink、芯片使用ubs线、swd线连接好之后,在PC上的keil软件中,我们选择对应的仿真器,并选择下载协议。

 图2 选择仿真器

 图3 配置仿真器

        在图2中我们选择jlink下载器,在图3中可以看到,jlink的SN为20090937(图2中1)、下载接口是SW接口(图2中2)、芯片端ID为(图2中3)

        在图2中3的部分,我们可以看到0x2BA01477,这个是芯片内部SWJ-DP的ID,Device Name下的ARM CoreSight SW-DP是我们用的调试组件名字。CoreSight是ARM公司为了应对SOC中复杂的debug和trace而提出的调试架构,其包含多个组件,我们在keil中进行debug的时候,在keil的各个窗口中看到的数据、断点、单步运行等操作都是由这个架构进行支持。

二、DAP

1、SWD协议

        jlink和芯片通过SWD(Serial Wire Debug)接口连接,使用SWD协议。准确的说,SW-DP只支持SW协议,SWJ-DP支持jtag和sw协议,博主用的是sw-dp,所以下文以及后面的文章中如不特殊说明均指的是SW-DP接口。SWD可以通过传输数据包来读写芯片的寄存器。SWD是用于访问ARM调试接口的双线协议。它是ARM调试接口规范(ARM Debug Interface Architecture Specification)的一部分,是JTAG的替代品。SWD的物理层由两条线组成:

SWDIO: 双向数据线

SWCLK: host驱动的时钟线

在图1中我们可以看到,SW-DP通过DAP总线连接AHB-DP。

图4

        这一部分就是SWD接口牵扯到的硬件。 通过连接到SWDIO/SWCLK,可以直接访问串行线调试端口(SW-DP)。SW-DP可以访问一个或多个接入端口(AP),通过AP可以访问系统的其余部分寄存器。 Cortex M系列CPU的一个重要AP是AHB-AP,它是内部AHB总线上的主机。换句话说,AHB-AP可以访问内部核心的内存映射。由于内部闪存、SRAM、调试组件和外围设备都是内存映射,因此AHB-AP可以控制整个设备,包括对其进行编程。整个SWD操作过程是分级进行的,时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先Debugger对SW-DP进行操作,确定AP寄存器的参数,达到对Cortex Memory Map进行操作。

2、AHB-AP

        SW-DP与AHB-AP之间通过DAP总线进行通信,DAP总线上的地址是32位的,其中高8位用于选择访问哪一个设备,由此可见,最多可以在DAP总线上面挂256个设备。在M3处理器的内部,只用掉了一个设备的地址,还剩下的255个都可以用于连接访问端口(AP)到DAP总线上。当数据传到DAP接口后,下一步就连接到了一个称为“AHB-AP”的AP设备上,它相当于一个总线桥,用于把DAP总线的命令转换为AHB总线上的数据传送,再插入到M3内部的总线网络中。这么一来,M3的整个寻址空间就都在覆盖范围之内了,连NVIC中的调试控制寄存器组也包括在内。在CoreSight系列产品中,AP设备可以有好几种类型,包括APB-AP和JTAG-AP。APB-AP顾名思义,是用于产生APB总线数据传送动作的,而JTAG-AP则用于控制传统的、基于JTAG的测试接口。

        AHB-AP位于CM3的存储器系统和调试接口模块(SWJ-DP/SW_DP)之间,充当一个总线桥的角色。对于大多数基本的在调试主机和CM3系统之间的数据传输,只需要使用AHB-AP中的3个寄存器,它们是:控制及状态字(CSW)、传输地址寄存器(TAR)、数据读/写(DRW)。

        CSW寄存器可以控制传送方向(读/写)、传送大小以及传送类型等。TAR寄存器则指令传送地址,而DRW寄存器则容纳了被传送的数据(在访问该寄存器时就启动了传送)。DRW中的数据与总线上实际显示的是一致的,所以对于半字和字节传送,必须由调试硬件把得到的数据适当移位,以对齐到LSB。例如,若欲在地址0x1002上执行一次半字传送,则需要把数据放到DRW的[31:16]上。AHB-AP可以产生非对齐传送,但是它不会根据地址偏移来自动对目标数据做圆圈移位,必须由调试软件堵上这个窟窿:要么手工圆圈移位,要么把未对齐访问分解为若干个对齐的访问。

        在AHB-AP中还有其它的寄存器,它们提供附加的功能。例如,AHB-AP中提供了4个bannked寄存器和地址自动增量的功能,用于加快在小范围连续地址中数据访问的速度。在CSW寄存器中,还有一个名为MasterType的位。通常需要把它置1,以此告知参与AHB-AP数据传送的硬件:该数据传送是调试器发起的。但是,调试器也可以清零此位来伪装成处理器内核。这样,在AHB上接收数据的硬件就会以为是内核发起的数据传送,从而正常地动作。这个功能可以用于测试目的,尤其是对于带有FIFO的外设,用于获知当它被调试器访问时,行为有什么不同。

3、ROM表

        说到这里,有一个问题还没有说明,JLink通过SW线连接SW-DP模块,那有如何得知AHB-AP在哪里呢?这里就引出了ROM表。
        ROM表是M3内核包含的调试系统的一个部分,用于自动检测在某CM3芯片中包含了哪些调试组件。
        CM3拥有一个预定义的存储器映射并且包含了标准的调试组件,但是新的Cortex-M器件可以包含不同的调试组件,并且芯片厂商在实现CM3时也可以对调试组件加以修改。为使调试工具能检测到调试系统中具体包含的组件,就提供了这张ROM表,它记录了NVIC和各个调试功能块的地址。
        ROM表位于0xE00F_F000。通过分析ROM表中的内容,可以计算出系统和调试组件在存储器系统中的位置。在检测到了调试组件后,调试器可以接下来查看它们的ID寄存器,从而判定系统中哪些组件是可用的。
        在CM3的ROM表中,第一条目的内容应当是:NVIC的入口地址相对于ROM表入口地址的偏移量。ROM表首条目的缺省值是0xFFF0F003,其中位段[1:0]的作用比较特殊:它指示本条目对应的设备是存在的,并且在本条目的后面还有后续的条目(也就是说本条目不是最后一个条目)。这样,通过第一个条目,我们就知道系统中有NVIC,并且还有第2个条目,而且还能计算出NVIC的地址为0xE00F_F000+0xFFF0_F000=0xE000_E000。
        缺省的ROM表如图所示。但是因为芯片厂商可以添加、移除以及把某些可选的组件替换成其它的CoreSigth调试组件,这时该芯片的ROM表就会与缺省的有所不同,以反映出相应的变化。

Cortex-M3缺省的ROM表。

        数值的最低两个位用于指示该设备是否存在(bit[1])以及后面还有没有其它的表项(bit[0])。在正常情况下,NVIC, DWT和FPB总是必须存在的,因此最后两位永远是1。然而,TPIU和ETM则可以被裁掉,并且可能被CoreSight家庭中其它的调试组件所取代。
        数值的高位部分用给出对应组件的入口地址相对于ROM表入口地址的偏移量。例如,NVIC入口地址= 0xE00F_F000 + 0xFFF0_F000 = 0xE000_E000(进位位被忽略)
        在开发调试工具时,有必要从ROM表中一一查兑各调试组件,因为难免会有些另类的CM3芯片会自定义调试组件,并且修改ROM表,而通过计算ROM表得到的地址是可以拿去拍板的。

        到这里,可以知道,keil点击Download按钮之后,JLink会通过SW线连接芯片的SW-DP接口,和内部的AHB-AP接口进行通信,AHB-AP和总线进行通信,进而访问整个4G地址空间(芯片的所有地址都可以访问)。

三、flash

        数据传输到AHB总线上之后(AHB总线、APB总线,二者通过总线桥连接),就可以传输到M3内核上整个4G地址空间了,可以访问M3内核上的所有资源,flash就是挂载到AHB总线上。一般储存程序的flash都是挂载到AHB总线上,因为AHB总线比APB总线快很多,低速外设如uart、timer等会挂载到APB上,但镜像文件(前面一直说的都是镜像文件,后面会对这个词进行说明)中包含程序的代码,自然访问速度越快越好,挂载到AHB总线上。flash连接总线以及与M4内核(M3、M4内核差距并不是很大,本文中也不牵扯二者差异的地方,读者可以在本系列文章中认为二者一样)连接图如图所示。

 

         M3内核有3条总线:指令总线(I-BUS)、数据总线(D-BUS)、系统总线(System-BUS)。三条总线都有自己的地址总线、数据总线、控制总线。M3内核是哈弗结构,因此有指令总线和数据总线,二者并行取值。指令总线通过总线矩阵连接的XIP接口,从FLASH中取数据(指令)、数据总线通过XIP从flash取数据和从RAM中读写数据,系统总线访问其他的资源。这里请记者上图中的ROM,后面的文章会介绍它的作用。

        到这里,我们用到的硬件以及其使用的协议都介绍了一下,博主本人为SWD、DAP等协议并没用进行深入的研究,其和本文主旨相关性并不是很强,更多的介绍的是数据的流通过程。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

策略模式实战应用

场景 假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现 代码实现 策略模式的核心思想就是对扩展开放,对修改关闭…

类的派生

目录 1.1 派生方法一(类调用) 1.2 派生方法二(super) python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502 1.1 派生方法一(类调用) 指名道姓访问某一个类的函数:该方式与继承无关 class …

LabVIEW开发图像采集和基于颜色的隔离

LabVIEW开发图像采集和基于颜色的隔离 在当今的工业和工厂中,准确性和精度是决定特定行业生产力的两个重要关键点。为了优化生产力,各行各业正在从手动操作转向自动操作和控制。机器人技术在工业过程中的出现为人类提供了机械辅助。机器视觉在工业机器人…

STM32基于CubeIDE和HAL库 基础入门学习笔记:功能驱动与应用

文章目录: 一:LED与按键驱动程序 main.c 1.闪灯 led.h led.c 2.按键控制LED亮灭 key.h key.c 二:蜂鸣器与继电器驱动程序 main.c 1.蜂鸣器 buzzer.h buzzer.c delay.h delay.c 2.继电器 relay.h relay.c 三&#xff1…

CCLINK IE FIELD BASIC转MODBUS-TCP网关cclink与以太网的区别

协议的不同,数据读取困难,这是很多生产管理系统的难题。但是现在,捷米JM-CCLKIE-TCP通讯网关,让这个问题变得非常简单。这款通讯网关可以将各种MODBUS-TCP设备接入到CCLINK IE FIELD BASIC网络中,连接到MODBUS-TCP总线…

图片懒加载

什么是图片懒加载? 懒加载也叫做延迟加载、按需加载,指的是在长网页中延迟加载图片 数据,是一种较好的网页性能优化的方式。在比较长的网页或应用中, 如果图片很多,所有的图片都被加载出来,而用户只能看到可…

⌈算法进阶⌋图论::并查集——快速理解到熟练运用

目录 一、原理 1. 初始化Init 2. 查询 find 3. 合并 union 二、代码模板 三、练习 1、 990.等式方程的可满足性🟢 2、 1061. 按字典序排列最小的等效字符串🟢 3、721.账户合并 🟡 4、 839.相似字符串组🟡 5、 2812.找出最安全…

中科亿海微RAM使用

引言 FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种可编程逻辑设备,能够根据特定应用的需求进行配置和重新编程。在FPGA中,RAM(Random Access Memory,随机存取存储器&#xff09…

Python测试框架pytest:常用参数、查找子集、参数化、跳过

Pytest是一个基于python的测试框架,用于编写和执行测试代码。pytest主要用于API测试,可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个优点: 简单灵活,容易上手。…

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速 说明 Tensorflow-GPU 已被移除。请安装 tensorflow 。 tensorflow 通过 Nvidia CUDA 支持 GPU 加速操作。 自 2019 年 9月发布 的 TensorFlow2.1 以来,tensorFlow 和 tensorflow-GPU 一直是同…

开发过程中遇到的问题以及解决方法

巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 开发过程中遇到的问题以及解决方法 简单易用的git命令 git命令: 查看有几个分支:git branch -a 切换分支&#…

用chatGPT从左右眼图片生成点云数据

左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…