9391|12

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8Flash自编程求助 [复制链接]

如题,芯片型号是STM8S207RBT6,现在的想法是利用IC卡来对程序进行升级。就是先将编译好的程序写到卡里面去,然后再利用一个函数将IC卡里面的数据读出来,再写到Flash里去,以实现比编程。公司以前用MSP430的时候就实现过,现在所有MSP430型号的一起都是直接用IC卡升级的。现在换成STM8了,我以前也没搞过这方面的事情。所以有不少疑问想请教一下。
1.首先,完成将IC卡数据写到Flash中的一段代码是要受保护的,不能再写Flash的时候把自己都写了,但是不知道这一段代码用放到芯片的哪段存储器里。
2.需不需要用一些宏定义来指定这一段代码,具体存放在存储器的哪个位置里。
3.这一段代码是可以被主程序调用的,比如进入到主程序的某个菜单,然后将IC卡插进去,确定执行升级操作后开始执行这一段代码。平时的话,这一段代码不被执行。
4.Flash是不是要从0x8000开始啊。
有谁搞过这方面的东西么,好多地方不懂啊
此帖出自stm32/stm8论坛

最新回复

                                 那位大侠指点指点啊  详情 回复 发表于 2010-12-10 13:48
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 上面第四个疑问写错了,应该是“Flash是不是要从0x8000开始写啊”
此帖出自stm32/stm8论坛
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 刚上面又有一个地方写错了,是“伪指令”而不是“宏指令”
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
既然你公司中有人做过,你直接在公司内部找人咨询不是可以更快地解决问题。

简单地说:1)你自己要分配好存储器;2)同前个问题;3)只要流程合理,怎么实现都可以;4)芯片中Flash从0x0800 0000开始,至于你自己的程序,则需要你自己根据需要决定。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 那将IC卡数据写到Flash的这一段程序,要不要放在某个特殊的位置。
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 什么叫“某个特殊的位置”?哪里是特殊的位置?
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

7
 
                                 刚看了一下430升级的相关代码,还没有全部看完。大概的做法就是先烧一个升级程序到单片机里去,这个升级程序包含了能正常启动仪器所需的最小的一些初始化工作。也就是说这个升级程序是可以独立运行的。在这个升级程序里做了一些判断,比如某个组合键按下,则执行升级操作,如果没有则用asm(“br 0xffe0;”)跳转到用户程序(也就是正常运行的主程序)。那也就是说用户程序要放到flash的0xffe0这个位置。但是现在又有了疑问,就是中断向量。中断向量应该也算是代码的一部分,我查了一下手册stm8s207rbt6的中断向量是放在0x8000后面的128个字节中。如果主程序改变了,导致中断服务程序的入口地址发生的改变,那么中断向量是不是要更新,如果我只将0xffe0后面的代码更新会不会出现问题。还有就是升级程序是一个独立的工程,正式程序也是一个独立的工程,两个都有main函数。那么我在正式程序的main函数之前用伪指令定义一下这个main函数的起始地址,也就是0xffe0。这样在烧完升级程序以后,再烧正式程序是不是才不会出现覆盖。不要不这样做,用IAR编译器用什么指令,#pragma section(0xffe0)啊。指点一下
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 不知道是不是用#pragma section,也不知道#pragma section是不是这么用的,要不要在括号里加上函数名。哎,这是无语啊!
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

9
 
你这个问题叫做IAP(In-application programming),论坛中有过很多讨论,可以搜索一下。

再给你一个ST的应用笔记,这里讲的是SPI、I2C和UART的IAP,但与你的要求原理是一样的;

an2659.zip (117.61 KB)

使用特定的启动程序实现STM8S的在应用中编程(应用笔记例程)

AN2659.pdf (265.13 KB)

使用特定的启动程序实现STM8S的在应用中编程(应用笔记)

此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
刚看了,版主给的资料和坛里的一些帖子,大概有了一个思路。首先中断向量问题可不可以这样做(假设正式程序从0x9000开始存储):首先在我的bootload项目中将中断向量使用绝对地址,比如原先的0x8000对应0x9000,原先的0x8002对应0x9002。然后指定正式程序从0x9000开始存储,并且将正式程序的中断向量整体搬到0x9000,这样就不至于烧正式程序的时候把原先0x8000处的中断向量覆盖掉,并且可以实现正常的中断调用,只是多跳了一次。不知道这样可行不可行。
假如可行的话,就要问几个很白痴的问题了,版主不要见怪。小弟也是刚毕业不久,刚接触stm8,IAR和IAP。
问题1.使用IAR for STM8如何实现指定正式程序从0x9000开始存储,我看到坛子里又说可以在编译器里改一下,但是没具体说。我在options里找了一下,没找到啊。还有说改ICF文件或者是LINK文件,不知道这些文件在什么地方,是在IAR的安装目录里么。
问题2.使用IAR for STM8如何实现将引导程序的中断向量使用绝对地址。在那里可以设,你在一个帖子里提到过,但是没具体说怎么做。
问题2.如何或者是能不能指定正式程序的中断向量从0x9000开始,是不是和问题1是一样的?
还请版主赐教啊
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 刚在IAR安装目录下,搜了一下。发现好多icf文件。我用的STM8S207RBT6,是不是就要改lnkstm8s207rb.icf这个文件啊
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 哎,应该提供一些伪指令来指定代码段的存储位置啊,就像51中的ORG伪指令一样。搞的好复杂
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 那位大侠指点指点啊
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表