capcomsnk 发表于 2023-9-7 09:50:36

STC32G 基于CAN的IAP如何实现?

本帖最后由 capcomsnk 于 2023-9-7 10:01 编辑

借鉴官网的IAP在线烧写样例.基于CAN的方式给芯片烧程序,芯片:STC32G12K128。
1.自己写的上位机烧写IAP软件,STC32G芯片程序的是按样例加了CAN通讯。
2.目前遇到的问题:完成下面流程后,重启后无法进入用户AP。
   确认一下IAP烧写流程。
      1)连接
      2)IAP擦除芯片
      3)IAP写入 写入起始地址:0x011000。总觉得应该该是这里操作出了问题。但不知哪里出了问题。
      4)重启

3 用官方的串口IAP样例和上位机样例写人用户AP,可以成功进入用户AP。


4.说明文档上说上位机会将0x010000-0x010002地址内容映射到0x011000-x011002这句话,是不是就是把数据从0x010000-0x010002剪切至0x011000-x011002



5.目前公司在用这个芯片做后期的备用方案,已经进入测试阶段。电路板已经封装进设备内部,拆除困难,只留出can通讯,所以急于实现该功能。不知是否有其他更有效的沟通方式,解决遇到的问题。


zhp 发表于 2023-9-7 15:59:42

参考官方提供的串口模式实现用户自己的ISP范例
将里面的串口通讯部分修改为CAN,应该就可以满足你的需求

如果你是自己开发上位机软件,则需要注意将0x010000-0x010002的复位入口指令
自己复制到0x011000-x011002

capcomsnk 发表于 2023-9-7 21:34:02

本帖最后由 capcomsnk 于 2023-9-9 22:34 编辑


1.IAP写入数据就是把显示的这些数据从地址0x011000开始依次写入,直到HEX文件结束的地方吗?

2.如下图 我把图中从001000-00111f的数据依次写入芯片EEPROM的0x011000-0x01111f地址后,上位机发送了重启指令,然后就死了。

zhp 发表于 2023-9-8 09:38:42

capcomsnk 发表于 2023-9-7 21:34
上位机已经复制到0x011000-0x011002了。写入后 重启也进不了AP,貌似卡死了,也进不了IAP。
不知从哪里开 ...

将你的hex文件发出来我看一下

capcomsnk 发表于 2023-9-8 11:20:03

本帖最后由 capcomsnk 于 2023-9-8 12:19 编辑

zhp 发表于 2023-9-8 09:38
将你的hex文件发出来我看一下
好的,麻烦看一下。谢谢了。如果需要的话,我把相关源码也发你看看。


1.IAP程序是已经加了CAN通讯的程序。
2.AP程序就是个测试程序。运行后P60脚会间隔取反,电路板上是接了LED,用于确认是否工作。
3.上位机是自己写的程序,通过CAN通讯完成 发送IAP擦除,发送IAP写入,然后发送重启指令。


上车测试日马上到了{:funk:},感谢了。


zhp 发表于 2023-9-9 17:48:28

capcomsnk 发表于 2023-9-8 11:20
好的,麻烦看一下。谢谢了。如果需要的话,我把相关源码也发你看看。




从你的hex文件的数据格式以及中断向量处理看不出问题

capcomsnk 发表于 2023-9-9 22:41:16

本帖最后由 capcomsnk 于 2023-9-9 22:49 编辑

zhp 发表于 2023-9-9 17:48
从你的hex文件的数据格式以及中断向量处理看不出问题
1.IAP写入数据就是把显示的这些数据从地址0x011000开始依次写入,直到HEX文件结束的地方吗?

2.如下图 我把图中从001000-00111f的数据依次写入芯片EEPROM的0x011000-0x01111f地址后,上位机发送了重启指令,然后就死了。


3.我的IAP编译时出现了如下警告信息,对写入AP程序不知是否有影响,麻烦看一下。但是程序可以正常运行,CAN通讯也都正常。



capcomsnk 发表于 2023-9-10 23:20:09

本帖最后由 capcomsnk 于 2023-9-10 23:31 编辑

zhp 发表于 2023-9-9 17:48
从你的hex文件的数据格式以及中断向量处理看不出问题
你好,自己分析了一番。
1.发现在自己做的IAP里使用了CAN中断和Time0的中断 ,导致进入AP时,相关的Time0中断无法使用(就是IAP编译后,报告的两个警告)。
2.我尝试了在IAP里不使用TIme0以及相关中断后,再将测试的用户AP程序写入EEPROM,这次测试用的用户AP程序就可以运行了(测试的用户AP程序也使用了TImer0)。

请问这种问题怎么解决呢?用户AP程序要使用CAN通讯完成功能,而IAP也要用CAN通讯完成用户AP的升级。



capcomsnk 发表于 2023-9-11 10:39:38

STC32G12K128 IAP 中断问题


版主好。芯片是STC32G12K128   使用IAP样例修改增加CAN通讯的方式来升级自己的用户AP程序。其中发现了问题。
1.自己做的IAP里使用了CAN中断和Time0的中断 ,导致进入AP时,相关的Time0中断无法使用(就是IAP编译后,报告的两个警告)。
2.尝试了在IAP里不使用TIme0以及相关中断后,将测试的AP程序写入EEPROM,这次测试用AP程序就可以运行了(测试的AP程序也使用了TImer0)。
3.尝试了在IAP里不使用TIme0以及相关中断后,再次尝试把自己的AP程序写入,程序正常,但是CAN信息接收不了,CAN中断失效。

请问这种问题怎么解决呢?用户AP程序要使用CAN通讯完成功能,而IAP也要用CAN通讯完成用户AP的升级。

乘风飞扬 发表于 2023-9-11 11:15:55

因为AP的程序空间进行了地址偏移,需要在用户ISP里面(isr.asm)进行了中断地址重映射。

所以AP与用户ISP里面就不能同时使用中断,可以参考我们例程的方法,在用户ISP里面使用查询的方式来进行数据收发。
页: [1] 2 3
查看完整版本: STC32G 基于CAN的IAP如何实现?