搜索
bottom↓
回复: 24

help,lpc17xx在IAP时机率性出现看门狗复位的情况,帮忙分析

[复制链接]

出45入88汤圆

发表于 2020-3-2 21:49:03 | 显示全部楼层 |阅读模式
内置看门狗机率性复位。有两个情况出现。第一是写数据到flash时,第二是跳转到应用区的时候。当冷启动没有IAP通信时跳转到应用区是没有问题的。但IAP完后再跳转就会机率性复位。
跳转函数:
#define        IMG_START_SECTOR        0x00003000        /* Sector 3 应用程序地址 */
#define        IMG_END_SECTOR                0x0000FFFF        /* Sector 15 */
/*********************************************************************************************************
** Function name:       JMP_Boot
** Descriptions:        跳转到应用程序
** input parameters:    address 应用程序地址
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
__asm void JMP_Boot( uint32_t address ){
   LDR SP, [R0]                ;Load new stack pointer address
   LDR PC, [R0, #4]        ;Load new program counter address
}

/*********************************************************************************************************
** Function name:       Boot
** Descriptions:        跳转到应用程序
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
static void Boot( void )
{
        //DISABLE_INTERRUPT();
  SCB->VTOR = IMG_START_SECTOR & 0x1FFFFF80;        //修改中断向量表
        JMP_Boot(IMG_START_SECTOR);
}

写flash函数:

//正常返回1
static u4t load_image(u4t offset, u1t *data, u2t length)
{
  u4t i;
  //printf("offset=%d,length=%d,d1=%x,d2=%x,d3=%x\n",offset,length,data[0],data[1],data[2]);
        if(length > 0){
    if (flag_encode==1)
    {
      for(i=0; i<length/4; i++)
      {
        decode_dword2(au8RxBuffer+i*4,data+i*4);
      }
    }
    else
    {
      memcpy(au8RxBuffer,data,256);
    }
                /*        准备写扇区操作 */
                if(u32IAP_PrepareSectors(START_SECTOR, END_SECTOR) == IAP_STA_CMD_SUCCESS)
                {                          
                        /*        将RAM内容复制到Flash */
                        if(u32IAP_CopyRAMToFlash(IMG_START_SECTOR + offset, (u4t)au8RxBuffer, length) == IAP_STA_CMD_SUCCESS)
                        {                               
                                /*        比较复制内容 */
                                if(u32IAP_Compare(IMG_START_SECTOR + offset, (u4t)au8RxBuffer, length, 0) == IAP_STA_CMD_SUCCESS)
                                {
                                        return 1;
                                }
        else
        {
          return 2;
        }
                        }
      else
      {
        return 3;
      }
                }
    else
    {
      return 4;
    }
        }
        else
                return 0;
}

写完后的校验:
total=checksum(IMG_START_SECTOR,IMG_START_SECTOR-1+total);

static u4t checksum(u4t start, u4t end)
{
  u4t total=0;
  while (start<=end)
  {
   // printf("%02x,",*((u1t*)start));
    WDTFeed();
    total=total+*((u1t*)start);
    start++;
  }
  return (total);
}

出0入0汤圆

发表于 2020-3-23 14:24:34 | 显示全部楼层
Edesigner. 发表于 2020-3-23 13:52
这个能重新初始化寄存器吗?

会的,全部初始化一遍的。

出45入88汤圆

 楼主| 发表于 2020-3-23 13:52:31 | 显示全部楼层
TANK99 发表于 2020-3-23 13:43
NVIC_SystemReset( );        // 复位
这个在Cortex-m0/m3/m4 CMSIS中都有的。

这个能重新初始化寄存器吗?

出0入0汤圆

发表于 2020-3-23 13:43:27 | 显示全部楼层

NVIC_SystemReset( );        // 复位
这个在Cortex-m0/m3/m4 CMSIS中都有的。

出0入0汤圆

发表于 2020-3-21 18:59:37 | 显示全部楼层
我是路过的

出45入88汤圆

 楼主| 发表于 2020-3-21 10:26:12 | 显示全部楼层
TANK99 发表于 2020-3-21 10:24
用强等看门狗复位啊?为啥不用nvic里的复位?这样就算APP里没用到看门狗也不用特地开了。 ...

如何操作?

出0入0汤圆

发表于 2020-3-21 10:24:04 来自手机 | 显示全部楼层
用强等看门狗复位啊?为啥不用nvic里的复位?这样就算APP里没用到看门狗也不用特地开了。

出0入0汤圆

发表于 2020-3-19 17:44:59 | 显示全部楼层
这种问题不容易处理

出45入88汤圆

 楼主| 发表于 2020-3-3 23:20:32 | 显示全部楼层
本帖最后由 Edesigner. 于 2020-3-3 23:22 编辑

算了,定案了。问题1:解决方法,把IAP的频率设置为25000K,并且加了关闭中断保护后试了很多测试再没有出现死机现象。问题2:解决方法,由于程序从冷启动或者复位后运行再跳转到APP区是没有死机问题,死机问题只出现在APP区跳转到IAP区再跳转回APP区时才出现,所以要从APP区跳转到IAP时不采用跳转方式,而是直接利用看门狗复位方式。这算是目前最终的解决方案。谢谢上面各位热心网友提供的意见。
void WDT_reboot( void )
{
  LPC_WDT->WDTC = 1;        /* once WDEN is set, the WDT will start after feeding */
  LPC_WDT->WDMOD = WDEN|WDRESET;

  LPC_WDT->WDFEED = 0xAA;                /* Feeding sequence */
  LPC_WDT->WDFEED = 0x55;   
}

出45入88汤圆

 楼主| 发表于 2020-3-3 20:50:12 | 显示全部楼层
szyusong@163 发表于 2020-3-3 13:23
boot代码放到RAM中运行

从APP区跳转到IAP区不写FLASH等2秒超时后再跳回APP区时也是会死机

出45入88汤圆

 楼主| 发表于 2020-3-3 20:24:27 | 显示全部楼层
security 发表于 2020-3-3 13:55
跳转的代码,参考、比对一下这里:「KEAZ128 UART bootloader跳转应用层程序异常」
中断是要关的,先把一 ...


未解决,真是好奇怪。从APP区跳转到IAP区后,再跳转回APP区时死机(不知道是死机还是跑飞了)。更真奇怪的是上电后从IAP区跳转到APP区却是正常的。

出0入8汤圆

发表于 2020-3-3 13:55:59 | 显示全部楼层
Edesigner. 发表于 2020-3-3 13:19
冷启动IAP完可以跳转到APP区,但从APP区跳转到IAP区后再IAP完成后转到APP区时出现死机。 ...

跳转的代码,参考、比对一下这里:「KEAZ128 UART bootloader跳转应用层程序异常」
中断是要关的,先把一些逻辑整正确了,再来看还有没有问题。

出45入88汤圆

 楼主| 发表于 2020-3-3 13:50:33 | 显示全部楼层
szyusong@163 发表于 2020-3-3 13:23
boot代码放到RAM中运行

擦写的与运行的程序不在同一个扇区

出0入10汤圆

发表于 2020-3-3 13:23:31 来自手机 | 显示全部楼层
boot代码放到RAM中运行

出45入88汤圆

 楼主| 发表于 2020-3-3 13:19:36 | 显示全部楼层

冷启动IAP完可以跳转到APP区,但从APP区跳转到IAP区后再IAP完成后转到APP区时出现死机。

出45入88汤圆

 楼主| 发表于 2020-3-3 13:19:13 | 显示全部楼层
security 发表于 2020-3-3 08:30
IAP 完,重启系统。

冷启动IAP完可以跳转到APP区,但从APP区跳转到IAP区后再IAP完成后转到APP区时出现死机。

出45入88汤圆

 楼主| 发表于 2020-3-3 08:37:49 | 显示全部楼层
会不会是频率过高?
        au32Command[4] = SystemFrequency / 1000UL;        /* Core clock frequency in kHz */

SystemFrequency=72M;

出45入88汤圆

 楼主| 发表于 2020-3-3 08:36:52 | 显示全部楼层
关闭了中断再擦和写flash还是会出现在写flash时死机的情况。

出0入8汤圆

发表于 2020-3-3 08:30:26 | 显示全部楼层
IAP 完,重启系统。

出45入88汤圆

 楼主| 发表于 2020-3-3 08:07:53 | 显示全部楼层

关闭了中断还是不行,__disable_irq()。执行JMP_Boot后还是死机。

出0入0汤圆

发表于 2020-3-2 22:40:29 来自手机 | 显示全部楼层
也要关中断

出0入0汤圆

发表于 2020-3-2 22:40:11 来自手机 | 显示全部楼层
要关狗的

出45入88汤圆

 楼主| 发表于 2020-3-2 22:37:23 | 显示全部楼层
把看门狗关闭了,就直接死机了。

出45入88汤圆

 楼主| 发表于 2020-3-2 22:03:43 | 显示全部楼层
主频率99.5M和72M都试过。效果一样。

出45入88汤圆

 楼主| 发表于 2020-3-2 21:51:27 | 显示全部楼层
看门狗超时时间是2秒。在主程序喂狗,喂狗时间是足够及时的,我试过把超时时间设置为4秒也会出现这个情况。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 22:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表