当前位置: 首页 > 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.jsqmd.com/news/116136/

相关文章:

  • 从架构设计看区别:Kafka分区、RocketMQ队列、RabbitMQ交换机
  • 跟网型逆变器小干扰稳定性分析与控制策略优化研究(Simulink仿真实现)
  • 智能销售助手-langfuse评测策略
  • 三大 MQ 可靠性对比:消息不丢失、不重复,谁的方案更稳?
  • 防火墙配置:掌握 iptables、firewalld 等工具的使用与管理
  • 网站集成微软账户一键登录(支持Windows Hello 面容、指纹等)-微软Azure的Oatuh2.0的集成
  • 三大MQ核心场景匹配:Kafka/RabbitMQ/RocketMQ该怎么选?
  • 告警通知方式:邮件、短信、Slack、钉钉等告警通知方式的配置
  • 2025.12.20
  • 【滤波跟踪】基于带线性等式约束(LEC)的固定滞后平滑问题研究ASCMKS ASEPKS ASPMKS ASMRKS ASDEKS ASLECKS多种滤波算法研究附Matlab代码
  • 转换成小写字母
  • 系统安全加固:禁用不必要服务和端口,及时更新安全补丁
  • 某中心与高校共建人类与人工智能科学中心
  • Ansible入门指南——自动化运维的第一步
  • 我发现Zstd压缩级太高内存涨 后来调level参数优化平衡
  • 研究生必备!9个AI写论文工具,10分钟生成1万字问卷类论文含真实参考文献
  • 从入门到精通:大模型赋能千行百业的百万元级AI解决方案价值图谱
  • 【毕设】车辆故障管理系统的设计实现(任务书+文献综述+答辩PPT+论文)
  • 代码挑战:构建一个支持“并发安全”的防抖 Hook,确保在 transition 期间不会丢弃最后的更新
  • 2025大模型完全指南:从零基础到月薪30K+的AI工程师之路_全网最新首发AI大模型入门教程(非常详细)
  • 【毕设】基于深度学习的交通标识识别系统的设计与实现 (开题+任务书+论文+答辩PPT)
  • AI元人文构想:迈向人类与AI的意义共治
  • 【C2000系列DSP的Bootloader详解】如何利用脚本自动生成Hex/Bin/S19文件
  • 深度解析:为什么 React 不允许在 `useEffect` 里同步调用导致重渲染的 `setState`?
  • Flutter与OpenHarmony订单列表组件开发指南
  • 火山引擎 MongoDB 进化史:从扛住抖音流量洪峰到 AI 数据底座 - 指南
  • 【C2000系列DSP的反向灌电流】为什么热插拔的时候I2C总线电平会被拉低?
  • 代码实战:利用 `useSyncExternalStore` 实现一个支持“时间旅行”的全局状态管理器
  • Flutter与OpenHarmony购物车组件完整实现
  • 【C2000系列DSP的Bootloader详解】实现过程、流程图与示例代码