打印

关于stm32 IAP的另类实现

[复制链接]
5630|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
henry_wu001|  楼主 | 2010-2-2 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iap是在应用编程,也就是说里面有了用户程序,这样要编程的时候就要跳到另一段代码去实现,stm32给的例子是把用户区flash分成2块来实现的。
但是其中给isp用的系统区还是存在的,既然isp的程序代码还在,那干脆就跳到系统区去实现得了。刚刚试了下是可以从用户区程序跳到系统区去执行的。

这个想法请大家讨论下。

//-------------------------------
#define ApplicationAddress     0x1FFFF000

    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    { /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);
      Jump_To_Application();
    }
  }
沙发
winloop| | 2010-2-2 10:11 | 只看该作者
"但是其中给isp用的系统区还是存在的,既然isp的程序代码还在,那干脆就跳到系统区去实现得了"
意义不明

使用特权

评论回复
板凳
henry_wu001|  楼主 | 2010-2-2 10:37 | 只看该作者
进入isp程序一般是用boot0/1 引脚跳线来实现的,
在选择用户程序启动后,一般就不再考虑isp的程序了,但其实还是可以访问的。

就是这个意思啊

使用特权

评论回复
地板
LIU_XF| | 2010-2-2 12:22 | 只看该作者
呵呵,你试过了,可以正常运行吗

使用特权

评论回复
5
henry_wu001|  楼主 | 2010-2-2 12:30 | 只看该作者
我只是简单试了下,从user程序跳到 system mem,上位机用 isp的上位机,是可以操作的。

使用特权

评论回复
6
henry_wu001|  楼主 | 2010-2-2 13:54 | 只看该作者
我觉得这个方法没有被广泛采用的原因是很多人并不是用串口1来进行iap的,可能是usb或其他口.

如果够大胆的话可以试着把system mem这块flash擦了重新写上自己的iap程序。

使用特权

评论回复
7
mcuisp| | 2010-2-2 13:59 | 只看该作者
请教楼上 怎么擦除重写system memory?
很感兴趣。
可有重大经济利益在里面,呵呵。

使用特权

评论回复
8
henry_wu001|  楼主 | 2010-2-2 14:17 | 只看该作者
我没试过,
flash控制器只能操作user 的flash?
我想可以和普通flash编程一样试试。。。

使用特权

评论回复
9
bigarmer| | 2010-2-2 15:04 | 只看该作者
哈哈,我也很感兴趣。
可有重大经济利益在里面,呵呵。

使用特权

评论回复
10
ddc21ic| | 2010-2-22 00:01 | 只看该作者
这帖子要顶

使用特权

评论回复
11
zwll| | 2010-2-22 00:32 | 只看该作者
呵呵,连 mcuisp都要请教了

使用特权

评论回复
12
emailli| | 2010-2-22 08:52 | 只看该作者
系统区的FLASH肯定是可以编程的,只是其协议不一定会开放。

否则,厂家怎么写入呢?

所以,这里可能需要原厂的一些支持了。可以是官方的,也可以是私底下的。嘿嘿!

使用特权

评论回复
13
ST_ARM| | 2010-2-22 10:55 | 只看该作者
1、用户是不能擦除system memory的,
2、用户在自己的程序中跳转到system memory,使用ISP进行程序下载,用户原有的所有代码都将被擦除;下一次用户将无法进行IAP操作。

使用特权

评论回复
14
ypj005| | 2010-2-22 11:21 | 只看该作者
顶!

使用特权

评论回复
15
henry_wu001|  楼主 | 2010-3-1 12:47 | 只看该作者
1、用户是不能擦除system memory的,
2、用户在自己的程序中跳转到system memory,使用ISP进行程序下载,用户原有的所有代码都将被擦除;下一次用户将无法进行IAP操作。 ...
ST_ARM 发表于 2010-2-22 10:55


iap和用户程序坐在一起不就行了

使用特权

评论回复
16
ST_ARM| | 2010-3-1 15:06 | 只看该作者
本帖最后由 ST_ARM 于 2010-3-1 15:08 编辑

但是中断向量是不同地址的。如果你有写/读保护,在升级中用户必须进行解除写/读保护,执行这个操作后,系统会做复位动作,如果复位了,但是你的启动不是从system memory启动的,就不能进行ISP操作了。

使用特权

评论回复
17
sinadz| | 2010-3-1 20:38 | 只看该作者
同意楼上的观点

使用特权

评论回复
18
McuPlayer| | 2010-3-4 11:14 | 只看该作者
1、楼主的做法当然是没问题,我用此法两年了
2、ISP区与AP区并无多大不同,Memory Map的地址不同而已

使用特权

评论回复
19
henry_wu001|  楼主 | 2010-3-9 14:58 | 只看该作者
1、楼主的做法当然是没问题,我用此法两年了
2、ISP区与AP区并无多大不同,Memory Map的地址不同而已
McuPlayer 发表于 2010-3-4 11:14


用了2年都不吭声,你真坏。

使用特权

评论回复
20
henry_wu001|  楼主 | 2010-3-9 14:59 | 只看该作者
但是中断向量是不同地址的。如果你有写/读保护,在升级中用户必须进行解除写/读保护,执行这个操作后,系统会做复位动作,如果复位了,但是你的启动不是从system memory启动的,就不能进行ISP操作了。 ...
ST_ARM 发表于 2010-3-1 15:06


参考isp的文档,我觉的这个问题不存在

使用特权

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

本版积分规则

15

主题

81

帖子

0

粉丝