为什么STM8S208写不进Flash(超过64K)
大家好,我用STM8S208MB来做自升级。在RAM里运行的时候,发现一个比较怪异的问题。用块写数据的时候,当数据小于64K(10000H)的时候,一切正常。当数据大于64K(10000H)的时候,就无法写进去。关键程序如下:
for (Count = 0; Count < BLOCK_SIZE; Count++)
{
*((@far u16*)StartAddress + Count) = ((u8)(Buffer));
}
如果是那个数据类型是u16,数据大于64K就无法写进去,一直停在那里。如果数据类型是u8,数据大于64K它也能写,但它写的地方不是10000H,而是8000H的位置。
百思不得其解,困扰我一周了,请高手解惑。
RE:为什么STM8S208写不进Flash(超过64K)
是不是 数据范围超出了RAM的 范围了啊 ?回复:为什么STM8S208写不进Flash(超过64K)
我现在换成用ST提供的库函数来做。关键代码如下:
#if 1
/************* write into flash rom *************/
for(i=0;i
RE:为什么STM8S208写不进Flash(超过64K)
你的STM8S208D后缀是什么啊?单单这样 很难看出问题的
只能说方法没错 ,不知道细节的东西了。
回复:为什么STM8S208写不进Flash(超过64K)
我的是STM8S208MB,我写到D4000H的位置就无法写进去了,然后又会回到8000H位置重新覆盖之前写的。我用的是COSMIC,代码其实很简单,就是在RAM里直接调用Flash擦写的那三个INRAM函数。
回复:为什么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 ");
RE:为什么STM8S208写不进Flash(超过64K)
怎么会写到D4000H的位置的呢?这是多大了啊,是不是你说错了啊?还有当大于64K的时候 你重新写一个以64K那个地址为起始地址的看看,就是说呢分开 两个64K的来写 。
回复:为什么STM8S208写不进Flash(超过64K)
是这样的,之前我发现是64K,后面改成了我上面那种方式,结果就出现了D400H(不是D4000H,写错了)无法写了。计算一下:D400H-8000H = 5400H = 21504/128 = 168块 = 21504/1024 = 21K。
测试发现,也就是在这里会停下来,用小于64的代码写,有时候会重复写到8000H去,有时候就是在D400H一直写错,非常精准。
我原来以为是通信出了错误,由于在RAM里无法查看,就去掉在RAM里运行,关闭擦写Flash动作,在ROM里跑程序,发现接收没有错。
回复:为什么STM8S208写不进Flash(超过64K)
已经做好了,感觉真的是资料里给的不全,或者说是写的太繁琐,没有突出重点。回复:为什么STM8S208写不进Flash(超过64K)
也碰到64K后不能写的问题,能说说是怎么解决的吗?
页:
[1]