6203|12

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM8L的内部eeprom(data flash) [复制链接]

 
读写时间真的有datasheet写的那么快么?

在STM8AL3188上实际测试了擦除和编程一个block的时间,使用I/O翻转方式来记录时间。示波器测量。

擦除一个BLOCK:约20ms(关不关中断都差不多)
编程一个BLOCK:约1.5秒(关不关中断都差不多)

测试代码是STM8L152的代码移植(IAR安装目录下的example中提取),请问怎么相差这么大?




此帖出自stm32/stm8论坛

最新回复

包含文件“ ”表示在当前目录下查找头文件, 表示在系统目录下查找,默认安装目录下的INC,你的情况可能是版本问题。 通常我就把头文件拷过来,用的明白。  详情 回复 发表于 2017-1-18 15:11
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
flash时钟对吗?
此帖出自stm32/stm8论坛
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

对的,STM8AL3188@16MHz。
此帖出自stm32/stm8论坛
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

4
 
更新测试结果:
擦除一个BLOCK:约3ms(关不关中断都差不多)
编程一个BLOCK:约800ms(关不关中断都差不多)
发现使用的头文件错误,本是STM8AL3188,尼玛的里面居然有个STM8AL3L88,这个1和L都是小写谁分得清!!

擦除Block的时间跟datasheet差不多了,但是编程block的时间还是差很多。继续求解!
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

5
 
再次更新测试结果:
擦除一个BLOCK:约3ms(关不关中断都差不多)
编程半个BLOCK:约4ms(关不关中断都差不多)

为什么是半个BLOCK,因为我使用的STM8AL3188是2K EEPROM = 8个BLOCK * 256字节

测试时使用的是BLOCK0,发现如果只是program BLOCK0的前128个字节,确实很快,4个ms左右就完成了,

但是如果是把整个BLOCK的256字节编程,时间就是800ms+!!!

到底怎么回事?迷惑!
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

6
 
更新测试结果:上面的帖子有点描述错误,STM8AL3188的EEPROM是8个PAGE,每页包括2个BLOCK,每个BLOCK是128字节,datasheet上说一个BLOCK的时间是4ms左右,不是一个PAGE。
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

7
 
但是问题来了:我使用STM8L151来测试时,相同的CPU主频(16MHz),相同的测试代码,发现在STM8L151上执行一次BLOCK擦除及编程操作,时间>800ms,很是郁闷,因为完全相同的代码!而且操作期间都是关闭了总中断的。
有朋友遇到过吗?
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

8
 
问题已解决,分享一下经验:
芯片的头文件如iostm***.h必须放在自己的工程目录下,而且必须使用i#include "头文件名.h",而不能使用#include <头文件名.h>,否则eeprom的擦除+编程时间将从几个ms增加到800ms+,而且IAR编译时也会产生好多的告警:
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement。
但不知道为何有这样的差异,如有了解的达人请跟帖说明,谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

9
 
tm8没用过都用的32,帮你顶下吧
此帖出自stm32/stm8论坛

点评

谢谢!也算是给还没有走弯路或是正在走弯路的同行一个经验总结,但根本的原因还是没有搞清楚。  详情 回复 发表于 2017-1-18 13:48
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

10
 
huo_hu 发表于 2017-1-18 12:22
tm8没用过都用的32,帮你顶下吧

谢谢!也算是给还没有走弯路或是正在走弯路的同行一个经验总结,但根本的原因还是没有搞清楚。
此帖出自stm32/stm8论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

11
 
包含文件“ ”表示在当前目录下查找头文件,
<>表示在系统目录下查找,默认安装目录下的INC,你的情况可能是版本问题。
通常我就把头文件拷过来,用的明白。
此帖出自stm32/stm8论坛

点评

关于这个包含是了解的。你这么一说我还真的去查找了一下,我擦,还真的是这样: 看inc里面的头文件: #define FLASH_CR1_FIX FLASH_CR1_bit.FIX #define FLASH_CR1_IE FLASH_CR1_bit.IE  详情 回复 发表于 2017-1-18 17:15
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

12
 
huo_hu 发表于 2017-1-18 15:11
包含文件“ ”表示在当前目录下查找头文件,
表示在系统目录下查找,默认安装目录下的INC,你的情况可能是 ...

关于这个包含是了解的。你这么一说我还真的去对比了一下,我擦,还真的是这样:
看inc里面的头文件:
#define FLASH_CR1_FIX            FLASH_CR1_bit.FIX
#define FLASH_CR1_IE             FLASH_CR1_bit.IE
#define FLASH_CR1_WAITM      FLASH_CR1_bit.WAITM
#define FLASH_CR1_EEPM         FLASH_CR1_bit.EEPM
.....
再看我的工程里面头文件:
#define FLASH_CR1_FIX             0x01 //FLASH_CR1_bit.FIX
#define FLASH_CR1_IE              0x02 //FLASH_CR1_bit.IE
#define FLASH_CR1_WAITM      0x04 //FLASH_CR1_bit.WAITM
#define FLASH_CR1_EEPM         0x08 //FLASH_CR1_bit.EEPM

明显上面的就是错误的,那么我的项目里面的头文件哪来的?懵逼了。。。
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

13
 
模糊的印象是:关于flash操作的文件是我从安装目录的ST外设库中移植过来的,而文件里面用的常量如FLASH_CR1_FIX在头文件里面用的是#define FLASH_CR1_FIX  FLASH_CR1_bit.FIX的形式定义的,但是找不到,所以我就按照datasheet写成了常数。但是很奇怪,除了这个寄存器,其他的寄存器都是按照常数来写的,不信可以翻inc下的其他芯片的.h文件。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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