搜索
bottom↓
回复: 11

lgt中eeprom/flash写入时,未完成,会在死等吗?

[复制链接]

出0入0汤圆

发表于 2012-8-23 10:18:24 | 显示全部楼层 |阅读模式
lgt中eeprom/flash写入时,未完成,会在死等吗?还有写入,删除的时间多长?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-8-23 11:04:40 | 显示全部楼层
不会死机。

出0入0汤圆

 楼主| 发表于 2012-8-23 11:38:04 | 显示全部楼层
logicgreen 发表于 2012-8-23 11:04
不会死机。

我的意思是未完成写入时,会不会继续跑程序;还是在等完成了之后,再继续跑程序。而不是说死机

出0入0汤圆

发表于 2012-8-23 13:17:02 | 显示全部楼层
写EEPROM的时候硬件会HOLD住PC值,在使用者方面来说相当于一个周期,这个周期就是写EEPROM的时间周期,最短20us,最长20ms。
如果EEPROM里的资料是"FF“,那么最快写一个字节是20us左右,如果不是"FF",那么硬件要删除PAGE,最大要20ms。

出0入0汤圆

发表于 2012-8-23 22:55:56 来自手机 | 显示全部楼层
logicgreen 发表于 2012-8-23 13:17
写EEPROM的时候硬件会HOLD住PC值,在使用者方面来说相当于一个周期,这个周期就是写EEPROM的时间周期,最短 ...

按这逻辑,那我只写一个字节eeprom,且这个位置又不是ff,page擦除会不会
把其他地址(同一页)的数据也擦除?eeprom不是可以单字节操作的吗?

出0入0汤圆

发表于 2012-8-24 00:24:59 | 显示全部楼层
zqy 发表于 2012-8-23 22:55
按这逻辑,那我只写一个字节eeprom,且这个位置又不是ff,page擦除会不会
把其他地址(同一页)的数据也 ...

这个不用担心,硬件会自动完成擦除和写回的,对用户来说就是按字节写的。

出0入0汤圆

发表于 2012-8-30 09:52:31 | 显示全部楼层
能不能并行操作。我的意思就是触发CMD以后PC继续下去,然后查询标志位检测是否写完?
HOLD PC值的话。在一部分实时性的(类似SPWM逆变)的应用上可能会发生问题。

出0入0汤圆

发表于 2012-8-30 15:28:49 | 显示全部楼层
xwkm 发表于 2012-8-30 09:52
能不能并行操作。我的意思就是触发CMD以后PC继续下去,然后查询标志位检测是否写完?
HOLD PC值的话。在一 ...

08A目前不支持你所说的功能。
如果你需要实时的更新E2PROM, 可以考虑先将数据缓存到SRAM中。等到系统处理非实时任务时再去更新。
如果你的系统里没有这种非实时的任务时间, 就必须考虑到08A写E2PROM空间的最慢等待时间。

出0入0汤圆

 楼主| 发表于 2012-9-1 09:49:35 | 显示全部楼层
LGT 发表于 2012-8-30 15:28
08A目前不支持你所说的功能。
如果你需要实时的更新E2PROM, 可以考虑先将数据缓存到SRAM中。等到系统处 ...

记得普通的51单片机,写eeprom时,没写入完成,程序可以继续往下跑。而;flash则会完成了之后,程序才可以继续往下跑。


lgt则需要等待最慢20ms,之间不能执行任何代码。这样的死等限制,对于特定的功能,难以实现。


lgt的提供的demo,我还是有点疑问:
void DrvEEPROM_ProgEByte(u16 wAddr, u16 u16Len, u8 *pData)
{
        u8 sregval;
        u16 i;
        // read status register
        sregval = SREG;
        // clear global interrupt enable
        CLI();
        // wait for completion of previous write
        for(i = 0; i < u16Len; i++)
        {
                while(EECR & (1 << EEPE));既然写入完成是死等,那还有必要用查询方式来判断是否完成吗?如果判断写入未完成,又跟写入未完成时不能跑任何程序有矛盾
                // address
                EEARH = (wAddr >> 8) & 0x3;
                EEARL = (wAddr) & 0xff;
                // data
                EEDR = *pData;
                // Program Mode
                EECR = (EECR & (~DRVEEPROM_MODE_MSK));
                // write logical one to EEMWE
                // start eeprom write by setting EEWE
                asm volatile
                (
                        "sbi 0x1f, %0\n\t"                        //EECR |= (1 << EEMWE);
                        "sbi 0x1f, %1\n\t"                        //EECR |= (1 << EEWE);
                        ::"M"(EEMPE),"M"(EEPE)
                );                        程序在此等待写入完成吗?
                pData++;
                wAddr++;
        }
        //
        SREG = sregval;
        // wait for completion of This write
        while(EECR & (1 << EEPE));
}

出0入0汤圆

发表于 2012-9-1 20:10:51 | 显示全部楼层
cheky77 发表于 2012-9-1 09:49
记得普通的51单片机,写eeprom时,没写入完成,程序可以继续往下跑。而;flash则会完成了之后,程序才可 ...

查询是延续AVR的做法,实际上和加两个nop一回事,pc没有增加,要等eeprom写完后才会释放的。

出0入0汤圆

发表于 2013-2-21 22:23:06 | 显示全部楼层
学习,为使用作准备...

出0入30汤圆

发表于 2013-2-21 23:40:11 | 显示全部楼层
cheky77 发表于 2012-9-1 09:49
记得普通的51单片机,写eeprom时,没写入完成,程序可以继续往下跑。而;flash则会完成了之后,程序才可 ...


哪种51单片机可以这样?这么好
除了ATMEL和ST,请问大家还有哪些单片机带真正的EEPROM?
ATtiny13真正的EEPROM写最长3.4ms,最短1.8ms,LGT写EEPROM时间真的有点长,
2013新开发的LGT单片机有哪款是真正的EEPROM吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 05:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表