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

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

[复制链接]
sed2004-365208 提问时间:2012-11-14 11:05 /
大家好,我用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的位置。
百思不得其解,困扰我一周了,请高手解惑。
收藏 1 评论9 发布时间:2012-11-14 11:05

举报

9个回答
xieyuanfu 回答时间:2012-11-15 13:09:46

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

是不是 数据范围超出了RAM的 范围了啊 ?
sed2004-365208 回答时间:2012-11-15 13:50:47

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

我现在换成用ST提供的库函数来做。
关键代码如下:
#if 1
/************* write into flash rom *************/               
                        for(i=0;i
xieyuanfu 回答时间:2012-11-15 18:00:17

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

你的STM8S208D后缀是什么啊?
单单这样 很难看出问题的
只能说方法没错 ,不知道细节的东西了。
sed2004-365208 回答时间:2012-11-16 10:16:29

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

我的是STM8S208MB,我写到D4000H的位置就无法写进去了,然后又会回到8000H位置重新覆盖之前写的。
我用的是COSMIC,代码其实很简单,就是在RAM里直接调用Flash擦写的那三个INRAM函数。
sed2004-365208 回答时间: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 ");
 
xieyuanfu 回答时间:2012-11-17 14:43:09

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

怎么会写到D4000H的位置的呢?这是多大了啊,是不是你说错了啊?
还有当大于64K的时候 你重新写一个以64K那个地址为起始地址的看看,就是说呢分开 两个64K的来写 。
sed2004-365208 回答时间: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里跑程序,发现接收没有错。
sed2004-365208 回答时间:2012-12-27 14:53:13

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

已经做好了,感觉真的是资料里给的不全,或者说是写的太繁琐,没有突出重点。
noyesf 回答时间:2013-9-3 01:24:48

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

也碰到64K后不能写的问题,能说说是怎么解决的吗?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版