OpenEdv-开源电子网

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

F407通过网络远程升级失败,遇到写stmflash失败的问题,请大侠指点

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-9-8
在线时间
22 小时
发表于 2017-5-10 17:08:57 | 显示全部楼层 |阅读模式
2金钱
    我做了一个远程升级功能: boot + app
    stmflash 大小为1M,boot (64k) + App(470k) + Update(470k)  +  Flag(20k)
    我的设想是,boot 引导 app 执行,app 中使用了lwip协议栈,做的有telnet server 功能,通过telnet 执行update 的升级命令,将更新app,通过tftp协议下载到
    stmflash 的update 区,同时将app的大小和app 更新标志写到Flag区。然后通过telnet 执行reboot 重启设备。

    当前遇到的情况是:
    1、在app中  下载了更新app后,在写stmflash 的 flag 区的时候,总是写失败。
    2、我在boot中,写flag区和update区,都能够写成功。
    不知道为什么会出现这种情况,谁知道什么原因,请指教,谢谢。

最佳答案

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

解决了,是因为标志未清。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-9-8
在线时间
22 小时
 楼主| 发表于 2017-5-10 17:08:58 | 显示全部楼层
解决了,是因为标志未清。
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12050
金钱
12050
注册时间
2013-3-8
在线时间
1282 小时
发表于 2017-5-10 17:26:41 | 显示全部楼层
470K你怎么分的,flash有4个16K的扇区,1个64K的扇区,7个128K的扇区,要擦除时是要整个扇区擦除的。我想是你写flag时,内存不够用了,如果flag(20K)是在芯片最后一个扇区,并且 20k为脏(就是有数据),那么想要写,就要先擦除128K数据,此时要申请128K的内存,先把数据读出来,再擦,若申请不成功,也就写不进去了。
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-9-8
在线时间
22 小时
 楼主| 发表于 2017-5-10 18:17:58 | 显示全部楼层
我跟踪了下,STMFLASH_Write -> FLASH_ProgramWord -> status = FLASH_WaitForLastOperation(); -> status = FLASH_GetStatus();

status  返回为 FLASH_ERROR_PROGRAM 的错误,这个看不明白是什么原因。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 02:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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