OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3619|回复: 21

【IAP升级问题】现在遇到的问题是升级之后程序正常运行,但是外部FLash数据读取回来乱码,RTC时钟计时复位????

[复制链接]

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
发表于 2018-3-5 11:07:00 | 显示全部楼层 |阅读模式
7金钱
APP升级成功,但是读取到的外部flash数字乱码,RTC时钟也计时复位了,IAP升级会影响外部flash和RTC时钟吗???这两个不应该是独立于单片机工作的吗????

最佳答案

查看完整内容[请看2#楼]

规定的是字节地址。 不是位地址。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-5 11:07:01 | 显示全部楼层
white199494 发表于 2018-3-14 19:36
24位的大小最多也就16*1024*1024bit的数据量,但是W25Q64大小为64*1024*1024

规定的是字节地址。
不是位地址。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-5 11:07:13 | 显示全部楼层
@正点原子  原子哥
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-5 11:07:28 | 显示全部楼层
希望今天可以把远程升级搞定
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-5 11:07:57 | 显示全部楼层
走过路过来看看,感谢感谢
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2018-3-5 18:32:26 | 显示全部楼层
帮顶。
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-5 21:43:28 | 显示全部楼层

多谢,大神
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-6 00:29:38 | 显示全部楼层
不会,除非你代码有操作。 建议不操作外部flash的前提下,下载非APP代码,读取flash,看数据还正常不,确认下是flash问题,还是代码问题
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-6 08:52:39 | 显示全部楼层
正点原子 发表于 2018-3-6 00:29
不会,除非你代码有操作。 建议不操作外部flash的前提下,下载非APP代码,读取flash,看数据还正常不,确认 ...

按照原子哥说的试了一下,外部FLASh的数据确实是对的,但是就是APP里读出来是错的,但是APP单独下载读出来又是对的,还有那个RTC的复位问题,就是时间直接清零了
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-6 09:07:18 | 显示全部楼层
正点原子 发表于 2018-3-6 00:29
不会,除非你代码有操作。 建议不操作外部flash的前提下,下载非APP代码,读取flash,看数据还正常不,确认 ...

flash应该是没有问题的,可代码也可以单独正常运行。。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-7 01:32:00 | 显示全部楼层
white199494 发表于 2018-3-6 09:07
flash应该是没有问题的,可代码也可以单独正常运行。。。。

问题可能在你的SPI配置了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-7 19:22:22 | 显示全部楼层
正点原子 发表于 2018-3-7 01:32
问题可能在你的SPI配置了

好像是越界一样,我把APP其实存放地址改到flash前面就不会又乱码现象了
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-7 19:22:59 | 显示全部楼层
正点原子 发表于 2018-3-7 01:32
问题可能在你的SPI配置了

但是我用的是w25q64 8M的我留了1M给APP,照理说不应该越界啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-8 01:05:27 | 显示全部楼层
white199494 发表于 2018-3-7 19:22
但是我用的是w25q64 8M的我留了1M给APP,照理说不应该越界啊

你直接拿我们SPI FLASH例程做一个APP,试下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-11 10:12:26 | 显示全部楼层
正点原子 发表于 2018-3-8 01:05
你直接拿我们SPI FLASH例程做一个APP,试下

void W25QXX_Init(void)
{       
  GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  // PB12 推挽
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_12);

  W25QXX_CS=1;                                //SPI FLASH不选中
        SPI2_Init();                           //初始化SPI
        SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//设置为18M时钟,高速模式
        W25QXX_TYPE=W25QXX_ReadID();//读取FLASH ID.  

}  

void SPI2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;

        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
        RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI2,  ENABLE );//SPI2时钟使能        

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB13/14/15复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB

        GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15上拉

        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //设置SPI的数据大小:SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //串行同步时钟的空闲状态为高电平
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;                //定义波特率预分频的值:波特率预分频值为256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC值计算的多项式
        SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

        SPI_Cmd(SPI2, ENABLE); //使能SPI外设

        SPI2_ReadWriteByte(0xff);//启动传输                 


}   



void Write_FlashApp(void)
{
         u8 read_buf[512];
         u16 i;
         u32 flash_appwriteAddr=APP_FLASH_ADR_START;
        for(i=0;i<(Bin_Size/512);i++)
        {
                        W25QXX_Read(read_buf,flash_appwriteAddr,512);                        //从W25Q64倒数第100个地址处开始,读出SIZE个字节
                        flash_appwriteAddr+=512;
                        iap_write_appbin(FLASH_APP1_ADDR+512*i,read_buf,512);//更新FLASH代码
   }
         for(i=0;i<512;i++)
        {
                 read_buf=0xff;
        }
         W25QXX_Read(read_buf,flash_appwriteAddr,512);                                        //从W25Q64倒数第100个地址处开始,读出SIZE个字节
         iap_write_appbin(FLASH_APP1_ADDR+512*(Bin_Size/512),read_buf,Bin_Size%512);//更新FLASH代码

}


#define APP_FLASH_ADR_START 1024*1024
#define FLASH_SIZE 64*1024*1024


回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-11 10:13:27 | 显示全部楼层
正点原子 发表于 2018-3-8 01:05
你直接拿我们SPI FLASH例程做一个APP,试下

我涉及flash的操作就是这一些,一但地址给的太大就乱码
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-13 16:24:52 | 显示全部楼层
正点原子 发表于 2018-3-6 00:29
不会,除非你代码有操作。 建议不操作外部flash的前提下,下载非APP代码,读取flash,看数据还正常不,确认 ...

AWVZ0R9YQUZNIUNE}R5J11A.png 原子哥这里的写入地址24bit是指最大地址只能是24位的吗???,我感觉我的在写外部flash的时候只要地址超过一定的值(没有超过flash容量),对应的数据就会写到flash的开头去,把我原来的数据给覆盖了。好奇怪啊,被这个问题困扰好久了
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-13 16:25:39 | 显示全部楼层
正点原子 发表于 2018-3-8 01:05
你直接拿我们SPI FLASH例程做一个APP,试下

是这个库函数的原因吗??原子哥求告知
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-14 01:31:33 | 显示全部楼层
最大是24位
你知道24位表示多大的空间么?
知道的话,对比下,是否超过了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-14 19:32:45 | 显示全部楼层
正点原子 发表于 2018-3-14 01:31
最大是24位
你知道24位表示多大的空间么?
知道的话,对比下,是否超过了?

那8M的外部FLASH我想用最后1M的空间存放APP程序,地址是56*1024*1024是不是算超出地址了??
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-14 19:36:21 | 显示全部楼层
正点原子 发表于 2018-3-14 01:31
最大是24位
你知道24位表示多大的空间么?
知道的话,对比下,是否超过了?

24位的大小最多也就16*1024*1024bit的数据量,但是W25Q64大小为64*1024*1024
回复

使用道具 举报

20

主题

169

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1012
金钱
1012
注册时间
2017-7-27
在线时间
162 小时
 楼主| 发表于 2018-3-15 13:15:36 | 显示全部楼层
正点原子 发表于 2018-3-15 01:06
规定的是字节地址。
不是位地址。

恩恩,是这样的,找了好久才发现....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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