Rust in Everything
基于 probe-rs 0.32.0

烧录

probe-rs run 的第四步。两章,一章讲计划,一章讲执行:

  1. 从镜像到烧录计划:镜像格式注册表;ELF 只取 PT_LOAD 段、写到 p_paddr;FlashBuilder 合并数据块;commit 按算法分组、算出扇区、页和填充;dry_run 在算完计划后返回,拿不到 FlashLayoutReady;keep_unwritten_bytes 为什么会把整个扇区读回再写满。
  2. flash 算法:在目标的 RAM 里跑一段代码:装配时放断点头、算栈和双缓冲区;load 先 reset_and_halt 再写入、读回;call_function 设好寄存器后放行、等核停在断点头上读 R0;模拟目标上的完整调用序列。
flowchart TB
  elf["fw.elf"] --> loader["FlashLoader:数据块"]
  loader --> layout["FlashLayout:扇区、页、填充"]
  layout -->|"dry_run 到此为止"| done["返回"]
  layout --> algo["Flasher:装载 flash 算法"]
  algo --> erase["EraseSector × n"]
  erase --> prog["ProgramPage × n"]
  prog --> ram["最后写 RAM 区的数据"]

本部分的实验分两段:FakeProbe 加 nRF52833 夹具的 ELF,能算出完整的计划,真烧录在装载算法前的 reset_and_halt 超时;本卷的模拟 SWD 目标加两条规则(复位时按 vector catch 停核、放行时让算法瞬间返回 0),能把 STM32F103C8 / STM32F407VG 的整个擦写流程走完,记下每一次算法调用。擦写的真实耗时待实测。

💬 关联讨论

发起讨论
加载中...