一、前言
keil下载程序具体过程将由一系列的博客组成,将深入探讨keil这种IDE下载镜像文件时具体做了哪些事情。我们平常下载镜像的时候,只是点击了一下Download按钮,剩下的都由keil替代我们完成了。本系列博客将揭示这一过程,keil到底做了哪些工作,以及牵扯到的具体技术。
二、keil下载程序的配置过程
在我们新建一份工程,写完hello world程序之后,会去配置一下下载器、选择下载接口以及下载算法文件,如下图所示。
按照上述五个步骤配置好下载器之后(博主使用的是jlink、swd接口),就可以点击Dolwnload下载程序了。
下载程序的log如下。
Load "C:\\...\\project\\MDK-ARM\\Objects\\Project.axf"
Set JLink Project File to "C:\...\project\MDK-ARM\JLinkSettings.ini"
* JLink Info: Device "CORTEX-M4" selected.
JLink info:
------------
DLL: V7.22b, compiled Jun 17 2021 17:22:49
Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04
Hardware: V7.00
S/N : 20090937
Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull
* JLink Info: Found SW-DP with ID 0x2BA01477
* JLink Info: DPv0 detected
* JLink Info: Scanning AP map to find all available APs
* JLink Info: AP[1]: Stopped AP scan as end of AP map has been reached
* JLink Info: AP[0]: AHB-AP (IDR: 0x24770011)
* JLink Info: Iterating through AP map to find AHB-AP to use
* JLink Info: AP[0]: Core found
* JLink Info: AP[0]: AHB-AP ROM base: 0xE00FF000
* JLink Info: CPUID register: 0x410FC241. Implementer code: 0x41 (ARM)
* JLink Info: Found Cortex-M4 r0p1, Little endian.
* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots
* JLink Info: CoreSight components:
* JLink Info: ROMTbl[0] @ E00FF000
* JLink Info: ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7
* JLink Info: ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
* JLink Info: ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
* JLink Info: ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
* JLink Info: ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTableAddr = 0xE00FF000
* JLink Info: Reset: Halt core after reset via DEMCR.VC_CORERESET.
* JLink Info: Reset: Reset device via AIRCR.SYSRESETREQ.
Target info:
------------
Device: ARMCM4_FP
VTarget = 3.300V
State of Pins:
TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1
Hardware-Breakpoints: 6
Software-Breakpoints: 8192
Watchpoints: 4
JTAG speed: 4000 kHz
Erase Done.
Programming Done.
Verify OK.
* JLink Info: Reset: Halt core after reset via DEMCR.VC_CORERESET.
* JLink Info: Reset: Reset device via AIRCR.SYSRESETREQ.
Application running ...
Flash Load finished at 17:51:38
之后,boot启动方式设置为从内部flash启动(后面会谈到为什么需要boot启动以及它的工作机制),程序就可以运行了。
三、数据传输链路
这里先整体介绍下程序(hex文件)到flash的数据传输链路,具体的到后面在介绍。
keil(PC)将hex发送到jlink,通过SWD线传到芯片上的SWD接口。在芯片的内部,有AHB、APB(图中未画出)总线矩阵,AHB-DP就是挂载到总线上面。AHB-DP一头通过连接DAP总线连接到SW-DP接口,一边连接AHB总线,内部flash就是挂载到AHB总线上。
在后面章节中会详细的介绍数据的物理层有哪些部分组成以及具体该如何传输镜像文件到内部的flash中。