电子DIY小家 发表于 2024-9-19 15:59:53

32G12K128的BOOT和APP合并教程

由于最近一个项目客户需要将BOOT和APP生成一个文件,并用LINK1D实现一次性下载,查阅了论坛发现没有完整的教程,然后自己简单做了一个,用的官网的CAN升级的历程。
注意:如果是C51系列的合并过程可以去看论坛的这个帖子,里面有详细过程,C251的请看本帖子
如何把自己的用户区ISP固件和自己的用户区AP固件进行合并供工厂量产使用
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4231
(出处: 国芯技术交流网站)


注:本帖中提到的BOOT即为引导的代码,APP位用户代码,后文不在重复。

具体步骤如下
1:将BOOT和APP生成为bin文件




两个文件重复如上两个步骤即可完成,两个文件可以重命名为boot.bin和app.bin

2.准备一个二进制文件编辑软件,我用的WINHEX


打开软件后按ctrl+o分别打开这两个文件

3.按chtl+n新建一个文件用来移植这些数据,注意新建的文件长度可以定义为100k,因为这个单片机有128k的存储,太短了后面还要填充。



4.将文件的0x00全部填充为0xff。先按下ctrl+a全选数据,在按下CTRL+L打开填充框,输入ff,按下确定即可


按下确定后,数据如下:



5.移植boot代码到这个文件中。打开boot.bin,发现其实有用的数据就是从0x10000这个字段开始的,

而这个文件的0X10000地址其实就是ISP软件里的0xfe0000地址,而这个项目选择的EEPROM大小是128K,所以这个WEINHEX地址里的0对应的就是ISP软件里的0XFE0000,所以这个0X10000的数据也只要移到对应的地址即可,


所以这个boot.bin里的文件,从0x10000的地址一直选中到末尾的数据,按下ctrl+c即可复制,出现如下弹框直接点确定即可


在新建的文件中,找到对应的0x10000地址,然后直接粘贴到这个位置即可


粘贴完成后,结果如下(如果粘贴的时候提示文件会变大, 直接点确定即可)



6.移植app到这个文件
由于这个代码的偏移地址为0x1000,所以直接找到这个偏移地址对应的数据,即0x11000,然后按上述方法粘贴到新的文件即可

粘贴完之后数据如下所示


当然需要注意的是这个代码是128k的,从FE0000开始的部分也有用户代码,所以需要把APP.bin的头上部分的用户代码也拷贝过来


可以看到app.bin数据到这里结束,所以把这对代码也拷贝过去。这里为了方便直接把0x0-0x6c0的代码全都复制过来即可。需要注意新的文件里这些位置的数据要先删掉;


先把数据全都选中,在按下delete即可删除,再把原来的数据复制过来,复制完成后,结果如下:




7.再修改一个数据的复位跳转指令即可



用官方提供的这个CAN升级的上位机软件可以看到这个CAN升级的app代码的跳转指令,这里再0xff1000的地方有02 10 0f的数值,直接把这三个字节的数据抄过来


这样这个文件就改完了,再把它另存为一个.bin文件即可



最后,打开ISP软件,进行如下配置即可一次下载完所有数据了







四汐 发表于 2024-9-19 17:04:47

分享一下学习心得,也分享一下我与冲哥的处理方法不同之处(hex版){:5_284:}

首先,打开winhex,新建一个文件,设置大小为128KB


为什么要设置成128KB?可以看下面这张图,32G12K128可以分配128K的EEPROM空间,我们全部利用起来!


第二步(可跳过,看最后番外篇),选择【编辑】→【填充文件】(ctrl + L)→填充数值“FF”→点击“确定”





第三步,可以看见数据全部被填充为“FF”了,但是左侧地址偏移不是很“醒目”。我们可以打开【选项】→【常规设置】(F5)→勾选“十六进制偏移量”→点击“确定”







第四步,打开ISP软件,设置EEPROM为128K,打开“stc_can_user_isp.hex”(boot程序),然后找到EF0000h地址,



从这里开始选取,一直到最后,右键复制





第五步,回到winhex,找到地址10000h(对应FF:0000H),在该位置右键“编辑”,找到“写入”,点击“确定”,选择“ASCII HEX”格式,点击“确定”,数据就被成功写入了。到这里就成功一半了










记得核对一下数据,看下开头结尾就差不多就可以了。





第六步,与第四步第五步一样,这次打开用户代码的hex,一直找到有程序数据的地址位置。
注意在FF0000h处,有几个很重要的参数,把它记下来!


然后。来到FF1000h处,这里就是放用户程序的起始位置,同理,选择全部数据,复制。


接下来,到winhex,找到11000h的地址位置,同理写入数据,抽查核对一下数据,无误。




很重要的一部,不要漏掉!!
把之前几下的几个数据,填入到用户代码的前面,就像这样。直接点击要写入的地方,光标开始闪烁,用键盘键入即可。



第七步,保存,随意命名为hex(不要用中文),这样就融合完毕啦。






第八部,打开ISP,选择对应时钟频率,设置EEPROM为128K,打开刚才保存的hex文件。检查数据地址无误,就可以下载啦。






番外,如果你跳过了第二步填充为“FF”,你可以尝试在ISP软件将空白区域填充改为“00”模式。经过测试,这样也可以使用。






soma 发表于 2024-9-19 19:32:17

纯hex文件合并在一起可以不。

llyymm 发表于 2024-10-13 20:06:12

经典,要好好学习了

ZYHbusiniao 发表于 2024-10-14 13:14:05

{:4_250:}不错的资料,学习了

智胜电子 发表于 2024-11-3 13:43:30

大哥,winhex软件在那有,你可共享一下吗{:handshake:}

angalp 发表于 2024-11-3 14:07:06

智胜电子 发表于 2024-11-3 13:43
大哥,winhex软件在那有,你可共享一下吗

百度,有很多

angalp 发表于 2024-11-3 14:08:04

收藏,慢慢学习

llyymm 发表于 2024-11-17 19:19:23

又学习到新知识了,感谢分享

houzi8 发表于 2024-11-28 18:47:29

先收藏,再学习,感谢冲哥
页: [1] 2
查看完整版本: 32G12K128的BOOT和APP合并教程