... а говоря относительно моего 32MX+UF... на стирание уходит больше минуты. Есть конечно чипы которые труться за 25сек, как в даташите написано "TYPICALY", но эт старый JEDEC, в новых чипах стирание надо контролить, у меня 2 чипа трет за ~1мин 12 сек, плюс ко всему я юзаю AT90USB162 c расширением шины адреса на AT90USB162 посредством SCI, а SCI лимитирует скорость, на него тож процессорное время тратиться, так же у меня ведеться лог критических событий и пишеться прям в EEPROM AT90USB162, так же пулятся (Data Pull) записанные данные на лету (хотел бы я посмотреть как ты это делать будешь пролифой или ваще любым мостом), плюс ко всему поддержка разных типов записи в моем картридже тож накладывает свои ограничения, а так же софт отнимает время на обновление контролов и обработку треадов, без всего этого под линуксом из консоли треться 51 секунду, пишеться от15 до 54 что кстати согласуется с даташитом, а треться так ваще пулей, ибо тру я секторами, а их на 2 чипа 70, - 0.7s*70=49s (и то учитывая что время в 0.7s на сектор минимальное, а тут вся фишка в том что эти чипы держат тему Erase While Write) у меня стоит 2 чипа соотв на 2 множим (
стр. 53 December 17, 2004 S29AL016D_00_A2:
Sector Erase Time min: 0.7 max: 15s
Chip Programming Time (Note 3) Word Mode min: 7.2s, мах: 21.6s)... Мериться тут нечем, ж..пу с пальцем сравниваем.
Добавлено позже:Так, не ссортесь. Давайте вести конструктивную беседу. Masyan'и карт я юзаю, и вижу что он проверяет запись. Проверка всегда занимает время. И то время, что оно занимает меня пока устраивает. Я сам читал датащиты на используемые плешки и поэтому знаю как должно быть. Так что, давайте все же подведем итог: кто как реализовал алго JEDEC'а. Без читерства, как есть: если ты не делаешь проверку или заточил под конкретный чип - так и скажи. Начинайтесь.
Вот выдержка из кода микропрограммы:
Bool WriteChank(U8 *mcommands)
{
U8 i,Pointer,bCCR;
U16 ptr=0;
DDRB=0x00;
Disable_interrupt();
//Write error detection config register onto ATMEGA8515/AT90USB WriteRegister(CCR,_BV(fROMEN));
//Setup DATA port to out PresetAddress(0x00,0x0A,0xAA);
WriteByte(0xAA);
PresetAddress(0x00,0x05,0x55);
WriteByte(0x55);
PresetAddress(0x00,0x0A,0xAA);
WriteByte(0x20);
PresetAddress(mcommands[1],mcommands[2],mcommands[3]);
for(i=0;i<mcommands[4];i++)
{
Usb_select_endpoint(EP_MS_OUT);
while(!Is_usb_read_enabled());
for(Pointer=0;Pointer<64;Pointer++,ptr++)
{
WriteByte(0xA0);
WriteLoByte(Usb_read_byte());
WriteHiByte(Usb_read_byte());
while(!(PINB&_BV(RDY)))
if(bCCR=ReadRegister(CCR))
StoreLastError(bCCR);
OEClock();
}
Enable_interrupt();
Usb_ack_receive_out();
}
//Exit from Bypass WriteByte(0x90);
WriteByte(0x00);
//Hardware check writed data for(Pointer=0;Pointer<64;Pointer++,ptr++)
{
//Check data if(IsLoopBack(Pointer))
{
//Error detected Usb_select_endpoint(EP_MS_IN);
while(!Is_usb_write_enabled());
Usb_write_byte(GetLastError());
return FALSE;
}
OEClock();
}
return TRUE;
}
Из кода видим я юзаю Unlock Bypass под запись, а так жа видим что ерроры трансфиряться обратно по шине...
Добавлено позже:А вообще-то непонимаю о чем спор, тут лимитирует уже скорость флешки то есть время на запись в неё... как не крути
Word Programming Time мин: 7µs макс: 210 µs
Добавлено позже:и
Byte Programming Time мин: 5 макс: 150 µs