leonvn Могу предложить свою доработанную версию Uniflash

leonvn
Могу предложить свою доработанную версию Uniflash (я её обозначил 1.41к). Собственно и дорабатывал для включения поддержки W39V080A(PZ) в сентябре 2007
Листинг WINBOND.PAS:


Unit Winbond; { Unit to communicate with Winbond chips }
Interface

Implementation

Uses Flash, GenFlash, Tools;

Procedure WbSecErase( SAddr : LongInt );Far; {v1.29}
Var
Attempt,
X        : Byte;
TimeOut  : Word;

Begin
 Attempt := 0;
 Repeat
  FlashCmd( $80 );      {Erase setup}
  Flash_Write($5555,$AA);
  Flash_Write($2AAA,$55);
  Flash_Write(SAddr,$50); {Erase sector containing address SAddr}

  TimeOut:=25000;
  X:=Flash_Read(SAddr); {v1.24 Toggle bit method}
  while ((X and $40) <> (Flash_Read(SAddr) and $40)) and (TimeOut>0) do
   begin
     X:=Flash_Read(SAddr);
     Wait(1000);
     Dec(TimeOut);
   end;

  Inc( Attempt );
  FlashCmd( $F0 ); {Reset}
 Until ( Attempt > 3 ) or ( TimeOut>0 );
 If TimeOut>0 then FlashError := 3; {erasing error}
End;

Procedure WbSecEraseFWH( SAddr: LongInt ); Far; {W39V040FA} {v1.29}
begin
  {Unprotect}
  FOMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10,
   FIMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10) and $F8);
  WbSecErase(SAddr);
  {Protect}
  FOMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10,
   FIMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10) or $01);
end;

Procedure WbProtectSecProg( Pos, Data : LongInt ); Far; {W39V040FA} {v1.29} {W39V080(F)A} {v1.41k}
begin
  {Unprotect}
  FOMemB(Pos and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10,
   FIMemB(Pos and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10) and $F8);
  AMDSecProg(Pos,Data);
  {Protect}
  FOMemB(Pos and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10,
   FIMemB(Pos and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10) or $01);
end;

Procedure WbProtectSecErase( SAddr: LongInt ); Far; {W39V080(F)A} {v1.41k}
begin
  {Unprotect}
  FOMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10,
   FIMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10) and $F8);
  AMDSecErase(SAddr);
  {Protect}
  FOMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10,
   FIMemB(SAddr and $FFFF0000+$FFC00002-LongInt(CurCInfo.Size) shl 10) or $01);
end;

Function WBIdChip( DevId : Byte; Var CInfo : ChipInfo ) : Boolean; Far;
Begin
 WBIdChip := False;
 With CInfo do
  Begin
   {Common info for some chips v1.21}
   Flags  := 1;   {page mode}
   PgSize := 128; {page size}
   Progr  := GenPageProgB;
   Case DevId of
    $C8 : Begin
           Name := ConstPtr( 'W29x512/5V series' );
           Size := 64;
          End;
    $C1 : Begin {W29EE011, W29C010, W29C010M, W29C011A, W29EE012}
           Name := ConstPtr( 'W29x010/011/012/5V series' );
           Size := 128;
          End;
    $45 : Begin
           {note: 2 write-protectable boot blocks}
           Name := ConstPtr( 'W29C020(C)/022/5V' );
           Size := 256;
          End;
    $46 : Begin {v1.21}
           {note: 2 write-protectable boot blocks}
           Name := ConstPtr( 'W29C040/043/5V' );
           PgSize := 256; {page size}
           Size := 512;
          End;
    $38 : Begin {v1.29}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := WbSecErase;
           Sectors[ 0, 0 ] := 16; {16 x 4k}
           Sectors[ 0, 1 ] := 32;
           Size := 64;
           Name := ConstPtr( 'W39L512/3.3V' );
          End;
    $A1,
    $31 : Begin {v1.29}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := WbSecErase;
           Sectors[ 0, 0 ] := 32; {32 x 4k}
           Sectors[ 0, 1 ] := 32;
           Size := 128;
           case DevId of
            $A1: Name := ConstPtr( 'W39F010/5V' );
            $31: Name := ConstPtr( 'W39L010/3.3V' );
           end;
          End;
    $B5 : Begin {v1.29}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := WbSecErase;
           Sectors[ 0, 0 ] := 64; {64 x 4k}
           Sectors[ 0, 1 ] := 32;
           Size := 256;
           Name := ConstPtr( 'W39L020/3.3V' );
          End;
    $B6 : Begin {v1.29}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := WbSecErase;
           Sectors[ 0, 0 ] := 128; {128 x 4k}
           Sectors[ 0, 1 ] := 32;
           Size := 512;
           Name := ConstPtr( 'W39L040/3.3V' );
          End;
    $D6 : Begin {v1.39}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := AMDSecErase;
           Sectors[ 0, 0 ] := 8; {8 x 64k}
           Sectors[ 0, 1 ] := 512;
           Size := 512;
           Name := ConstPtr( 'W39L040A/3.3V' );
          End;
    $3D : Begin {v1.39}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := WbSecErase;
           Sectors[ 0, 0 ] := 128; {128 x 4k}
           Sectors[ 0, 1 ] := 32;
           Size := 512;
           Name := ConstPtr( 'W39V040A/3.3V (LPC)' );
          End;
    $34 : Begin {v1.29}
           Flags  := 0;   {sector mode}
           Progr  := WbProtectSecProg;
           Erase := WbSecEraseFWH;
           Sectors[ 0, 0 ] := 128; {128 x 4k}
           Sectors[ 0, 1 ] := 32;
           Size := 512;
           Name := ConstPtr( 'W39V040FA/3.3V (Firmware Hub)' );
          End;
    $8C : Begin {v1.29}
           Flags  := 2;   {bulk erase}
           Progr  := AMDSecProg;
           Erase := AMDBulkErase;
           Size := 256;
           Name := ConstPtr( 'W49F020/5V' );
          End;
    $0B : Begin {v1.21}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := AMDSecErase;
           Sectors[ 0, 0 ] := 1;  {1 x 128k}
           Sectors[ 0, 1 ] := 1024;
           Sectors[ 1, 0 ] := 1;  {1 x 96k}
           Sectors[ 1, 1 ] := 768;
           Sectors[ 2, 0 ] := 2;  {2 x 8k}
           Sectors[ 2, 1 ] := 64;
           Sectors[ 3, 0 ] := 1;  {1 x 16k}
           Sectors[ 3, 1 ] := 128;
           Size := 256;
           Name := ConstPtr( 'W49F002U/5V' );
          End;
    $B0,
    $32 : Begin {v1.21}
           Flags  := 0;   {sector mode}
           Progr  := AMDSecProg;
           Erase := AMDSecErase;
           Sectors[ 0, 0 ] := 3;  {3 x 64k}
           Sectors[ 0, 1 ] := 512;
           Sectors[ 1, 0 ] := 1;  {1 x 32k}
           Sectors[ 1, 1 ] := 256;
           Sectors[ 2, 0 ] := 2;  {2 x 8k}
           Sectors[ 2, 1 ] := 64;
           Sectors[ 3, 0 ] := 1;  {1 x 16k}
           Sectors[ 3, 1 ] := 128;
           Size := 256;
           case DevID of
            $B0: Name := ConstPtr( 'W49V002(A)/3.3V (LPC)' );
            $32: Name := ConstPtr( 'W49V002F(A)/3.3V (Firmware Hub)' );
           end;
          End;
    $D0 : Begin {v1.41k}
           Flags  := 0;   {sector mode}
           PgSize := 65536;
           Progr  := WbProtectSecProg;
           Erase  := WbProtectSecErase;
           Sectors[ 0, 0 ] := 16; {16 x 64k}
           Sectors[ 0, 1 ] := 1;
           Size := 1024;
           Name := ConstPtr( 'W39V080A/3.3V' );
          End;
    else Exit;
   End;
  End;
 CInfo.Manuf := ConstPtr( 'Winbond' );
 WBIdChip := True;
End;

Begin
 RegisterFlashManu( $DA, WBIdChip );
End.

Кроме того при компиляции возникли проблемы с интерфейсом проги... Короче функцию
{function _ReadKey:Char; off v1.41k} {add v1.23}
оключил. Но это про экзэшник.
Могу выслать на почту или FTP

runiflash
  • "Массивчик" данных SPD находится в ЕПРОМ на модуле
  • Привет всем runiflash `ерам! Тема интересная, но
  • 2 Cyrix. Вот темка Выручает:)
  • Господа, подскажите почему Uniflash не хочет нормально шить
  • Root да, в реале.
  • обнаружил серьезную багу в Uniflash 1.40&URE1.41/1.42: на MSI K7D
  • Тема интереснейшая...
  • savely_s Скинул...
  • Кстати - у ivp есть KT7A.
  • То есть снимать лучше самим UniFlash? Тестить уже
  • Uniflash не пашет на KT7A & Co
  • Все понял, модели напишу/анкноун уберу (едит)
  • Мои выкладки были не совсем правильно
  • В копилку (если надо): Материнская плата ASUS A8N-E (чипсет
  • Можно внести посильный вклад в общее дело?
  • ECS RS482-M RS482 (CPU-PCI от ATI, остальные -
  • Просьба не воспринимать етот пост как "понт сцылками"
  • VIA c3m266-l: VT8623 Rev. 00 VEN_1106 DEV_3123 SUBSYS_00000000
  • вспомнил что же за матери Uniflash - не
  • Подсоединил тут Jetway K8T8AS (K8T800Pro/VT8237). U1.40 опознает чипсет
  • и про MSI не забудьте
  • apple_rom там надо будет в специфических типах
  • >Uniflash 1.40 при запуске выдает "PCI chipset: (1022,1100,00)+(10DE,0261,A2)" Отлично,
  • А подружите с 6100, плз! :) Имеется Foxconn
  • rd480 интересен? :)
  • Все эти ссылки (точней - много больше) у
  • по поводу PCI ID: http://pciids.sourceforge.net/ http://members.datafast.net.au/~dft0802/downloads/pcidevs.txt в этих ресурсах уже есть
  • Далее идет кусок не относящийся конкретно к прошивке,
  • apple_rom, к сожалению, виндовс уже давно не пользуюсь. Гм.
  • Продолжим. Дальше идет детект южников. Смысл последовательности понятен
  • По сему поводу имеется такое: HiNT HB1 Zero-Clock-Latency
  • Смотреть можно чем угодно, даже в свойствах винды
  • P.S. apple_rom , спасибо что начал эту
  • За название респект :) run I flash -
  • apple_rom - Подскажи пожалуйста, "поделиться айдишниками вашего железа"