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

查看: 7628|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版