当前位置: 首页 > news >正文

DAPLink工程中drag-and-drop programming (MSC)功能配置

DAPLink工程中drag-and-drop programming (MSC)功能配置



  • 📍相关篇《DAPLink源码固件编译与制作》
  • 🌿DAPLink开源项目地址:https://github.com/ARMmbed/DAPLink
  • DAPLink接口固件为开发者提供:

拖放编程(MSC)
虚拟串行端口(CDC)
基于CMSIS-DAP的调试(HID)

  • USB磁盘拖放编程

DAPLink调试探针在主机上也会显示为一个USB磁盘。二进制(.bin)和十六进制(.hex)格式的程序文件可以复制到该USB磁盘上,然后这些文件会被编程到目标系统的存储器中。这是通过将闪存编程算法嵌入到接口固件中来实现的。因此,为了使拖放编程能够正常工作,所使用的DAPLink固件版本必须是专门为目标MCU型号构建的,这一点非常重要。

  • daplink工程除了后缀_bl:Bootloader程序外,_MCUMODE_if代表所支持拖放编程(MSC)的MCU型号。

📗创建新的拖放编程(MSC)支持型号的MCU工程

  • 🌾参考https://zhuanlan.zhihu.com/p/483819564
  1. 修改根目录下projects.yaml文件内容,补充如下
stm32f103xb_stm32f401rc_if:-*module_if-*module_hic_stm32f103xb-records/board/stm32f401rc.yaml
  • ⚡这里注意,格式一定要对齐,否则执行生成工程脚本时,会报错:
  1. 在daplink项目的records/board文件夹下,增加新MCU型号信息配置文件
stm32f401rc.yaml

  1. 在daplink项目的source/board文件夹下,新建文件stm32f401rc.c,文件内容为
#include"target_family.h"#include"target_board.h"constboard_info_tg_board_info={.info_version=kBoardInfoVersion,.board_id="0720",.family_id=kStub_HWReset_FamilyID,.target_cfg=&target_device,.board_vendor="STMicroelectronics",.board_name="STM32F401RC",};

  1. \source\family\st目录下,创建对应MCU型号的文件夹:

  2. 从daplink项目的根目录下tools文件夹内,拷贝generate_flash_algo.py文件拷贝到上面新建的MCU型号文件夹内

  3. 再从Keil_v5\ARM\Flash内找到对应的下载算法文件也拷贝到上面新建的MCU型号文件夹内

  • 5 - 6步骤结果:
  1. 在新建的MCU型号文件夹内,打开命令提示符窗口或者bash终端都行,执行下面的命令(前提是已经安装了python):
python generate_flash_algo.py STM32F4xx_256.FLM

  1. 将所生成的文件target_blob.c修改名为flash_blob.c,并修改里面的内容。
  • 🌟✨🌟 脚本生成的flash 扇区大小和划分是有问题的,会导致使用MSC功能时出错,具体的修改,查看对应的MCU型号的参考手册Embedded flash memory interface章节。

    参考手册,对于相关型号MCU的扇区描述截图参考:

MCU型号STM32F401RC,flash是256KB为例,前4个扇区是16KB,第五个扇区是64KB,第六个扇区是128KB,总共加起来就是256KB,具体的填写如下:

staticconstsector_info_tsectors_info[]={{0x08000000,0x00004000},//16KB{0x08004000,0x00004000},//16KB{0x08008000,0x00004000},//16KB{0x0800c000,0x00004000},//16KB{0x08010000,0x00010000},//64KB{0x08020000,0x00020000},//128KB};
  1. 手动添加target.c文件,可以参考其它型号的,并补充flash和ram的容量结尾地址内容:
#include"target_config.h"// The file flash_blob.c must only be included in target.c#include"flash_blob.c"// target informationtarget_cfg_ttarget_device={.version=kTargetConfigVersion,.sectors_info=sectors_info,.sector_info_length=(sizeof(sectors_info))/(sizeof(sector_info_t)),.flash_regions[0].start=0x08000000,.flash_regions[0].end=0x08040000,.flash_regions[0].flags=kRegionIsDefault,.flash_regions[0].flash_algo=(program_target_t*)&flash,.ram_regions[0].start=0x20000000,.ram_regions[0].end=0x20010000,.target_vendor="STMicroelectronics",.target_part_number="STM32F401RCTx",};

不知道大小,可以参考Keil工程的Option for Target...标签页:

  1. 以上步骤工作完成之后,即可在daplink根目录下,生成对应的Keil工程了。
    在daplink项目的根目录,命令提示符窗口或bash窗口内执行以下命令,即可生成对应的工程:
progen generate-f projects.yaml-p stm32f103xb_stm32f401rc_if-t uvision

📙MSC编程方式(drag-and-drop programming)实现说明

✨ 将要烧录的.hex或者.bin文件,通过拖拽或者虚拟U盘烧录目标芯片,这个功能是自带的,使用时需要注意,默认是需要使用DAP-link的RESET复位引脚(默认PB0)连接到的目标MCU的NRST复位引脚上,如果没有连接,只能在拖拽或拷入虚拟盘符后,手动去复位目标芯片,才能完成下载烧录工作,另外一种方法是,在daplink源码工程中的复位函数中,使用ID_DAP_SWJ_Pins命令,复位目标MCU,从而实现SWD,在4线模式下,实现真正的MSC编程。

  • 📌函数位置:\source\hic_hal\stm32\stm32f103xb\DAP_config.h中:
externuint8_tswd_write_word(uint32_taddr,uint32_tval);//引入外部函数__STATIC_FORCEINLINEvoidPIN_nRESET_OUT(uint32_tbit){if(bit&1)nRESET_PIN_PORT->BSRR=nRESET_PIN;else{swd_write_word((uint32_t)&SCB->AIRCR,((0x5FA<<SCB_AIRCR_VECTKEY_Pos)|SCB_AIRCR_SYSRESETREQ_Msk));//补充这一句nRESET_PIN_PORT->BRR=nRESET_PIN;}}
http://www.cnnetsun.cn/news/167981.html

相关文章:

  • 【C2000系列DSP的反向灌电流】为什么热插拔的时候I2C总线电平会被拉低?
  • Gemini Inc靶场练习(包含suid提权,文件包含漏洞,ssh免密登录)
  • 软件解耦与扩展:插件式开发方式(基于 C++ 与 C# 的实现)
  • 免费降AI率的工具红黑榜:认准这2个免费降AI率工具,亲测有效!
  • 霍华德·马克斯的市场周期定位技巧
  • 1500字免费降AIGC率的额度,2026年毕业论文查重必备!
  • 1500字免费降AIGC率的额度,2026年毕业论文查重必备!(附每天5次aigc查重)
  • 别再焦虑了!6款实测有效的降ai工具推荐,学姐手把手教你降低ai率!
  • 国外软件,安装即时专业版!
  • 防控近视你需要知道的这些科普常识!
  • 抽奖机随机号码生成:3 种算法实现 + 测试全解析(附完整代码)
  • LLM入门指南:预训练、SFT和强化学习三步构建ChatGPT式大模型
  • LangChain v1.0 Runtime深度解析:构建可测试、可复用的大模型智能体
  • 信息与关系:涌现的三大核心原则
  • c++狼人杀
  • 50天50个小项目 (React19 + Tailwindcss V4) ✨ | DrawingApp(画板组件)
  • 使用自定义注解校验请求参数
  • 敢不敢用一年时间读完这12本书,模型入门必看的12本书!建议收藏!!
  • 对比:Qwen-VL与传统的CNN在图像处理应用
  • 【硬件设计】DC12V输入的防护+滤波设计
  • 快!太快了!一键生成!一键导出!微信自动统计数据报表来了!
  • 智能决策系统日志系统设计:AI架构师的调试与分析技巧
  • 力扣 11.盛最多水的容器 简单的双指针算法 题解
  • 深度学习驱动的论文降重工具有效规避查重风险,智能改写段落
  • 温度传感器PT1000与NTC10K介绍
  • 震惊!这家酶制剂供应商竟让行业炸锅
  • 数学建模与排版无忧?这10个AI论文工具精准解决复现难题
  • AI对打工人的三个影响
  • 小程序/APP接入分账系统:4大核心注意事项,避开合规与技术坑
  • 靠谱的厦门考研公司哪个好