关于stm32 IAP的另类实现

[复制链接]
 楼主| 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 | 显示全部楼层
呵呵,你试过了,可以正常运行吗
 楼主| henry_wu001 发表于 2010-2-2 12:30 | 显示全部楼层
我只是简单试了下,从user程序跳到 system mem,上位机用 isp的上位机,是可以操作的。
 楼主| henry_wu001 发表于 2010-2-2 13:54 | 显示全部楼层
我觉得这个方法没有被广泛采用的原因是很多人并不是用串口1来进行iap的,可能是usb或其他口.

如果够大胆的话可以试着把system mem这块flash擦了重新写上自己的iap程序。
mcuisp 发表于 2010-2-2 13:59 | 显示全部楼层
请教楼上 怎么擦除重写system memory?
很感兴趣。
可有重大经济利益在里面,呵呵。
 楼主| henry_wu001 发表于 2010-2-2 14:17 | 显示全部楼层
我没试过,
flash控制器只能操作user 的flash?
我想可以和普通flash编程一样试试。。。
bigarmer 发表于 2010-2-2 15:04 | 显示全部楼层
哈哈,我也很感兴趣。
可有重大经济利益在里面,呵呵。
ddc21ic 发表于 2010-2-22 00:01 | 显示全部楼层
这帖子要顶
zwll 发表于 2010-2-22 00:32 | 显示全部楼层
呵呵,连 mcuisp都要请教了
emailli 发表于 2010-2-22 08:52 | 显示全部楼层
系统区的FLASH肯定是可以编程的,只是其协议不一定会开放。

否则,厂家怎么写入呢?

所以,这里可能需要原厂的一些支持了。可以是官方的,也可以是私底下的。嘿嘿!
ST_ARM 发表于 2010-2-22 10:55 | 显示全部楼层
1、用户是不能擦除system memory的,
2、用户在自己的程序中跳转到system memory,使用ISP进行程序下载,用户原有的所有代码都将被擦除;下一次用户将无法进行IAP操作。
ypj005 发表于 2010-2-22 11:21 | 显示全部楼层
顶!
 楼主| henry_wu001 发表于 2010-3-1 12:47 | 显示全部楼层
1、用户是不能擦除system memory的,
2、用户在自己的程序中跳转到system memory,使用ISP进行程序下载,用户原有的所有代码都将被擦除;下一次用户将无法进行IAP操作。 ...
ST_ARM 发表于 2010-2-22 10:55


iap和用户程序坐在一起不就行了
ST_ARM 发表于 2010-3-1 15:06 | 显示全部楼层
本帖最后由 ST_ARM 于 2010-3-1 15:08 编辑

但是中断向量是不同地址的。如果你有写/读保护,在升级中用户必须进行解除写/读保护,执行这个操作后,系统会做复位动作,如果复位了,但是你的启动不是从system memory启动的,就不能进行ISP操作了。
sinadz 发表于 2010-3-1 20:38 | 显示全部楼层
同意楼上的观点
McuPlayer 发表于 2010-3-4 11:14 | 显示全部楼层
1、楼主的做法当然是没问题,我用此法两年了
2、ISP区与AP区并无多大不同,Memory Map的地址不同而已
 楼主| henry_wu001 发表于 2010-3-9 14:58 | 显示全部楼层
1、楼主的做法当然是没问题,我用此法两年了
2、ISP区与AP区并无多大不同,Memory Map的地址不同而已
McuPlayer 发表于 2010-3-4 11:14


用了2年都不吭声,你真坏。
 楼主| henry_wu001 发表于 2010-3-9 14:59 | 显示全部楼层
但是中断向量是不同地址的。如果你有写/读保护,在升级中用户必须进行解除写/读保护,执行这个操作后,系统会做复位动作,如果复位了,但是你的启动不是从system memory启动的,就不能进行ISP操作了。 ...
ST_ARM 发表于 2010-3-1 15:06


参考isp的文档,我觉的这个问题不存在
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

81

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部