ZARD渐空 发表于 2025-10-13 11:37:48

王昱顺 发表于 2025-10-13 10:38
程序最后都会被主循环进行一次循环跳转回程序开头,所以多出来的程序填充FF和填充其他内容都是对程序没有影 ...

还有一个问题想请教一下,
DWORD xdata DfuFlag _at_ 0xffc;
#define DFU_TAG       0x12ABCD34
void dfu_check()
{
      _nop_(); _nop_();
      _nop_(); _nop_();
      delay();
      if ((DfuFlag != DFU_TAG) && (*(BYTE code *)(LDR_SIZE) == 0x02) && (*(WORD code *)(LDR_SIZE + 1) >= LDR_SIZE + 3))
      {               //DfuFlag是否被置位                   //检查用户AP代码的复位指令是否规范
                ((void (code *)())(LDR_SIZE))();                //在进入ISP代码区后,若没有检测到执行了相对应的指令,则跳转执行AP程序代码区
      }
      //如果以上条件有一个被触发,则执行ISP程序代码区(即DfuFlag被置位,或用户AP代码的复位指令不规范)
//      DfuFlag = 0;//把这个搬到升级成功后,再进入AP区
}
新芯片,第一次烧录后,DfuFlag的值是0xFFFFFFFF还是0x12ABCD34?
如果DfuFlag = 0xFFFFFFFF的话,
然后我把DfuFlag = 0;搬到升级成功后,再进入AP区的话,是不是第一次烧录并上电后,程序是不是会一直在ISP区?

ZARD渐空 发表于 2025-10-13 11:42:22

乘风飞扬 发表于 2025-10-13 10:18
烧录bin文件时上位机软件的缓冲区没有清除,最后一包数据不是128字节的话会填充随机数,这些数据不影响程序 ...

<p>我现在用的是AiCube-ISP软件自带的ISP程序和AP程序同时下载功能</p>
<p><img src="data/attachment/forum/202510/13/114046z8abz2qavaq4ciar.png" alt="image.png" title="image.png" /></p>
<p>然后我想要的效果是新芯片,第一次烧录并第一次上电后,直接进入AP代码区</p>

乘风飞扬 发表于 2025-10-13 12:10:02

ZARD渐空 发表于 2025-10-13 11:37
还有一个问题想请教一下,
DWORD xdata DfuFlag _at_ 0xffc;
#define DFU_TAG       0x12ABCD34


新芯片,第一次烧录ISP程序后,xdata空间的DfuFlag值是随机数。
第一次烧录ISP程序并上电后,由于没有用户AP程序,会一直在ISP区等待更新,因为以下两个条件不满足:
(*(BYTE code *)(LDR_SIZE) == 0x02) &&
      (*(WORD code *)(LDR_SIZE + 1) >= LDR_SIZE + 3)

ZARD渐空 发表于 2025-10-13 14:09:23

乘风飞扬 发表于 2025-10-13 12:10
新芯片,第一次烧录ISP程序后,xdata空间的DfuFlag值是随机数。
第一次烧录ISP程序并上电后,由于没有用 ...

那如果用AiCube-ISP软件自带的ISP程序和AP程序同时下载功能,
第一次烧录并上电后,是不是会可以直接进入AP区了?

乘风飞扬 发表于 2025-10-13 15:25:46

ZARD渐空 发表于 2025-10-13 14:09
那如果用AiCube-ISP软件自带的ISP程序和AP程序同时下载功能,
第一次烧录并上电后,是不是会可以直接进入 ...

用户ISP程序跟用户AP程序同时烧录后会进入AP区运行。

ZARD渐空 发表于 2025-10-13 17:55:12

乘风飞扬 发表于 2025-10-13 15:25
用户ISP程序跟用户AP程序同时烧录后会进入AP区运行。

好的,谢谢
页: 1 [2]
查看完整版本: 用不同格式文件进行OTA,上位机下发最后一位地址数据时,对后面多余的数据位怎么处理