烧录
probe-rs run 的第四步。两章,一章讲计划,一章讲执行:
- 从镜像到烧录计划:镜像格式注册表;ELF 只取
PT_LOAD段、写到p_paddr;FlashBuilder合并数据块;commit按算法分组、算出扇区、页和填充;dry_run在算完计划后返回,拿不到FlashLayoutReady;keep_unwritten_bytes为什么会把整个扇区读回再写满。 - 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 的整个擦写流程走完,记下每一次算法调用。擦写的真实耗时待实测。
💬 关联讨论
发起讨论加载中...