MCU 所有的下载方式

我们常见的MCU / CPU 代码烧录方式主要有以下三种:ICP(In Circuit Programing):在电路编程,可通过CPU的Debug Access Port 烧录代码比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);
ISP(In System Programing):在系统编程,可借助MCU厂商预置的Bootloader 实现通过板载UART或USB接口烧录代码,比如STM32存储映射Code分区中的System memory可以预置厂商的Bootloader,让MCU支持通过UART下载(不限于UART,具体由厂商预置Bootloader实现而定);
IAP(In Applicating Programing):在应用编程,由开发者实现Bootloader功能,比如STM32存储映射Code分区中的Flash本是存储用户应用程序的区间(上电从此处执行用户代码),开发者可以将自己实现的Bootloader存放到Flash区间,MCU上电启动先执行用户的Bootloader代码,该代码可为用户应用程序的下载、校验、增量/补丁更新、升级、恢复等提供支持,如果用户代码提供了网络访问功能,IAP 还能通过无线网络下载更新代码,实现OTA空中升级功能
————————————————
版权声明:本文为CSDN博主「流云IoT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37621078/article/details/106798909

我们针对第一种方式 ICP(SWJ) 进行解读

  • 下载框架
// 下载是指将bin文件下载到 存储器里面(包括片上的片外的,易失性的非易失性的)一般的架构是这样子的服务器客户端架构:
pc机上的arm-gdb(或telnet) <--socket通信(本地或远程)-->PC机上openocd或JLink_Windows中的JLinkGDBServer.exe <--USB--> 仿真器  <--SWD/JTAG--> cortex-m芯片// arm-gdb 用 load 命令支持下载或无服务器架构:
PC机上openocd(linux)或者JLink_Windows中的JLink.exe或keil <--USB--> 仿真器  <--SWD/JTAG--> cortex-m芯片// Jlink.exe 需要用 connect命令 连接 芯片,并用 loadbin 命令支持下载// keil 需要用 点击按钮的方式 支持下载开源实现pc机软件       gdb             http://ftp.gnu.org/gnu/gdb/pc机软件    openocd         https://sourceforge.net/projects/openocd/https://www.gnutoolchains.com/arm-eabi/openocd/仿真器     cmsis-dap       https://github.com/wuxx/nanoDAP         // 这些仿真器都是基于 ARM 发布的 CMSIS DAP 源码制作的https://gitee.com/cazure/CMSIS-DAP      // CMSID DAP 源码 位于 https://github.com/ARMmbed/DAPLink当然也会有 脱机(无PC机) 的情况
下载器  <--SWD/JTAG--> cortex-m芯片 // 此时的结构可以下载开源实现脱机烧录器  DAPLink         https://github.com/Kevincoooool/KS_DAP_Wirelesshttps://www.bilibili.com/video/BV1h54y1C7z4
  • 调试框架

调试是指 下断点/单步运行/全速运行/停止/打印(修改)寄存器 等 功能一般的架构是这样子的服务器客户端架构:
pc机上的arm-gdb(或telnet) <--socket通信(本地或远程)-->PC机上openocd或JLink_Windows中的JLinkGDBServer.exe <--USB--> 仿真器  <--SWD/JTAG--> cortex-m芯片// arm-gdb 用 break/s/r/ctrl-c/bt 等命令来支持调试或无服务器架构:
PC机上openocd(linux)或者JLink_Windows中的JLink.exe或者keil <--USB--> 仿真器  <--SWD/JTAG--> cortex-m芯片// Jlink.exe需要用 connect 命令连接 芯片,并用 loadbin/SetPC/g/h 命令支持调试// keil 需要用 点击按钮的方式 支持调试
  • 其他相关的硬件及软件
硬件:ulink cmsis-dap st-link nulink gdlink openjtag easyopenjtag
服务器:openocd-for-windows openocd-for-linux jlink-for-windows jlink-for-linux pyOCD
客户端:gdb
  • 其他相关的软件(IDE)-level2
其实是 对 level1 中的 服务器和客户端 的封装
eclipse : 有窗口可以自定义 服务器 和 客户端
Visual Studio : 有配置可以自定义 服务器 和 客户端 , 类似 eclipsehttps://blog.csdn.net/makerdiary/article/details/104958596ds-mdk
SDT
ADS
REALVIEW DEVELOPER SUITE
RealView MDK
MULTI 2000
Embest IDE
Hitool for ARMIAR   : 可以通过选择调试器驱动自定义硬件(调试器)和选择硬件(SWD/JTAG)接口,没有用客户端服务器架构,类似keilhttp://bbs.eeworld.com.cn/thread-645416-1-1.htmlhttps://github.com/talpachen/vsf_2017/tree/master/vsf/example/vsfusbd/proj/EWARM7.40也有窗口可以自定义 服务器 和 客户端
keil    : 没有用客户端服务器架构
  • [参考资料]
https://zhuanlan.zhihu.com/p/259494491
https://zhuanlan.zhihu.com/p/41517198
  • 仿真/下载原理
swd
coresight
  • 仿真过程

  • 下载过程

扩展

  • ARM7 ARM9 ARM11 cortex-a 系列芯片的调试
openocd 支持 ARM7 ARM9 ARM11 cortex-a
如果仿真器支持 ARM7 ARM9 ARM11 cortex-a
那么 他俩 就是 调试方案一般用来调试裸机和u-boot(u-boot也是裸机的一种)
  • linux下的调试
如果 openocd 和仿真器 能调试 一个板子的 u-boot(可能是ARM7 ARM9 ARM11 cortex-a)
那么 openocd 和仿真器 能用来调试 linux吗?linux是u-boot 是两套代码,调试u-boot时能否直接跳转到linux的调试?应该可以,怎么实现?
有没有必要?是不是有更好的调试方式(gdb),并基于同一种coresight原理
  • qemu -s -S
qemu 开启单步调试, gdb 通过 target remote localhost:3333 连接openocd 运行时 , gdb 也是通过 target remote localhost:3333 连接qemu 和 openocd 有什么关系相同点都实现了一个gdbserver不同点qemu 中的 gdbserver 直接调用 ptrace 系统调用openocd 中的 gdbserver 是 控制的 usb设备,用coresight技术控硬件

下载非易失性存储器

// OK6410
如果flash被映射到了 memory map,则可以直接用jflash(或者jlink.exe中的loadbin 命令)来烧写
如果没有映射,则可以1.加载烧写程序(烧写程序一般比较大,比sram的总空间要大)到ddr1.1加载初始化内存的bin到sram并运行1.2加载没有初始化内存过程的bin(A)到ddr 2.加载即将被烧写的bin(B)到ddr3.运行A来烧写B

CORTEX-M 系列调试下载总览相关推荐

  1. 如何使用FT2232H适配器和开源调式工具OpenOCD对ARM Cortex M7系列MCU进行SWD接口调试

    该篇幅介绍如何使用FT2232H适配器和开源调式工具OpenOCD对ARM Cortex M系列MCU进行SWD接口调试? 如何连接FT2232HL Debuger Adapter和目标板的的SWD调 ...

  2. php web教程视频教程下载,Web全栈 PHP+React系列视频教程下载

    Web全栈 PHP+React系列视频教程下载 课程介绍: 此套Web全栈 PHP+React系列视频教程覆盖PHP.前端和区块链应用开发三大热门职位,教程对网络基础.前端基础(HTML CSSJav ...

  3. JEECG 社区开源项目下载(总览)

    JEECG 社区开源项目-下载总览 反馈问题板块:http://www.jeecg.org/forum.php?mod=forumdisplay&fid=153 资源1: JEECG 微云快速 ...

  4. 关于ARM Cortex a 系列的看门狗定时器

    关于ARM cortex a系列的看门狗定时器,现在以三星公司的S5PV210为例子,来讨论学习一下看门狗定时器的相关知识. 刚开始学习使用英文技术手册,很多都不太习惯,不过还是坚持吧. 看门狗定时器 ...

  5. 使用USB转TTL串口板和ST-LINK调试下载器给STM32单片机下载程序

    使用USB转TTL串口板和ST-LINK调试下载器给STM32单片机下载程序 简介 STM32的启动模式 JTAG和SWD接口引脚对比 驱动安装 使用官方STM32 ST-LINK Utility软件 ...

  6. STM32烧写程序:ST-link V2调试下载器实物和连接方式

    ST-link V2调试下载器实物自行到淘宝上购买!!! ST-link V2调试下载器实物 使用专门的编程器/调试器,具有下载功能和调试功能,还可以和IDE结合,实现一键下载和调试. 这种接口是通过 ...

  7. CH340系列串口下载器原理图分享

    CH340系列串口下载器原理图 :CH340C.CH340N.CH340K 和 CH340E 以及 CH340B 内置时钟,无需外部晶振. CH340G DTR和 RTS引脚一般情况下为高电平,在下载 ...

  8. 强大的arm板——cortex架构系列介绍

    折叠ARMCortex™-A ARM Cortex™-A 系列应用型处理器可向托管丰富OS平台和用户应用程序的设备提供全方位的解决方案,从超低成本手机.智能手机.移动计算平台.数字电视和机顶盒到企业网 ...

  9. CC Debugger调试下载接口蓝牙模块接线图

    原文地址::http://blog.sina.com.cn/s/blog_569a20780102v8ew.html 相关文章 1.TI-CC_Debugger多功能仿真器原理图----http:// ...

最新文章

  1. php-7.3.13 configure: error: Please reinstall the libzip distribution
  2. 图灵奖得主Hamming对于少数人获得重大成果原因的思考,送给此刻克服迷惘坚持前行的你...
  3. Dubbo 源码分析 - 服务引用
  4. 从 volatile 说到 i++ 的线程安全问题
  5. 全球及中国陶瓷承烧板行业发展态势及运营前景研究报告2021-2027年版
  6. cad画流程图的插件_流程图控件FlowChart.NET使用教程:安排组件的使用
  7. CSS布局奇技淫巧:各种居中
  8. H5与Native交互之JSBridge技术 1
  9. Android长度单位详解(dp、sp、px、in、pt、mm、dip)
  10. 9.28PMP每日一题
  11. VS2010 + C#4.0使用 async + await
  12. centos安装mysql-python_在Centos上安装mysql python
  13. Spring 注解编程之模式注解
  14. 关于人生的10个真相, 希望你越早知道越好
  15. 淘宝css代码生成器_Web开发人员的10个最佳CSS代码生成器
  16. android计算器实现sin功能,android studio实现简单的计算器功能
  17. oracle如何实现累乘,由复合指标计算引起的oracle累乘
  18. Hadoop-1-大数据概述
  19. 如何定时刷新一个View的内容呢? 酷课堂iOS交流群问答(201901期)
  20. 新版仿微信支付生活缴费小程序源码+UniAPP内核

热门文章

  1. 知识付费成为行业布局的重要环节
  2. 数据通信之信道与编码
  3. 吴恩达机器学习 EX7 第二部分 主成分分析(PCA)
  4. (转)ubuntu软件列表
  5. 宝塔面板部署nuxt项目线程守护启动以及Nginx反向代理
  6. JS-正则表达式匹配获取
  7. Git 工作中怎么用?
  8. 先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
  9. O2O优惠券数据分析(一)
  10. markdown写作教程总结