介绍
脱机烧写器是支持序列号烧写的,设置界面如下:
点序列号管理(序号1),出来设置窗口(序号2),然后就可以对序列号进行设置了.序列号是HEX形式.
其中:
使用组表示有几组序列号,最多可以有4个.
当前组表示对应序列号的相关参数,包含烧录地址,起始号,步进,长度
设置完成之后就可以
演示参数为:使用数组:1组,长度8,烧录地址0x08015d10,起始号:1000,步进10
测试程序
#define LEDR_PIN GET_PIN(D, 8)
#define LEDG_PIN GET_PIN(D, 9)
#define LEDB_PIN GET_PIN(D, 10)
const static char *sid_str = "123456789012345678901234567890";
int main(void)
{
int count = 1;
rt_pin_mode(LEDR_PIN, PIN_MODE_OUTPUT);
rt_kprintf("sid addr:%p\\n", sid_str);
while (count++)
{
rt_pin_write(LEDR_PIN, PIN_HIGH);
rt_thread_mdelay(100);
rt_pin_write(LEDR_PIN, PIN_LOW);
rt_thread_mdelay(400);
}
return RT_EOK;
}
测试代码如上,先烧录到开发板中,就可以得到sid_str的地址了,然后通过命令读取sid_str的内容,测试如下:
接着就使用烧录器进行固件烧录,烧录完成后再次读取sid_str的内容:
然后接着再来一次,这次就出现问题了:
接着又按了几次,仍然不行,
然后用烧写器把程序读取出来对比一下试试,相关的细节区别如下:
对比发现确实有非预期的数据被修改了,有一位发生了位翻转,再降低速度试试吧
测试降速之后还是不行,非预期的数据更多了:
查看日志发现是读取0x08015d00位置数据出现了错误
更换开发板,使用APM32F103的开发板再次测试:
下面是用JLINK烧进去的原始程序执行结果:
烧录一次之后的结果如下:
是符合预期的,多少几次之后的结果:
结果也是正常的.
结论
经过多次尝试,以及修改序列号地址之后又多次尝试,结论是在STM32H743这款单片机下,通过烧写器烧写之后会出现读取内存失败的问题,具体的原因问了客服,由于是周末,威廉希尔官方网站
不上班,所以需要等工作日了再跟野火威廉希尔官方网站
沟通一下具体是怎么回事.
如果是不启用序列号的功能,烧写进去的程序是没有问题的.
其他的加密功能,随机数功能等待下次在测试了.