打印
[AT32F413]

F413外部flash数据丢失问题【已解决】

[复制链接]
2794|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aple0807|  楼主 | 2020-8-29 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 muyichuan2012 于 2020-8-31 09:10 编辑


bank3外部flash,型号用的GD25Q128。GUI已经跑起来,可以确定图片字库数据烧进去了。

可断电重新通电就没显示了,不烧录进调试看发现外部flash区数据全变0xFF了。
反复试了几次都这样。

这个原理图这样画是不是有问题?

我们其他项目这样连SPI接口存数据没发现有数据丢失现象。

使用特权

评论回复
沙发
muyichuan2012| | 2020-8-29 17:52 | 只看该作者
您好,从您描述的现象来看,可能的原因是程序其实已经下载到外部flash中了。但是在重新上电后,由于AT32  MCU先上电,外部flash后上电。导致程序MCU执行到需要访问外部flash内容时,外部flash其实并没有准备好,从而导致异常。

推荐的解决办法是:
MCU的main函数中进入后,加一点延时(等外部flash上电 ready),然后再往下执行。

退一步讲,AT32 MCU是做不到帮别的外部flash厂家丢程序的,毕竟是我们是不同厂家的IC.

使用特权

评论回复
板凳
084425| | 2020-8-29 17:59 | 只看该作者
确认一下代码中初始化外部flash时,此时外部flash是否已上电

使用特权

评论回复
地板
aple0807|  楼主 | 2020-8-29 21:57 | 只看该作者
经过反复测试,可以确定是我初始SPIM时漏了什么内容,但对比官方例程没找到具体漏了什么。

建的工程有两个分支,一个是带烧录字库到外部flash的,一个是不带烧录外部flash的。

带外部flash分支,下文描述为:分支IMG
应用程序在内部flash.
字库烧录位置 0x8400000  ,占用空间2.3MB

不带外部flash,下文描述为:分支APP
应用程序同上

测试部分1
步骤如下:
1、烧录分支IMG,程序正常工作,界面显示正常
2、不断电,重新烧录分支APP,界面显示同 1
3、烧录分支IMG,断电,再上电,死机
4、烧录分支APP,断电,再上电,死机
5、死机状态烧录分支IMG,不断电直接运行,同1正常工作
6、死机状态烧录分支APP,不断电直接运行,继续死机

测试部分2
APP分支 在0x8A00000处固定一个数组
重复部分1的第6步,不断电直接运行,又可以正常工作了

烧录外部flash恢复正常运行后,无论怎么复位,只要不断电,都可以正常运行,一旦断电就不行。说明程序并没有篡改芯片寄存器导致SPIM失败。


以上实验证明数据并未丢失,只是SPIM故障了,没法读数据。keil配套的烧写算法应该有什么东西可以让模块恢复正常,所以一烧录外部flash就可以正常运行。但我自己的程序应该是缺了什么导致SPIM并未正常启动。

SPIM配置代码是参考官方例程的,内容如下
  GPIO_InitType GPIO_InitStructure;
  
  /* Enable ext.flash GPIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_AFIO|RCC_APB2PERIPH_GPIOA|RCC_APB2PERIPH_GPIOB, ENABLE);
  
  /* Configure ext.flash pin */
  GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pins = GPIO_Pins_8;
  GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pins = GPIO_Pins_1|GPIO_Pins_6|GPIO_Pins_7|GPIO_Pins_10|GPIO_Pins_11;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Select PB10, PB11 as SPIF_TX and SPIF_RX */
  GPIO_PinsRemapConfig(GPIO_Remap_EXT_FLASH, ENABLE);
  GPIO_PinsRemapConfig(AFIO_MAP7_SPIF_1001, ENABLE);
  
  /* In this example, use on-board EN25QH128A as ext.flash */
  FLASH->B3SEL = FLASH_SPIM_TYPE2;
  
  /* Unlock the ext.flash program erase controller */  
  while (BIT_READ(FLASH->STS3, FLASH_STS_BSY));
  FLASH->FCKEY3 = FLASH_KEY1;
  FLASH->FCKEY3 = FLASH_KEY2;
  while (BIT_READ(FLASH->CTRL3, FLASH_CTRL_LCK));
  
  /* If the data written to ext.flash need to be scrambled, please specify the scrambled range */
  FLASH->DA = 0;
  
  return;


正常工作显示界面




使用特权

评论回复
5
aple0807|  楼主 | 2020-8-29 22:03 | 只看该作者
另外,断电再上电导致SPIM故障后,烧录官方例程里面的 operate_SPIM 例程,情况是一样的,SPIM无法恢复,看到的数据是0xFF,只要在外部flash随便一个位置烧一些数据就可以正常工作了。

使用特权

评论回复
6
aple0807|  楼主 | 2020-8-29 22:06 | 只看该作者
muyichuan2012 发表于 2020-8-29 17:52
您好,从您描述的现象来看,可能的原因是程序其实已经下载到外部flash中了。但是在重新上电后,由于AT32  M ...

麻烦帮忙看下4楼处的测试,这个问题应该是初始化的问题,谢谢!

使用特权

评论回复
7
muyichuan2012| | 2020-8-30 08:25 | 只看该作者
我还是怀疑是外部flash上电时间晚于mcu导致,请在以下代码后面增加500ms或更长延时试试。
  /* Enable ext.flash GPIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_AFIO|RCC_APB2PERIPH_GPIOA|RCC_APB2PERIPH_GPIOB, ENABLE);

另外,请问官方例程在at start 413上可以复现问题吗?

使用特权

评论回复
8
aple0807|  楼主 | 2020-8-30 09:56 | 只看该作者
muyichuan2012 发表于 2020-8-30 08:25
我还是怀疑是外部flash上电时间晚于mcu导致,请在以下代码后面增加500ms或更长延时试试。
  /* Enable ext. ...

不是,第5步和第6步都是持续通着电测试的。 可以排除上电速度不一致的因素了。

使用特权

评论回复
9
aple0807|  楼主 | 2020-8-30 09:59 | 只看该作者
muyichuan2012 发表于 2020-8-30 08:25
我还是怀疑是外部flash上电时间晚于mcu导致,请在以下代码后面增加500ms或更长延时试试。
  /* Enable ext. ...

支持keil的烧写算法可以开源出来吗?一看就知道啥原因了,着应该不是机密文档吧? 我看NXP的烧写算法工程都是开源的啊

使用特权

评论回复
10
muyichuan2012| | 2020-8-30 10:11 | 只看该作者
是的ARM keil官方有源码,您有兴趣的话  可自行下载研究。

使用特权

评论回复
11
muyichuan2012| | 2020-8-30 10:16 | 只看该作者
您这里有能够在at start 413上复现问题的工程吗?可否贴到附件中  我们研究一下。

使用特权

评论回复
12
muyichuan2012| | 2020-8-30 10:19 | 只看该作者
本帖最后由 muyichuan2012 于 2020-8-30 10:35 编辑

或者  您方便的话  留一个微信号也可以,我们技术负责帮您处理。毕竟,这样回帖太没效率。

使用特权

评论回复
13
aple0807|  楼主 | 2020-8-30 11:25 | 只看该作者
本帖最后由 aple0807 于 2020-8-30 22:19 编辑
muyichuan2012 发表于 2020-8-30 10:19
或者  您方便的话  留一个微信号也可以,我们技术负责帮您处理。毕竟,这样回帖太没效率。 ...

可以,不过我今天出去有点事,明天吧。 那个413的评估板,在办公室,明天去测试下,不过flash芯片不一样,结果也不一定。我回头换个GD25F128实验下。

使用特权

评论回复
14
aple0807|  楼主 | 2020-8-30 22:21 | 只看该作者
muyichuan2012 发表于 2020-8-30 10:19
或者  您方便的话  留一个微信号也可以,我们技术负责帮您处理。毕竟,这样回帖太没效率。 ...

问题已经解决了。GD25Q128上电默认是没有开启QPI功能的,我用IO模拟SPI开启QPI功能后再初始化SPIM模块,就可以正常工作了。 反复断电通电测试都没有问题。

使用特权

评论回复
15
muyichuan2012| | 2020-8-30 22:24 | 只看该作者
厉害  膜拜中

使用特权

评论回复
16
嵌入小菜菜| | 2020-9-2 08:51 | 只看该作者
精华帖,看了之后,学习不少,以后多向楼主学习!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

328

帖子

2

粉丝