官方提供了一份V2.8的命令行源码版,API文档里本来也没几个函数,但是命令行的参数多到离谱,如果新手刚接触的话,最难的是理解它的整个烧录流程!
现在就只能根据命令行的所有参数,不断尝试测试出下正确的流程了!
只要串口打开过一次,关闭串口后芯片就得断电复位了,这是什么奇葩的规则!
经过一个小时的摸索,可以总结了以下几点:
1、先设置串口参数 (调用一次即可,不用的时候调COM_Close)
TARGET_SetComInitType(0);
SetCOMSettings
STBL_SetFlowControl(FALSE)
COM_Open
SetTimeOut(1000)
STBL_SetEcho(FALSE)
2、初始化芯片
在使用擦除、添加读保护、去掉读保护操作后,需要再次初始化.
STBL_ERASE
STBL_READOUT_PROTECT
STBL_READOUT_PERM_UNPROTECT
通过发送0x7F值启动系统内存引导加载程序配置,发送一个ACK握手包?
STBL_Init_BL();
3、联机读取芯片PID
查询ini配置表得到参数首地址[stmap文件Sector0 / Address] ,默认0x08000000
STBL_GET
SetTimeOut(15000)
STBL_GET_ID
STBL_READ(0x08000000, 4, szProtect);
如果无保护的话就是4个0xFF,否则就是已经加密的话将不能做任何操作,只能先擦
4、获取版本属性
STBL_GET_VER_ROPS
第一个字节有效,例如为0x92,那版本就是V9.2
5、读写BID版本号[stmap文件Product / BID]
例如STM32F4_27_37_29_39_2048K文件中的芯片PID:0x0419,对应的BID为1FFF76DE
STBL_READ(0x1FFF76DE, 2, szBid);
第一个字节有效,例如为0x92,那版本就是V9.2
6. 下载固件流程
查询ini配置表得到参数首地址[stmap文件Sector0 / Address] ,默认0x08000000
查询ini配置表得到参数首地址[stmap文件Sector0 / Size] ,默认4000
a.从0x08000000基地址开始,分包大小0x4000下载
b.如果buff全部为0xFF则不需要下载,直接跳过
c.使用STBL_DNLOAD下载,STBL_VERIFY验证
d.最后使用STBL_GO(0x08000000)运行
7. 启用保护流程(只读)
使用STBL_READOUT_PROTECT开启即可
这样的话,其他的接口函数暂时没什么用处,一个适合自己的烧录工具就做好了!
=========================================================================
另外还有下面三个节点的参数没有理解,而且每个MAP不一定有,也不一定相同节点名,因为没有用到它就暂时没有深入研究!
OptBytes
OptBytesB1
OptBytesB2
如果有哪位大佬看到了说一声,谢谢!