你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 7571|回复: 9

为什么STM8S208写不进Flash(超过64K)

[复制链接]

5

主题

41

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-13
发表于 2012-11-14 11:05:29 | 显示全部楼层 |阅读模式
大家好,我用STM8S208MB来做自升级。
在RAM里运行的时候,发现一个比较怪异的问题。用块写数据的时候,当数据小于64K(10000H)的时候,一切正常。当数据大于64K(10000H)的时候,就无法写进去。关键程序如下:
for (Count = 0; Count < BLOCK_SIZE; Count++)
    {
        *((@far u16*)StartAddress + Count) = ((u8)(Buffer[Count]));
    }
如果是那个数据类型是u16,数据大于64K就无法写进去,一直停在那里。如果数据类型是u8,数据大于64K它也能写,但它写的地方不是10000H,而是8000H的位置。
百思不得其解,困扰我一周了,请高手解惑。
回复

使用道具 举报

8

主题

206

回帖

0

蝴蝶豆

中级会员

最后登录
2019-10-23
发表于 2012-11-15 13:09:46 | 显示全部楼层

RE:为什么STM8S208写不进Flash(超过64K)

是不是 数据范围超出了RAM的 范围了啊 ?
回复 支持 反对

使用道具 举报

5

主题

41

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-13
 楼主| 发表于 2012-11-15 13:50:47 | 显示全部楼层

回复:为什么STM8S208写不进Flash(超过64K)

我现在换成用ST提供的库函数来做。
关键代码如下:
#if 1
/************* write into flash rom *************/               
                        for(i=0;i
回复 支持 反对

使用道具 举报

8

主题

206

回帖

0

蝴蝶豆

中级会员

最后登录
2019-10-23
发表于 2012-11-15 18:00:17 | 显示全部楼层

RE:为什么STM8S208写不进Flash(超过64K)

你的STM8S208D后缀是什么啊?
单单这样 很难看出问题的
只能说方法没错 ,不知道细节的东西了。
回复 支持 反对

使用道具 举报

5

主题

41

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-13
 楼主| 发表于 2012-11-16 10:16:29 | 显示全部楼层

回复:为什么STM8S208写不进Flash(超过64K)

我的是STM8S208MB,我写到D4000H的位置就无法写进去了,然后又会回到8000H位置重新覆盖之前写的。
我用的是COSMIC,代码其实很简单,就是在RAM里直接调用Flash擦写的那三个INRAM函数。
回复 支持 反对

使用道具 举报

5

主题

41

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-13
 楼主| 发表于 2012-11-16 10:20:14 | 显示全部楼层

回复:为什么STM8S208写不进Flash(超过64K)

解锁Flash,并COPY到RAM中:
disableInterrupts(); 
unlock_PROG();
unlock_DATA();
_fctcpy('F');
MCUUpdateCodeProc();

写Flash的动作:
for(i=0;iIAPSR = ~0x02;
/* Lock data memory */
FLASH->IAPSR = ~0x08;

跳转到起始位置,相当于重启:
//reset stack pointer (lower byte - because compiler decreases SP with some bytes)
_asm("LDW X, SP ");
_asm("LD A, $FF");
_asm("LD XL, A ");
_asm("LDW SP, X ");
 
回复 支持 反对

使用道具 举报

8

主题

206

回帖

0

蝴蝶豆

中级会员

最后登录
2019-10-23
发表于 2012-11-17 14:43:09 | 显示全部楼层

RE:为什么STM8S208写不进Flash(超过64K)

怎么会写到D4000H的位置的呢?这是多大了啊,是不是你说错了啊?
还有当大于64K的时候 你重新写一个以64K那个地址为起始地址的看看,就是说呢分开 两个64K的来写 。
回复 支持 反对

使用道具 举报

5

主题

41

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-13
 楼主| 发表于 2012-11-18 08:48:19 | 显示全部楼层

回复:为什么STM8S208写不进Flash(超过64K)

是这样的,之前我发现是64K,后面改成了我上面那种方式,结果就出现了D400H(不是D4000H,写错了)无法写了。
计算一下:D400H-8000H = 5400H = 21504/128 = 168块 = 21504/1024 = 21K。
测试发现,也就是在这里会停下来,用小于64的代码写,有时候会重复写到8000H去,有时候就是在D400H一直写错,非常精准。
我原来以为是通信出了错误,由于在RAM里无法查看,就去掉在RAM里运行,关闭擦写Flash动作,在ROM里跑程序,发现接收没有错。
回复 支持 反对

使用道具 举报

5

主题

41

回帖

0

蝴蝶豆

新手上路

最后登录
2020-7-13
 楼主| 发表于 2012-12-27 14:53:13 | 显示全部楼层

回复:为什么STM8S208写不进Flash(超过64K)

已经做好了,感觉真的是资料里给的不全,或者说是写的太繁琐,没有突出重点。
回复 支持 反对

使用道具 举报

0

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-9-3 01:24:48 | 显示全部楼层

回复:为什么STM8S208写不进Flash(超过64K)

也碰到64K后不能写的问题,能说说是怎么解决的吗?
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版