刎唇 发表于 2026-1-30 15:55:00

通过串口烧录DA14531MOD内封的SPI FLASH

1. 综述

DA14531MOD内置一颗1Mb的SPI FLASH用于存储DA14531的固件。手册中虽然标注了144KB的ROM,但似乎无法编程。DA14531一般启动时从外部总线或内部32KB大小的OTP加载程序到RAM中运行。启动方式请参考:
https://lpccs-docs.renesas.com/DA14535/AN-B-072-DA14531-Booting-from-serial-interfaces/Booting/Booting.html
对于DA14531MOD来说,SPI接口已经连接了模块内封的SPI FLASH,如果SPI FLASH中存在可启动的程序且OTP中没有特殊配置的情况下模块加载并运行该程序。
除此之外,在模块外引出的引脚中只能使用引脚P0_5的1-wire UART接口进行总线启动。在官方文档的第7小节介绍了从串口总线中启动的通信协议。
对内封SPI FLASH进行烧录有两种方法:

[*]使用JLink
[*]使用1-wire UART
官方工具SmartSnippets™ Toolbox支持上述两种方式,具体操作方式请阅读官方文档UM-B-083。不论是哪一种方法基本流程是相同的,上位机首先通过驱动JLink或串口上传一个支持编程外部FLASH的烧录程序到芯片然后复位。当烧录程序运行后,通过通讯接口(驱动JLink直接读写RAM/1-wire UART)下发命令给烧录程序完成外部FLASH的烧录。
官方工具支持命令行调用,一般情况下可以满足生产自动化烧录的需求。本文主要描述如何在不依赖官方工具的前提下通过1-wire UART方式烧录模块内封的SPI FLASH。
2. 前期准备

官方提供了支持烧录外部FLASH的源码以及预编译的程序,分别位于:

[*]源码:SDK_PATH/utilities/flash_programmer
[*]预编译程序:SDK_PATH/config/toolbox_resources/DA1453x/common
源码可用于参考通信协议或实现高级需求,只是烧录外部FLASH可以直接使用预编译程序。对于DA14531MOD来说,要使用的是flash_programmer_531.bin这个程序。在SmartSnippets™ Toolbox的安装目录中也可以找到同名文件,但和最新SDK中的不同,应该是SDK版本的原因。使用哪个都可以实现基本的烧录需求。
2.1. 单线串口

官方建议的连接方式是将常规串口的RX和TX引脚短接后串一个1K的电阻,再将串口和模块的J14(芯片P0_5)连接。由于短接后上位机发送的数据会同时被接收,所以实现上位机时需要过滤掉这些数据(例如官方工具就会自动过滤),或使用支持单线串口的设备作为上位机。
3. 烧录步骤


[*]读取烧录程序flash_programmer_531.bin,在其末尾添加5个字节0x00 0x00 0x00 0x00 0x05构成SW code bytes(该步骤作用不明确,官方工具会附加这个5个字节)
[*]通过1-wire UART启动:协议可参考官方文档

协议本身较为简单,需要注意的有3点

[*]Checksum使用的算法是BCC校验算法(异或校验算法),使用初始值0,依次与SW code bytes的所有字节进行异或运算后得出。
[*]接收到芯片发出的0x02时需要尽快响应
[*]上位机确认Checksum后发送确认ACK0x06后,芯片将自动复位。下一步是与flash_programmer程序交互,如果上位机发送ACK后立即发送flash_programmer的命令可能会失败。此处需要延时一段时间。

[*]使用ACTION_SPI_ID读取内封SPI FLASH ID(该步骤可选,但通过这个步骤可以初步判断SPI FLASH是否正常。官方工具通过该命令确认flash_programmer是否成功运行)
[*]使用ACTION_SPI_GPIOS配置SPI GPIO
[*]使用ACTION_SPI_READ读取当前FLASH中的内容(可选)
[*]使用ACTION_SPI_ERASE擦除FLASH(可以选择整块擦除或ACTION_SPI_ERASE_BLOCK区域擦除,协议不同)
[*]读取待烧录固件,并为固件添加8字节的头0x70 0x50 0x00 0x00 0x00 0x00 SIZE_1 SIZE_0,其中前6字节为固定值,后2字节为大端字节序的固件长度(不包括新添加的8字节头)。该固件头必须添加,只有包含该头时DA14531才会加载固件到RAM中运行。
[*]使用ACTION_SPI_WRITE发送固件
[*]再次读取FLASH内容,校验写入是否成功
[*]发送复位命令ACTION_PLATFORM_RESET运行程序(可选)
3.1. flash_programmer协议

该程序所有通信协议遵守相同的结构:
indexnotepayload length npayload crcpayload aka the action codepayload~payload其中负载字段至少包含1字节的命令码(action code)。负载长度和负载CRC均使用大端字节序。
CRC参数如下:
POLY: 0x04C11DB7
INIT: 0xFFFFFFFF
XOROUT: 0xFFFFFFFF
REFIN: enable
REFOUT: enable
上位机发送的请求依据命令码的不同在负载字段会扩展不同的固定格式,flash_programmer的响应主要有两种,附带数据的ACTION_CONTENTS和用作ACK的ACTION_OK。其余响应请参考源码。
indexnotepayload length npayload crcACTION_CONTENTS: 0x82payload~payloadindexnote1payload crcACTION_OK: 0x83ACTION_SPI_ID


[*]请求
indexnote1payload crc0x93
[*]成功响应
indexnotepayload length 5payload crcACTION_CONTENTS: 0x82big-endian FLASH CHIP ID
ACTION_SPI_GPIOS


[*]请求
indexnote9payload crc0x95spi CS gpio portspi CS gpio pinspi CLK gpio portspi CLK gpio pinspi MOSI gpio portspi MOSI gpio pinspi MISO gpio portspi MISO gpio pin对于DA14531MOD的内封SPI FLASH来说,必须配置为:
indexnotevaluespi CS gpio port0spi CS gpio pin1spi CLK gpio port0spi CLK gpio pin4spi MOSI gpio port0spi MOSI gpio pin0spi MISO gpio port0spi MISO gpio pin3
[*]成功响应 ACTION_OK
ACTION_SPI_READ


[*]请求
indexnote7payload crc0x90start address (big-endian)read length (big-endian)
[*]成功响应
indexnoteread length + 1payload crcACTION_CONTENTS: 0x82data
ACTION_SPI_ERASE


[*]请求
indexnote1payload crc0x92
[*]成功响应 ACTION_OK
ACTION_SPI_WRITE


[*]请求
indexnotewrite length + 1payload crc0x91data
[*]成功响应 ACTION_OK
ACTION_PLATFORM_RESET


[*]请求
indexnote1payload crc0xC0

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

猷浮 发表于 2026-2-8 11:48:39

感谢,下载保存了

揿纰潦 发表于 2026-2-9 09:03:47

感谢分享,下载保存了,貌似很强大

晁红叶 发表于 2026-2-10 01:44:54

前排留名,哈哈哈

怒鼓踊 发表于 2026-2-10 05:57:32

感谢,下载保存了

钦娅芬 发表于 2026-2-10 10:49:31

谢谢分享,辛苦了

存叭 发表于 2026-2-11 14:16:41

前排留名,哈哈哈

屠焘 发表于 2026-2-13 14:12:26

感谢分享,学习下。

珠尿娜 发表于 2026-2-21 03:37:39

感谢分享,学习下。

茅断卉 发表于 2026-2-22 06:17:32

感谢分享

蝌棚煌 发表于 2026-2-22 11:29:02

谢谢楼主提供!

东门芳洲 发表于 2026-2-23 08:35:33

这个好,看起来很实用

堵赫然 发表于 2026-2-24 03:33:55

鼓励转贴优秀软件安全工具和文档!

笙芝 发表于 2026-2-24 12:43:17

不错,里面软件多更新就更好了

陈兰芳 发表于 2026-2-27 19:56:22

谢谢分享,试用一下

玲液 发表于 2026-3-12 02:53:12

感谢,下载保存了
页: [1]
查看完整版本: 通过串口烧录DA14531MOD内封的SPI FLASH