Приставки > Картриджи / диски
мой флеш картридж для SNES
<< < (2/2)
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мин и  даже не мечтал о такой скорости
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии