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

这篇具有很好参考价值的文章主要介绍了keil下载程序具体过程2:硬件链路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

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

一、硬件连接

keil下载程序具体过程2:硬件链路,ARM体系,嵌入式硬件,单片机,stm32,mcu,arm开发

图1 硬件连接

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

keil下载程序具体过程2:硬件链路,ARM体系,嵌入式硬件,单片机,stm32,mcu,arm开发

 图2 选择仿真器

keil下载程序具体过程2:硬件链路,ARM体系,嵌入式硬件,单片机,stm32,mcu,arm开发

 图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。

keil下载程序具体过程2:硬件链路,ARM体系,嵌入式硬件,单片机,stm32,mcu,arm开发

图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表就会与缺省的有所不同,以反映出相应的变化。

keil下载程序具体过程2:硬件链路,ARM体系,嵌入式硬件,单片机,stm32,mcu,arm开发

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内核差距并不是很大,本文中也不牵扯二者差异的地方,读者可以在本系列文章中认为二者一样)连接图如图所示。

 keil下载程序具体过程2:硬件链路,ARM体系,嵌入式硬件,单片机,stm32,mcu,arm开发

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

        到这里,我们用到的硬件以及其使用的协议都介绍了一下,博主本人为SWD、DAP等协议并没用进行深入的研究,其和本文主旨相关性并不是很强,更多的介绍的是数据的流通过程。文章来源地址https://www.toymoban.com/news/detail-643206.html

到了这里,关于keil下载程序具体过程2:硬件链路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 成功解决keil识别不到单片机芯片,下载不了程序

    我的芯片是STM32F429,正点原子的阿波罗。 今天使用开发板做实验,突然找不到芯片了, 以前下载的PWM波也运行不了 。查找了好久,原来是芯片锁了,终于解决了。 我是第二种办法实现给芯片解锁的,第一种是我猜测的。 解决办法: 第一种: 先给驱动板上电,boot0接到3.3

    2024年02月15日
    浏览(36)
  • STM32烧写程序:Keil5使用ST-link下载程序

    首先需要连接ST-link到电路板: STM32烧写程序:ST-link V2调试下载器实物和连接方式 然后安装ST-link驱动: STM32程序烧写:ST-link驱动下载和安装 编译一个无错误的工程 点击工具栏的魔法锤 点击Debug,选择ST-Link Debugger 然后点击Settings ST-LINK/V2适配器,SW模式,看芯片是否被识别

    2023年04月08日
    浏览(97)
  • KEIL_MDK下载程序到MSP432卡慢问题解决

    所用单片机型号:MSP432P401r 我们在用KEIL_MDK编程后对MSP432下载时, 总是很卡慢 , 有时还可能会造成计算机卡死,这 是因为板载驱动未更新 此时我们就需要下载TI公司官方的 CCS编程软件 ,来对其进行 固件更新 即可, 更新的是板子,不是计算机,所以更新一下板子的固件后

    2024年02月16日
    浏览(51)
  • keil下载程序后,单片机不自动运行, 需要断电重启的解决方法

    如题,在很多时候,我们KEIL下进行程序开发,编绎完成后会下载到单片机中执行程序,看看运行结果。有时候却发现程序下载后单片机不自动运行,需要断电重启才会运行的问题。 经过从网络上多方查找,最后找到解决方案。原因如下: 首先:我们看一下程序下载的配置,

    2024年02月14日
    浏览(68)
  • 基于MDK-Keil环境如何把STM32程序直接下载到SRAM运行

    对于 Cortex-M 内核的微控制器,它们都可以支持在 RAM 中执行程序,有些非 ARM 的微控制器是不支持的。 在内部 SRAM 执行程序,有基于以下几方面的原因: 1、所使用的设备可能具有OTP(One-time Programmable,一次性可编程)ROM区域,还没有确定最终代码之前,还不会把程序编程到

    2024年02月07日
    浏览(41)
  • 深入分析arm的程序启动过程内存分配和加载区域运行区域的关系

    STM32的启动过程一 启动代码 启动代码由MCU研发商提供。 MCU一上电,首先执行的是启动代码,她是一个汇编代码。 以stm32f1为例: 首先定义堆栈,然后定义中断向量表,然后执行复位中断服务函数Reset_Handler ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT Syste

    2024年02月19日
    浏览(45)
  • 书生·浦语大模型全链路开源体系-第2课

    为了推动大模型在更多行业落地应用,让开发人员更高效地学习大模型的开发与应用,上海人工智能实验室重磅推出书生·浦语大模型实战营,为开发人员提供大模型学习和开发实践的平台。 本文是书生·浦语大模型全链路开源体系-第2课的课程实战。 InternLM项目地址 https:/

    2024年04月13日
    浏览(49)
  • 书生·浦语大模型全链路开源体系-第6课

    为了推动大模型在更多行业落地应用,让开发人员更高效地学习大模型的开发与应用,上海人工智能实验室重磅推出书生·浦语大模型实战营,为开发人员提供大模型学习和开发实践的平台。 本文是书生·浦语大模型全链路开源体系-第6课的课程实战。 InternLM项目地址 https:/

    2024年04月22日
    浏览(42)
  • FX PLC手机版程序设计仿真软件(支持软件及硬件下载在线仿真)

    简介: PLC程序设计是一款安卓/鸿蒙手机PLC梯形图编程仿真器,软件支持三菱FX PLC编程指令,支持软件及硬件(通过蓝牙现国产高FX PLC工控板及部份三菱FX PLC)程序下载及在线调试仿真,软件自带3D动画实例仿真,适合电工及自动化爱好者学习PLC编程技术。也适合电气工程人员开

    2024年04月10日
    浏览(51)
  • 【第1节】书生·浦语大模型全链路开源开放体系

    书生·浦语 InternLM介绍 InternLM 是在过万亿 token 数据上训练的多语千亿参数基座模型。通过多阶段的渐进式训练,InternLM 基座模型具有较高的知识水平,在中英文阅读理解、推理任务等需要较强思维能力的场景下性能优秀,在多种面向人类设计的综合性考试中表现突出。在此基

    2024年04月22日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包