cheky77 发表于 2012-8-23 10:18:24

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

lgt中eeprom/flash写入时,未完成,会在死等吗?还有写入,删除的时间多长?

logicgreen 发表于 2012-8-23 11:04:40

不会死机。

cheky77 发表于 2012-8-23 11:38:04

logicgreen 发表于 2012-8-23 11:04 static/image/common/back.gif
不会死机。

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

logicgreen 发表于 2012-8-23 13:17:02

写EEPROM的时候硬件会HOLD住PC值,在使用者方面来说相当于一个周期,这个周期就是写EEPROM的时间周期,最短20us,最长20ms。
如果EEPROM里的资料是"FF“,那么最快写一个字节是20us左右,如果不是"FF",那么硬件要删除PAGE,最大要20ms。

zqy 发表于 2012-8-23 22:55:56

logicgreen 发表于 2012-8-23 13:17
写EEPROM的时候硬件会HOLD住PC值,在使用者方面来说相当于一个周期,这个周期就是写EEPROM的时间周期,最短 ...

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

logicgreen 发表于 2012-8-24 00:24:59

zqy 发表于 2012-8-23 22:55 static/image/common/back.gif
按这逻辑,那我只写一个字节eeprom,且这个位置又不是ff,page擦除会不会
把其他地址(同一页)的数据也 ...

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

xwkm 发表于 2012-8-30 09:52:31

能不能并行操作。我的意思就是触发CMD以后PC继续下去,然后查询标志位检测是否写完?
HOLD PC值的话。在一部分实时性的(类似SPWM逆变)的应用上可能会发生问题。

LGT 发表于 2012-8-30 15:28:49

xwkm 发表于 2012-8-30 09:52 static/image/common/back.gif
能不能并行操作。我的意思就是触发CMD以后PC继续下去,然后查询标志位检测是否写完?
HOLD PC值的话。在一 ...

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

cheky77 发表于 2012-9-1 09:49:35

LGT 发表于 2012-8-30 15:28 static/image/common/back.gif
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));
}

logicgreen 发表于 2012-9-1 20:10:51

cheky77 发表于 2012-9-1 09:49 static/image/common/back.gif
记得普通的51单片机,写eeprom时,没写入完成,程序可以继续往下跑。而;flash则会完成了之后,程序才可 ...

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

freeboyxd 发表于 2013-2-21 22:23:06

学习,为使用作准备...

ycheng2004 发表于 2013-2-21 23:40:11

cheky77 发表于 2012-9-1 09:49 static/image/common/back.gif
记得普通的51单片机,写eeprom时,没写入完成,程序可以继续往下跑。而;flash则会完成了之后,程序才可 ...

哪种51单片机可以这样?这么好
除了ATMEL和ST,请问大家还有哪些单片机带真正的EEPROM?
ATtiny13真正的EEPROM写最长3.4ms,最短1.8ms,LGT写EEPROM时间真的有点长,
2013新开发的LGT单片机有哪款是真正的EEPROM吗?
页: [1]
查看完整版本: lgt中eeprom/flash写入时,未完成,会在死等吗?