SF32LB52,sftool 在自定义板上刷写 NOR 失败

我正在使用 SF32LB525UC6 芯片设计一块自定义电路板,目前需要通过 sftools 对板子上的 NOR 闪存进行烧录,以便运行我的第一个程序。但不幸的是,sftools 完全无法工作,在读取和写入时都会报错。

我的 Flash 芯片是 W25Q16RVXHJQ,看起来工作正常,因为我可以通过 SifilUARTServer 访问它,并且可以直接在 Ozone 中读写内存和寄存器。复位后内存数据也能正常保持。我不能直接写入内存,必须先在 Flash 芯片上置位 WREN,但我不认为这是异常行为。

使用 sftool 读取内存时无法成功,在进度条达到 100% 后会收到 CRC 超时错误。

写入内存也不成功,会报错:“protocol error: write flash failed to start at 0x12000000”。

目前我怀疑 RAM stub 可能对当前连接的 NOR Flash 类型不满意。我正考虑自己编写一个 stub 程序,以验证是否可以通过编程方式读写 Flash。但在动手之前,我想先请教一下您,是否了解这个 Flash 芯片可能存在什么问题?或者您是否有关于 RAM stub 的更多资料,比如它是如何构建和工作的?例如,它的源代码是否在某个地方可以获取?

提前非常感谢您的帮助。

嗨,又来了!

当然,在苦苦搜索了将近一周后,我刚一提问就马上找到了答案……不过我还是把解决方案记录下来,以便日后参考。

问题在于这个RAM芯片不被RAM引导程序(stub)所识别。解决方法很简单,就是使用Impeller工具来修补RAM stub,将这个特定NOR芯片的正确参数包含进去。我将此芯片与一个类似型号进行了比较,通过对比两份数据手册,最终得到了以下配置:

然后,我需要克隆sftool项目,并用新生成的文件替换sftool-lib/stub文件夹中的STUB文件。现在,读取和写入都正常工作了!

很高興聽到你成功了。

事實上,現在有一些更現代的方法。最新版本的 sftool 支援新增驅動程式;我們可以使用 --stub-config 參數來指定一個 JSON 檔案,用以描述新的 Flash 驅動程式,其結構定義於 https://github.com/OpenSiFli/sftool/blob/master/sftool/stub_config_schema.json。或者,你也可以使用 --stub 來指定你已修補的 bin 檔案,這樣在下載時就不需要重新編譯 sftool。

你可以使用 sftool-gui 來編輯 stub-config,它提供了更現代的使用者體驗。

我們將盡快更新相關文件。