打印

请教FLASH当EEPROM

[复制链接]
7959|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2007-10-29 17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
清华大学出版的《MOTOROLA(FREESCALE)微控制器MC68HC08原理及其嵌入式应用》这本书里讲到FLASH当EEPROM操作时(用户模式,而非监控模式),程序必须位于RAM区才能成功,否则不能成功或异常复位,如果真是这样,也就没有什么实用价值,不知大家用过没有,是不是这样。。。
另外定时器没有脉冲计数功能,不懂为什么要这样设计呢?

相关帖子

沙发
xuhuadong| | 2007-10-30 09:57 | 只看该作者

有 脉冲计数

有脉冲计数,tclk线就是外部脉冲输入信号,FLASH当EEPROM任何一个单片机都是在ram执行,因为rom加高压不稳定

使用特权

评论回复
板凳
张明峰| | 2007-10-30 12:42 | 只看该作者

Flash模拟EEPROM

当且仅当Flash空间在被擦除或写入过程中,程序运行才必须在RAM(或C08系列ROM中固化的程序)运行。这部分代码是非常短的几句,不超过30字节,包含启动Flash擦写和查询编程结束状态就行。在S08内核芯片上一般做法是将代码用标准C或汇编写好放到普通的Flash空间中,在需要Flash编程时通过普通程序代码将这一小部分代码数据(看作为Flash中的常数)拷贝到RAM中,RAM可以是静态数据区,也可以是局部变量(堆栈区),然后直接跳转到RAM地址运行,并按正常子程序返回。

模拟EEPROM只是Flash编程的一个应用。实现程序现场升级(IAP)也是用这种方法,意义大着呢。

使用特权

评论回复
地板
ayb_ice|  楼主 | 2007-10-30 14:07 | 只看该作者

随便说说

C8051Fx也可以FLASH当EEPROM功能,它那就没有什么限制,我觉得做得很好,随时可以往FLASH里数据,哪怕是程序中间的某个字节,当然他有特别安全操作规范,我经常把FLASH当EEPROM使用。。。
看来FREESCALE的这方面还有待提高。。。
另外讲定时器的时候没有说可以对外部脉冲计数啊。。。

使用特权

评论回复
5
forthlab| | 2007-10-31 10:11 | 只看该作者

不要武断的贬低freescale

    虽然有很多新的CPU面世,但也不要简单的怀疑freescale的技术实力。
1)关于计数,LZ没有看文档,或者没有看懂,TPM输入时钟可以是固定频率,也可以是外部引脚,可以工作在递增、递减计数方式.....
2)关于FLASH的ISP,IAP,在flash擦除或写的时候,flash是不能当一般程序ROM的,就是LZ欣赏的c8051f的说明文档里面也有说明的:“在FLASH写/擦除操作期间,程序暂停执行”。
    有几种解决方案:
    1.代码在RAM区域执行,freescale就是这样的。
    2,用2块flash,1快擦写的时候,在另外的flash执行代码,好像sst的是这样的。
    3.程序暂停,等待flash完成擦写工作,c8051f应该是这种方式。
    这几种方式各有特点。
    我以前也觉得freescale的flash操作很麻烦,据说原来HC08的部分CPU的ROM内部带flash函数,后来的HCS08又没有了。经常要自己写flash操作代码,我还只用c,所以头痛。有一次看博客,里面有freescale工程师关于“高可靠!”的程序代码设计规范,其中有1条就是“代码内部没有任何flash操作”。主要原因是防止程序跑飞,误擦除代码或数据。
   所以freescale写烧写falsh的步骤是启动CPU,将flash操作代码下载到ram,然后写flash代码。cpu掉电后ram内的flash造作代码消失。
   所以应该理解freescale的设计理念,他是在避免编程方便但有使用风险的事。freescale很多应用是汽车电子,可靠性比编程方便更重要。
    不要简单地怀疑别人落后了!

   

使用特权

评论回复
6
ayb_ice|  楼主 | 2007-11-1 09:24 | 只看该作者

随便说说

首先声明我只是在讨论技术问题,没有贬低任何意思
1:我看HC08的一本书,始终没有说可以对外部脉冲计数,我已经看的很清楚了,而且看方框图也没有这个功能,当然它的捕获功能可以完成很多功能,可能有些型号有。。。
2:C8051Fx在写flash时是暂停所有程序执行,写完后(几个US级)立刻连续执行程序,这正是它的高明之处啊,至于可靠性,我的项目都用C8051F的FLASH当EEPROM,从来没有任何问题,当然这是因为C8051F的硬件安全措施做的好。。。
FREESCALE是有很强的技术,但并不代表它什么都好,什么都强,比如MCU的速度,比它快的大把(其实我觉得它的速度确实有点慢,3-5个总线周期的指令很多,甚至不如标准的51),ADC比它好的也有,我正是想好好搞搞FREESCALE才这样的。。。

使用特权

评论回复
7
张明峰| | 2007-11-1 09:48 | 只看该作者

没事

欢迎大家做客观公众的评论。
我所见的单片机,在Flash被编程时都是不可能运行Flash空间内的指令代码的。FSL,MCHP,SiliconLab等莫不如此,只是各家实现编程时的具体做法不同而已。
对于FSL的单片机,程序在RAM里跑时可以做到全空间的Flash编程,编程过程中CPU始终处于指令运行状态,我想这是它最重要的特性。
适用的就是最好的。不然“人比人得死,货比货得扔”

使用特权

评论回复
8
yewuyi| | 2007-11-1 21:19 | 只看该作者

张工能不能把FLASH模拟EE的方法做个总结?

大致看过MSP430的,应该用的是和C8051差不多的方法,感觉那样操作起来比较容易,但看FSL的时候,看的糊涂了……

呵呵,没仔细看下去,等着看总结。

使用特权

评论回复
9
zsp432300| | 2007-11-1 23:54 | 只看该作者

freescale单片机flash编程能力不错

1.hc08单片机有的内部有flash编程代码,有的没有。一般存储空间小的单片机内部固化有flash编程代码,处于ROM区,存储空间较大的单片机则没有。
ROM中的flash编程代码可以直接调用,无需拷贝到RAM。如果用户要使用自己编写的flash代码,则不能直接调用,需要先拷贝到RAM然后调用(在同一flash)。
2.对于有flash编程代码的单片机,存在flash被意外擦除或改写的风险。不过单片机内部有flash保护字节,可以将部分flash保护起来,大大降低程序被改写的风险,同时使部分flash在保护区外,用户程序通过调用flash编程ROM可以对这部分flash进行操作。但这样会使保护区域的程序不能在线更新。
3.最好不要将flash当EEPROM使用,选择不含flash编程ROM的单片机,程序中不要加入flash编程代码,将重要代码和数据放在保护区,其他代码放在非保护区。当需要修改程序或数据时将flash编程代码下载到RAM,然后进行擦除或编程。
4.freescale网站有很多flash编程的应用文档和源程序。

使用特权

评论回复
10
ayb_ice|  楼主 | 2007-11-2 08:16 | 只看该作者

随便说说

“最好不要将flash当EEPROM使用”
这句话听起来就是有点不舒服

使用特权

评论回复
11
forthlab| | 2007-11-2 12:45 | 只看该作者

忠言逆耳啊

随便说说,:)

使用特权

评论回复
12
ayb_ice|  楼主 | 2007-11-2 13:47 | 只看该作者

其实用也是没有什么大问题,只是讨论技术而已

这样熟悉更快

使用特权

评论回复
13
guanqiong2016| | 2016-1-6 19:39 | 只看该作者
别保护不保护了,我用MC9s08的单片机,谁给个编程代码的读写示例???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15462

帖子

34

粉丝