Приставки > Картриджи / диски
мой флеш картридж для SNES
HardWareMan:
--- Цитата: masyanya от 20 Май 2009, 06:17:42 --- Ну вот я тока одного не понимаю, микроконтроллеры с встроенным USB стоят стока же скока и RS232 мосты, а скорости сов другие, зачем этот огород?
Например AT90USB1287 48 свободных выводов под IO и стоит 7.8$ за шт.
Или PIC18F4550 35 свободных ног под IO при цене в 8.2$ за шт... обидно господа, пролифа да силикон лабс... вот чё не сделают с усб, так обязательно мост юзается LPT или RS-232... <_<
--- Конец цитаты ---
Я с тобой полностью согласен, однако не все умеют писать свои дрова под девайс. А в остальном да.
masyanya:
Ааааааа, точна, я т уж забыл про сие мытарство.... :?
totin:
ээмм, подождите, какой огород? где скорости "совсем другие"? ну раз такое дело, давайте меряться сами знаете чем (: я точно не знаю, но насколько я помню масянин флеш карт перешивает себя около двух минут из которых 30сек на самостирание и того 90сек чисто на прошивку 4 метров. у меня на ненависном профлинке в последних версиях софта прошивка+стирание занимает 1:25 те 55 сек на прошивку. поправьте меня если я не прав, но 55 сек мне кажется меньше чем 90. и это не смотря на то что код для атмеги пока далек от совершенства. да, и насчет огородов... два контроллера на борту это не огород? а драйверы писать не огород?зачем делать то что уже сделано, чтобы потом городно сказать что я изобрел велосипед? может все делают на rs232 мостах потому то это не плохой выбор? по цене такой вариант тоже будет по крайней мере не дороже. такое вот
HardWareMan:
--- Цитата: totin от 20 Май 2009, 19:39:10 ---...у меня на ненависном профлинке в последних версиях софта прошивка+стирание занимает 1:25 те 55 сек на прошивку. поправьте меня если я не прав, но 55 сек мне кажется меньше чем 90. и это не смотря на то что код для атмеги пока далек от совершенства....
--- Конец цитаты ---
Стоп, будем последовательны.
1. 55 секунд это на 4МБ (32Мбита)?
2. Какие микросхемы флэш ты заюзал?
3. ЕМНИП, по JEDEC'у есть определенные ограничения, ты хочешь сказать ты их обошел?
4. И на какой скорости ты пролифу юзаешь?
masyanya:
--- Цитата ---да, и насчет огородов... два контроллера на борту это не огород?
--- Конец цитаты ---
Я говорил о чипах у которых ног хватает чтобы драйвить шину адреса и данных минуя другие чипы по той же цене что и одна пролифа, ты чего читать не умеешь или в домике? >:(
HardWareMan:
Так, не ссортесь. Давайте вести конструктивную беседу. Masyan'и карт я юзаю, и вижу что он проверяет запись. Проверка всегда занимает время. И то время, что оно занимает меня пока устраивает. Я сам читал датащиты на используемые плешки и поэтому знаю как должно быть. Так что, давайте все же подведем итог: кто как реализовал алго JEDEC'а. Без читерства, как есть: если ты не делаешь проверку или заточил под конкретный чип - так и скажи. Начинайтесь.
masyanya:
... а говоря относительно моего 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)... Мериться тут нечем, ж..пу с пальцем сравниваем.
Добавлено позже:
--- Цитата: HardWareMan от 21 Май 2009, 08:32:25 ---Так, не ссортесь. Давайте вести конструктивную беседу. 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
totin:
да, я ждал бурю негодования :)
masyanya:
если у тебя трется так долго то тогда дейчтвительно я прошиваюсь в лудшем случае не бычтрее. к томуже я не проверяю ничего на ошибки и получаю тут немного времени. в ранних версиях проверял но когда прошли месяцы а ошибок так ниразу и небыло я решил что можно обойтись и без проверки, темболее на космических шатлах картридж не будет применяться в жизнено важных системах.
ну а спор фактически неочем, заладил ты просто со своим огородом и я хочу сказать что другие решения может и не лучше но и не хуже, тут скорее дело вкуса. кому что больше нравится.
HardWareMan:
1. да, 4МБ (32Мбита) за 55 сек
2. я использую ST M29W320 70ns
3. даже не знаю что сказать
4. профила у меня на скорости 921600 килобит
у меня самостирается чип за 29сек, хотя по датащиту 40сек типичное и 200 максимальное.
вот так я прошиваю:
inline void wd(unsigned int data, unsigned long int addr){
DDRA = 0xff;
DDRB = 0xff;
SET_ADDR(addr);
PORTA = data;
PORTB = data >> 8;
WE0;
WE1;
DDRA = 0;
DDRB = 0;
}
inline void progBlock(){
unsigned char data_a = 0;
unsigned char data_b = 0;
unsigned int len = (uartRX() << 8 | uartRX()) >> 1;
while(len){
data_a = uartRX();
data_b = uartRX();
busy();
wd1(0xaa,0x555);
wd1(0x55,0x2aa);
wd1(0xa0,0x555);
wd2(data_a, data_b, addr);
addr++;
len--;
}
}
PS: масяня, ты злой
masyanya:
Да чёт, палку то перегнул я... :blush:
--- Цитата: totin от 21 Май 2009, 13:35:17 ---PS: масяня, ты злой
--- Конец цитаты ---
Эт точна :), эт потому что у меня велосипед без сиденья был, а ща когда и его украли, ваще убивать буду!!! :lol:
Нууууууу, шатлы не шатлы, а проверка мне нужна шоб когда собираешь тестировать проще было, сразу видно где проблема.
--- Цитата ---ну а спор фактически неочем, заладил ты просто со своим огородом и я хочу сказать что другие решения может и не лучше но и не хуже, тут скорее дело вкуса. кому что больше нравится.
--- Конец цитаты ---
Ну вот мы как раз и спорим на тему того что решения с мостами хуже или лучше, на мой взгляд хуже, потому что, хотя бы, не дает должной свободы разработчику, а в смысле достижения результата так помоему одинаково, намана чел. эт хорошо, тока заюзай ещё:
Unlock Bypass 0x555 0xAA 0x2AA 0x55 0x555 0x20
Unlock Bypass Program XXX 0xA0 PA PD
Unlock Bypass Reset XXX 0x90 XXX 0x00
ещё быстрее писать будет.
totin:
спасибо, попробую выжать ещё немного скорости
masyanya:
P.S.
Ну и кстати вот:
64SX+UPF
totin:
--- Цитата: masyanya от 22 Май 2009, 09:42:21 ---заюзай ещё:
Unlock Bypass 0x555 0xAA 0x2AA 0x55 0x555 0x20
Unlock Bypass Program XXX 0xA0 PA PD
Unlock Bypass Reset XXX 0x90 XXX 0x00
ещё быстрее писать будет.
--- Конец цитаты ---
сделал Unlock Bypass и получил ещё немного скорости в 16 битном режиме и значительный прирост около 30% в 8 битном(снес карт у меня в 8битном) сега теперь стерание + прошивка = 1мин 20сек. спасибо ещё раз за подсказку масяня. я признаться никогда датащит не читаю полностью, обычно вычитаею чего мне нужно и всё, а потом вот такие подробности неожиданно всплывают (: паразительно, помню в начале разработки в самых ранних версиях устройства на прошивку уходило порядка 15мин и даже не мечтал о такой скорости
Навигация
Перейти к полной версии