Programmering av spi flash via lpt-port. BIOS-firmware via SPI-gränssnitt

Programmerare för BIOS-chip moderkort, bärbara datorer, DVD-skivor, grafikkort, etc. 24 EEPROM och 25 SPI FLASH på CH341A via USB

USB miniprogrammerare CH341A används för programmering av BIOS-chips för datormoderkort, bärbara datorer, grafikkort, multimediaspelare, TV-minne, LCD-skärmar, routrar, spel konsoler, satellitmottagare, T2-mottagare, 24 EEPROM, 25 SPI FLASH, etc. Programmeraren är något större i storlek än en flash-enhet och är monterad på USB-chip buss konvertera chip CH341A.

P/S-bygeln fungerar som en lägesomkopplare för CH341A-kretsen som en USB-omvandlare > Parallell port(Paralell) eller USB > Seriell port. Används med programmerare programvara vilket kräver att CH341A fungerar som en USB > Parallellomvandlare, därför måste bygeln installeras och kontakterna stängas.

CH341A-programmeraren har drivrutiner och operativsystem Windows-system 98, Windows ME, Windows 2000, Windows XP, Windows Vista och Windows 7.

Installation av drivrutiner. För att börja använda programmeraren måste du först ansluta den till USB uttag dator är det möjligt även utan ett chip installerat i uttaget. Om programmeraren arbetar och med USB-kontakt allt är i sin ordning på datorn, då ska lysdioden på programmerarens hölje tändas, vilket indikerar att strömmen är tillförd, och din dator kommer att avge ett ljud som meddelar dig att en ny USB-enhet är insatt. Efter det operativ system bör börja söka efter drivrutiner och som ett resultat kommer den med största sannolikhet INTE att upptäcka dem. Inget fel med det. Att installera programmeringsdrivrutinen är samma som för alla USB-enheter. Vi kommer att göra allt själva, som de säger, "för hand." Tryck på kombinationen Vinn nycklar+ Pausa eller bara öppna Enhetshanteraren. I listan över enheter för okänd enhet ange sökvägen till drivrutinen (packa upp dem i förväg från arkivet, som kan laddas ner nedan på sidan), detta ska vara en fil ch341wdm.inf. Det andra sättet att installera drivrutinen är att helt enkelt köra filen ch341par.exe med administratörsrättigheter och drivrutinen installerar sig själv. Om drivrutinen är korrekt installerad kan du fortsätta med att programmera chipsen.

Installera chipet i programmeraren. Nödvändigtvis! Vi tar ut programmeraren från USB-kontakt dator. Om du programmerar mikrokretsen på ZIF-programmeringspanelen måste du lyfta låshandtaget för att öppna skårorna för att installera mikrokretsen. Det är nödvändigt att koppla bort chippet som du ska programmera från den slutliga enheten (ta bort det från moderkortet, lossa det från den bärbara datorn, etc.) och installera chippet enligt nyckeln i programmerarens kortplatser (den placeringen av nyckeln måste sammanfalla med markeringen nära uttaget på programmeraren, där det står 25xx eller 24xx). Sedan ska du sänka låshandtaget för att fixera spånan i blocket. Om du behöver programmera 25-seriens mikrokretsar i ett SOP8- eller SOP16-paket, så har programmeringskortet en kontaktplatta för dessa typer av paket. Du kan ansluta mikrokretsen till kontaktdynan antingen genom att löda eller genom att försiktigt säkra mikrokretsens ben mekaniskt (tryck med en plastkrokodil eller klädnypa). När chippet är installerat ansluter du programmeraren med chippet ombord igen till datorn i USB-porten och kör programmet CH341A.exe. Vi hör ljudet USB-anslutningar enhet och glädjas åt det framgångsrika första steget.

Hur man programmerar chips. Det är här det roliga börjar. Jag kommer inte att beskriva hur man använder programmet, men kommer att rekommendera att titta på flera videoinstruktioner för att arbeta med dessa programmerare. Videoinstruktioner kan ses nedan på den här sidan.

Anteckning 1: Programmeraren blinkar marker ganska snabbt, men vissa typer av marker är lite långsamma. Allt beror på chipets volym och dess typ.

Programmeringskrets:

Till exempel, här är bara några av de typer av chips som stöds:

  • ATMEL
    AT25DF041A, AT25DF321, AT25F004, AT25F512A, AT25F2048, AT25F4096, AT25F1024A, AT25FS010 4
  • EON
    EN25B05, EN25P05, EN25B10, EN25P10, EN25BF20, EN25P20, EN25F20, EN25B40, EN25P40, EN25F40 P32, EN25B64, EN25P64
  • Excel Semiconductor Inc
    ES25P10, ES25P20, ES25P40, ES25P80, ES25P16, ES25P32
  • ST
    M25P05A, M25P10A, M25P20, M25P40, M25P80, M25P16, M25P32, M25P64, M25PE10, M25PE20 PE80, M45PE16, M45PE32
  • MXIC
    MX25L512, MX25L1005, MX25L2005, MX25L4005, MX25L8005, MX25L1605, MX25L3205, MX25L6405, MX25L6445, MX25L640)
  • NexFlash
    NX25P80, NX25P16, NX25P32
  • Chingis Technology Corporation
    Pm25LV512, Pm25LV010, Pm25LV020, Pm25LV040, Pm25LV080, Pm25LV016, Pm25LV032, Pm25LV064
  • Saifun Semiconductors
    SA25F005, SA25F010, SA25F020, SA25F040, SA25F080, SA25F160, SA25F320
  • WINBOND
    W25P10, W25X10, W25Q10, W25P20, W25X20, W25Q20, W25P40, W25X40, W25Q40, W25P80, W25X80, W25Q80, W25P16, W25X32, W25X32, W25X16, W25X16, W25X16, W25X16, W25X16, W25X16, W25X16, W25X16, W25X40, W25Q40, W25P80, W25P64, W25X64, W25Q64

Och andra. Mer full lista titta på det här fotot.

Anteckning 2: Av personlig erfarenhet, även om mikrokretsen du behöver inte finns i listan över de som ska blinka, eller om programmet inte automatiskt kan bestämma typen av din mikrokrets korrekt, kan du manuellt välja en liknande med samma mängd minne och försöka flasha det. Vanligtvis fungerar det i 99% av fallen.

Anmärkning 3: Bland de flesta frekventa haverier Programmeraren stöter vanligtvis på en "avgång" av stabilisatorn på grund av 3,3V-strömförsörjningen (vanligtvis en liten mikrokrets i 1117-serien). I det här fallet slutar programmeraren att upptäcka mikrokretsarna som är insatta i uttaget och skriv-/läsprocessen varar nästan en evighet. Stabilisatorn brinner ut vid felaktig installation av mikrokretsar i uttaget utan att observera polariteten, såväl som vid installation av defekta mikrokretsar. För att återställa programmerarens funktionalitet är det nödvändigt att byta ut strömstabilisatorns mikrokrets.

För att arbeta med plana (SMD) mikrokretsar kan du behöva adaptrar (adaptrar) TSU-D08/SO08-150 för 24xx och 93xx marker eller DIP08/SO08-208 för 25xx marker:

Adapter-klädnypa för blinkande chips UTAN LÖDNING. Med denna programmerare är det mycket bekvämt att använda en klädnypaadapter för att flasha BIOS-chips UTAN AVSÖLDNING. Det är mycket bekvämt att använda en adapter i de fall där det inte är möjligt att försiktigt lossa mikrokretsen utan att skada intilliggande delar och kontakter på kortet. Men i vissa fall stör strömkretsarna för mikrokretsarna som finns på kortet till din utrustning och programmeraren kan inte driva mikrokretsarna. I det här fallet är firmwareprocessen utan att löda mikrokretsen omöjlig.

Du kan beställa programmeraren i vår butik med leverans i hela Ukraina. Leveranstiden till din stad är 2-3 dagar. Skickas på betalningsdagen. Kostnaden för programmeraren och utrustningen anges i tabellen. Betalning med PrivatBank-kort eller WebMoney (WMZ). Som du kan se i slutet av denna sida.

Prislista för programmerare:

Namn, foto

Utrustning

Prislista för tillbehör:

Namn, foto

Utrustning

Du kan också titta på videoinstruktioner för programmerare i den här serien:

Programmeringsmjukvara:
  • Drivrutin för programmerare: CH341PAR_drivers.rar
  • RS232 port drivrutin:
Under nästa rengöring stängdes förlängningssladden som den fungerande systemenheten och monitorn var anslutna till av misstag. Systemenhet innefattar:
  • moderkort - ASRock B75 Pro 3
  • processor - Intel core i5-3570
  • strömförsörjning - Corsair CX750M
Efter att ha slagit på den började systemenheten avge fem otäcka gnisslor, vilket verkar motsvara ett processorfel. Processorn, att döma av Yandex.Market, är det här ögonblicket kostar från 11 000 rubel. Det är ganska dyrt att köpa, men du vill inte ha en som är billig men svag. I allmänhet var jag lite rädd...

Jag sökte igenom Internet och fick reda på att den exakta orsaken till felet kan vara helt annorlunda. Detta gav mig lite hopp. Men vi måste på något sätt hitta just detta skäl.

Först och främst ansluter jag en annan gammal strömkälla - datorn startar inte.

Jag fick med mig en bildator hem för ytterligare kontroller. Förening:

Det är bra att komponenterna visade sig vara utbytbara.

Jag drog ut processorn ur bildatorn och satte in den i hemdatorn – datorn startar inte. Men det fanns hopp om att processorn fortfarande var intakt, och moderkortet, som är lite billigare, var trasigt (även om nya med andra styrkretsar än H61 och H67 är en bristvara).

Egentligen programmering

Det är bra att BIOS-chippet inte är lödat, utan på ett vanligt DIP-8-uttag. Jag har ingen programmerare, att beställa från Kina och vänta en månad är inget alternativ. Jag bestämde mig för att göra en programmerare från min frus bärbara dator och existerande Arduino Nano. Jag grävde runt på Internet... För det mesta överallt laddas firmware upp via COM-porten, men jag bestämde mig för att flasha den från ett minneskort (det verkar vara mycket snabbare på det här sättet).

Jag skissade upp kopplingsschemat:

Jag monterade allt på en brödbräda:

Typen och storleken på minneskortet, metoden för att formatera det och filnamnet måste överensstämma med kraven i Arduino SD-biblioteket.

Till att börja med skissade jag en skiss som läser innehållet i SPI Flash och skriver det till en fil på ett minneskort, samtidigt som jag beräknar checksumman med metoden Checksum-32, d.v.s. enkel summering.

ReadFlash_WriteSD.ino

#omfatta #define Flash_CS 9 #define SD_CS 10 #define FILNAMN "BIOS.ROM" Fil minFil; SPIFlash flash(Flash_CS); void setup() ( Serial.begin(115200); while (!Serial) () // Väntar på anslutning serieport// Initierar SD-kortet Serial.println("Initierar SD-kort..."); if (!SD.begin(SD_CS)) ( Serial.println("Initialisering SD-kort misslyckades!"); return; ) Serial.println("Initialisering klar."); //Radera gammal fil, om det finns Serial.print(FILENAME); if (SD.exists(FILENAME)) ( Serial.println(" finns, tar bort..."); SD.remove(FILNAMN); ) else ( Serial.println(" existerar inte."); ) // Skapa en fil och öppna den för att skriva Serial.print("Skapar "); Serial.println(..."); println("Initialiserar SPI Flash..."); // Läs/skriv i block/sidor på 256 byte per databuffer Checksum (32 bitar) uint32_t checkSum = 0 för (int page = 0; page< maxPage; page++) { // Выводим прогресс работы if ((page % 1000) == 0) { Serial.print(page + 1); Serial.print("/"); Serial.println(maxPage); } // Читаем страницу SPI Flash flash.readByteArray(page, 0, &data_buffer, 256); // Записываем блок в файл на карте памяти myFile.write(data_buffer, 256); // Обновляем контрольную сумму for (int i = 0; i < 256; i++) { checkSum += data_buffer[i]; } } // Закрываем файл на карте памяти myFile.close(); // Выводим контрольную сумму Serial.print("Checksum-32: 0x"); Serial.println(checkSum, HEX); Serial.println("Done."); } else { // Если файл не создался, то выводим сообщение об ошибке Serial.println("Error creating "); Serial.println(FILENAME); } } void loop() { // Пустой цикл }


Jag körde skissen, jämförde den resulterande filen med den ursprungliga BIOS - det visade sig vara cirka 140 000 byte som inte matchade.

ReadSD_WriteFlash.ino

/* SPI-Flash-anslutning: CS - D9 MOSI - D11 MISO - D12 CLK - D13 SD-Card Shield-anslutning: CS - D10 MOSI - D11 MISO - D12 CLK - D13 */ #include #omfatta #define Flash_CS 9 #define SD_CS 10 #define FILNAMN "B75PRO31.90" Fil minFil; SPIFlash flash(Flash_CS); void setup() ( Serial.begin(115200); while (!Serial) () // Väntar på att serieporten ska anslutas // Initierar SD-kortet Serial.println("Initierar SD-kort..."); om ( !SD. begin(SD_CS)) (Serial.println("Initialisering SD-kort misslyckades!"); return; ) Serial.println("Initiering klar." if (!SD.exists(FILENAME)) (Serial.print (FILENAME) ; Serial.println(" finns inte.") // Öppna filen för att läsa Serial.print("); ."); myFile = SD.open(FILENAME, FILE_READ); // Om vi ​​lyckades öppna filen kommer vi att läsa från den if (myFile) ( Serial.print("File "); Serial.print(FILENAME) ; ; ; ; ( Serial.println("Chip raderat. "); ) else ( Serial.println("Fel vid radering av chip."); return; ) // Läs/skriv i block/sidor om 256 byte varje uint8_t data_buffer; sidor uint32_t maxPage = flash.getMaxPage(); // Checksumma (32 bitar) uint32_t checkSum = 0; för (int sida = 0; sida< maxPage; page++) { // Выводим прогресс работы if ((page % 1000) == 0) { Serial.print(page + 1); Serial.print("/"); Serial.println(maxPage); } // Читаем блок с карты памяти myFile.read(data_buffer, 256); // Записываем блок в страницу SPI Flash flash.writeByteArray(page, 0, &data_buffer, 256); // Обновляем контрольную сумму for (int i = 0; i < 256; i++) { checkSum += data_buffer[i]; } } // Закрываем файл на карте памяти myFile.close(); // Выводим контрольную сумму Serial.print("Checksum-32: 0x"); Serial.println(checkSum, HEX); Serial.println("Done."); } else { // Если файл не открылся - выводим сообщение об ошибке Serial.print("Error opening "); Serial.println(FILENAME); } } void loop() { // Пустой цикл }


Jag körde den, väntade, skissen gav en kontrollsumma, den stämde kontrollsumma originalfil. Men detta är en kontrollsumma av filen på minneskortet. Jag behöver en kontrollsumma av innehållet i SPI Flash.

Det var möjligt att använda den första skissen, men jag skrev en tredje, som bara beräknar kontrollsumman för SPI Flash-innehållet med samma algoritm.

ChecksumFlash.ino

/* SPI-Flash-anslutning: CS - D9 MOSI - D11 MISO - D12 CLK - D13 */ #include #define Flash_CS 9 SPIFlash flash(Flash_CS); void setup() ( Serial.begin(115200); while (!Serial) () // Vänta tills serieporten ansluts // Denna kod behövs för att SD-kortet inte ska störa pinMode(10, OUTPUT); digitalWrite (10, HIGH); // Initializing SPI Flash Serial.println("Initializing SPI Flash..."); / Checksum (32 bitar) uint32_t checkSum = 0 för (int page = 0; page< maxPage; page++) { // Выводим прогресс работы if ((page % 1000) == 0) { Serial.print(page + 1); Serial.print("/"); Serial.println(maxPage); } // Читаем страницу SPI Flash flash.readByteArray(page, 0, &data_buffer, 256); // Обновляем контрольную сумму for (int i = 0; i < 256; i++) { checkSum += data_buffer[i]; } } // Выводим контрольную сумму Serial.print("Checksum-32: 0x"); Serial.println(checkSum, HEX); Serial.println("Done."); } void loop() { // Пустой цикл }


SPI Flash-kontrollsumman matchar kontrollsumman för originalfilen.

Efter att ha satt in det flashade BIOS-chippet i hemdator- han förtjänade det framgångsrikt.

I miljön Arduino IDE du måste installera SPIFlash-biblioteket genom bibliotekshantering.

Kontrollsumman beräknades med hjälp av HXD HEX-editorn.

PS: Från början använde jag den här som en SD-modul:

Men det fanns ofta fel med det, SD-kortet initierades inte. Det hjälpte till att "varma" återansluta själva SD-kortet när Arduino var ansluten till datorn.

PPS: Istället för motstånd försökte jag ansluta en dubbelriktad signalomvandlare:

Men upplägget fungerade inte med honom.

För inte så länge sedan hände en dålig sak med mig. Det var nödvändigt att uppdatera BIOS på moderkortet, men ett fel inträffade under firmwareuppdateringsprocessen, systemet frös och slutade svara på några kommandon. Efter tvång tvingad omstart datorn slog på, vände kylarna, men ingenting visades på skärmen och det fanns inga ljudsignaler. På ansiktet BIOS korruption vid inspelning.

Lite bakgrund:

Moderlig ASUS-kort Commando, utan det nu fashionabla Dual BIOS. Endast Boot Block– ett litet område av BIOS, som inte påverkas av skrivning, vilket gör det möjligt att initiera, om nödvändigt minimiuppsättning komponenter som behövs för att slå på datorn, producera BIOS-sökningflyttbara media. Vanligtvis är en diskett- eller flashenhet med en firmwarefil som döpts om till AMIBOOT.ROM (beroende på BIOS och moderkort, mer exakt skrivet i instruktionerna för kortet), eller en CD med drivrutiner från paketet. Efter att ha hittat en lämplig fil kommer startblocket att skriva den till BIOS och, om allt gick korrekt, kommer datorn att komma tillbaka till liv efter omstart. Inget dåligt trick, det hjälpte mig flera gånger, men I detta fall det fungerade inte, tydligen var även bootblocket skadat.

Jag var tvungen att leta efter andra lösningar. Eftersom jag inte hade något verktyg i min arsenal lödstation och en stationär programmerare för olika eeproms var jag tvungen att leta efter fler tillgängliga lösningar. När jag undersökte brädan hittade jag en liten kontakt på den SPI_J1, och flashminneschippet är bara med SPI-gränssnitt ohm En sökning på Internet visade att det finns ganska anständiga fabriksenheter och en hel del hemmagjorda produkter för att blinka SPI-chips via USB (jag pratar inte ens om universella programmerare med SPI-stöd, det säger sig självt). Sant, sök efter lokala butiker, SC och forum, till skillnad från Google, gav ingenting, och jag ville verkligen inte beställa och vänta en månad.

Lite mer letande, och här är det, lösningen - från den tjeckiska kamraten (på tjeckiska) om en extremt enkel programmerare och mjukvara för den för att blinka flashminneschips med ett SPI-gränssnitt! Inget komplicerat, ett minimum av komponenter.

Tekniskt sett är detta en mycket enkel metod, och kräver endast en grundläggande förståelse av kretsdesign, förmågan att löda ett par ledningar och använda kommandorad(cmd). Men om du inte är säker på dina förmågor är det bättre att inte ta risker. Dessutom kan du alltid fråga en vän som är vänlig med en lödkolv.

Montering av enheten

För montering behöver vi:

  • 1 DB25P-kontakt, kan skäras från onödig skrivarsladd
  • 4 saker. motstånd av 150 Ohm
  • 1 någon Elektrolytkondensator kapacitet 100 µF eller mer och driftspänning vid 6,3 V eller mer (behövs när den drivs från ett nätaggregat)
  • Bit platt tåg Med IDC 10-polig kontakt (det är idealiskt om det finns en SPI-kontakt på kortet)
  • Plugg molex(Hur då hårddiskar ATA), eller CR2032 batteriuttag

Det finns inget som saknas, allt finns i en hög med skräp eller för slantar i vilken radiobutik som helst. I värsta fall, du kan försöka klara dig med bara några bitar av tråd, koppla kontakterna från SPI direkt till LPT, men i det här fallet måste du vara extremt försiktig och det är svårt att garantera att inspelningen är korrekt.

SPIPGM-programmeraren kan även användas för flashminneschips med driftspänning 1,8 volt. Författaren använder för detta ytterligare modul(en sorts adapter), som är ansluten till huvudmodulen och består av ytterligare motstånd för spänningsdämpning och ett förstärkningssteg på BC547-transistorer för chipets utsignal (kretsar på författarens webbplatser på länken ovan). Nedan är en anpassning av anslutningsschemat, omedelbart utformat för att fungera med 1,8V-chips. För att få en matningsspänning på 1,8 volt används en spänningsdelare (grå motstånd i diagrammet, helst 1/4 Watt), delaren kan om så önskas omvandlas till andra värden (jag anger alternativen 10 och 12) Ohm, eller 100 och 120 Ohm), och även bättre ersatt av en lämplig DC-DC omvandlare(till exempel TLV70018). Alla dioder, de behövs för att minimera fel och i princip kan du klara dig utan dem.


Vi kommer att ansluta programmeraren inte till chippet, utan till kontakten SPI_J1.

Om kontakten är 7-polig, anslut sedan till den enligt följande:


1. -> strömförsörjning +3,3v
2. -> jord från nätaggregat och stift 18 till LPT
3. -> motstånd -> LPT 7
4. -> motstånd -> LPT 8
5. -> motstånd -> LPT 10
6. -> motstånd -> LPT 9

Vissa moderkort har också 9-stiftskontakter, där anslutningsdiagrammet är något annorlunda:


Det som är bra med DB25P-kontakten är att du får plats med alla nödvändiga delar inuti den. Det är lämpligt att använda kortast möjliga kabellängd, annars uppstår inspelningsfel. Det skulle vara en bra idé att täcka ledningarna med en skärm, eller antennkabel, eller helt enkelt genom att slå in den i folie från en chokladkaka, utan att glömma att ansluta skärmen till jord (GND).


När den drivs av ett batteri kan kondensatorn utelämnas. Personligen tog jag strömförsörjningsbussen från +5 ( röd tråd), anslut till den genom kontakten molex och släcka spänningen med dioder till ~3,3v (två eller tre dioder räcker).

Strömförsörjningen är fortfarande mer pålitlig än batteriet. Att ha en separat strömförsörjning kan matas direkt från +3.3-bussen ( orange ATX-kontaktkabel). För att starta strömförsörjningen utan dator måste du stänga grön Och svart ledningar.

Komplett enhet:


SPIPGM-program

Nu kan du gå vidare till programvaran.

Programmet stödjer Ett stort antal chips (fullständig lista i filen Readme.txt) och enligt författaren fungerar det snabbare än analoger. Du kan ladda ner den senaste versionen från författarens webbplats eller härifrån:

Projektet utvecklas förresten fortfarande än i dag. Författaren lägger ofta upp uppdaterade versioner av programmet med information om nya marker, förbättringar och korrigeringar.

Arkivet innehåller följande filer:

SPIPGM körbar fil för Linux

SPIPGM.EXE – körbar fil för DOS/Win9x

SPIPGMW.EXE – körbar fil för Win9x/NT/2k/XP/Vista/7 ( bara x32, inget x64-stöd)

IOPERM.DLL – bibliotek för lågnivååtkomst i Win9x/NT/2k/XP/Vista/7 (utan UAC)

Det mest pålitliga sättet att flasha från DOS är genom att starta från Hiren eller någon annan lämplig startbar CD/Flash. Men det är också möjligt från Windows.

Syntax och grundläggande kommandon:

Syntax: spipgmw /<команда>[filnamn] [adress] [storlek]

Grundläggande kommandon:

i– identifiering av flashminne
d filnamn– läsa innehållet i flashminnet till en fil
p filnamn– skriv flashminne från firmwarefilen (utan att radera)
v filnamn– jämför innehållet i flashminnet med firmwarefilen
efullständig radering flashminne
b– kontrollera att flashminnet raderas
u– låsa upp skrivskydd (beror på WP#-signalen)

Filnamnfullständiga namn fil, till exempel: file.bin, file.rom och så vidare. Tillägget spelar ingen roll, huvudsaken är att det är en korrekt bildfil och att namnet är korrekt.

BIOS firmware via SPI:

spipgmw/i– chip identifiering. För att kontrollera om allt är korrekt anslutet måste programmet bestämma typen installerat minne. Om detta inte händer, kontrollera att anslutningen är korrekt och att chippet stöds av programmet.

spipgmw /d BIOS.bak– om du behöver spara säkerhetskopia befintligt BIOS.

spipgmw /u– inspelningsupplösning.

spipgmw /e– radering.

spipgmw /p FIL.rom– skriv firmware ("FILE.rom" är namnet på firmwarefilen, filen måste finnas i samma mapp som programmet)

...väntar på inspelningsprocessen...

spipgmw /v FILE.rom– jämföra inspelade data med firmware-filen. Eller så kan du göra en dumpning spipgmw /d test.rom och jämför dess innehåll med originalfil firmware i någon Hex-redigerare.

Det kan finnas ett litet antal fel. Beror på kabellängd, strömstabilitet, minnestyp. Naturligtvis är det önskvärt att det inte finns några fel alls, men även med ett visst antal fel kommer datorn med största sannolikhet att starta, och då kan du flasha BIOS med standardverktyg.

Denna metod är inte bara lämplig för firmware Moderkorts BIOS kort, men även andra enheter som har en SPI-kontakt, eller direkt, vilket chip som helst som stöds.

I nästan alla moderna elektronisk teknik det finns minneskretsar av sådana serier som: 25LVxxx, WINBOND, etc. De är förenade vanligt namn SPIFLASH. Jag gör många reparationer och jag behöver nästan alltid en sådan programmerare till hands.

Jag modifierade många programmerare för varje processor och kom till slutsatsen att det är enklare och snabbare att lossa själva flashminnet och löda det på plats än att rota igenom Internets djup och leta efter hur man flashar enheten genom processorn. Det fanns till och med satellitmottagare, där serviceanslutningen av någon okänd anledning inte fungerade. Det fanns bara en väg ut. Löda upp spiflashen och flasha den med programmeraren. Efter att ha flashat den fasta programvaran och installerat chippet på plats vaknade enheten till liv.

Ris. 1. Spiflash-programmeringskrets

Dess schema är enkelt och kommer inte att orsaka svårigheter. 100 Ohm motstånd kan ändras inom intervallet 47-100 Ohm. 4,7 kOhm-motstånd kan ändras inom intervallet 3,9-6,2 kOhm. Kretsen drivs av en 3,3 V-källa.

tryckt kretskort Ledningar tillhandahålls för ett trebent stabilisatorchip. Det kan vara vilken liten som helst, till exempel LM117 3.3v. Låt mig förklara varför: Kretsen drivs från USB-porten, där spänningen är 5 V, och våra flashenheter drivs från en 3,3 V-källa. På så sätt behöver vi inte ansluta extern källa näring.

Jag tror att du kan räkna ut det själv. Dess klickfunktioner liknar andra firmwareprogram.

Metod för att installera chipet för firmware: Löda loss blixten. Vi tar bort överflödigt lod från dess ben. Vi placerar mikrokretsen på bordet och placerar något 0,5 mm tjockt under det, så att detta substrat inte stör mikrokretsens ben. Vi böjer benen mot bordet. Detta görs så att det blir ett gap mellan chipet och bordet. Vi placerar mikrokretsen på programmeringskortet, kombinerar benen på mikrokretsen med spåren på programmeringskortet och trycker på den med en klädnypa av plast (på grund av att vi tidigare gjorde ett gap, trycks mikrokretsen hårt med benen för att programmeringskortets spår och höljet stör inte det). Jag brukade löda dem. Denna procedur är tråkig))).


Detta diagram visas också ofta:

För att flasha BIOS Flash-minnet på moderkort, hårddiskar, såväl som mina egna amatördesigner, behövde jag en programmerare. Min favorit PonyProg stöder bara upp till 256kbit, dessutom är en LPT-port nu en sällsynthet efter att ha sökt på Internet, hittade jag en ganska enkel USB-version "BlackcatUSB". Programmeraren är designad för att läsa/skriva SPI-Flash-minneschips med en kapacitet på 1 Mbit och över (dvs mer än 128 kbyte) av den populära 25xxx, 26xxx-serien. Enligt JTAG-protokollet (återflashning krävs) CFI-Flash-chips - 25xxx, 28xxx, 29xxx, 39xxx, 49xxx, 58xxx, samt K8D17xxx, K8D32xxx.

Den är baserad på mikrokontrollern AT90USB162, som har en USB-starthanterare, så dess initiala firmware- och mjukvaruuppdateringar utförs via USB-bussen. Ingen blinkning krävs ytterligare program- detta kan göras direkt från den eget program. Programvaran distribueras dessutom fritt. utvecklare tillhandahåller firmware-filer och programkällor. Ett skriptsystem stöds för att lägga till nya algoritmer. Du kan manuellt välja alla parametrar för att arbeta med okänt minne. Programmet kräver ingen installation, bara starta och arbeta.

Utseende på fabriksversionen

Originalkortet har byglar för att välja SPI-spänning - 3,3V / 5V, en återställningsknapp och omkopplare för val av startläge: normal / bootloader. I det dagliga arbetet krävs extremt sällan återställning och blinkning av programmeraren, så för klonen uteslöts knappen och omkopplarna. Istället för en 10-stiftskontakt installeras ett DIP-uttag, och USB-kontakten är gjord som en fortsättning på kretskortet:

För att "USB-kontakten" inte ska dingla i uttaget måste den vara 2,5 mm tjock. Jag lyckades hitta en bit PCB av denna tjocklek, men för en 1,5 mm skiva måste du limma en 1 mm "foder. ”. Den måste vara icke-metallisk i händelse av oavsiktlig insättning i kontakten "upp och ner".


Programmeringskrets

När bygel J1 är inställd på position 1-2, drivs mikrokontrollern från 5V USB-linjen, när den är inställd på 2-3 - från den interna 3,3V stabilisatorn. Titta noga på minnesdatabladet innan du väljer en programmeringsspänning - de flesta trevoltschips kommer att misslyckas när de drivs med 5V.

En klon som satts ihop utan fel kommer omedelbart att identifieras av systemet som AT90USB162 i DFU-läge. Starta BlackcatUSB-skalet och se till detta:

Om mikrokontrollern inte är "ren" tvingar vi den till bootloader-läge:

  1. stäng RESET-kontakten till huset
  2. stäng BOOT-kontakten till huset
  3. släpp RESET
  4. släpp BOOT

Det är viktigt att BOOT släpps lite senare än RESET. Gå sedan till AVR Firmware-fliken, välj firmware-filen BCUSB.1.09.SPI.hex och använd "Program"-knappen för att starta firmwareprocessen:

När processen är klar (ett par sekunder), klicka på "Starta applikation". Programmeraren kommer att upptäckas av systemet och kräver en drivrutin - hitta den i mappen Drivrutiner. Efter installationen ser vi programmeraren redo att användas:

Nu kan du testa det i praktiken.

VIKTIG! Om lysdioden för läge är på (eller blinkar) kan du inte sätta in eller ta bort minne från uttaget - det är under spänning, detta kan förstöra informationen!

Därför tar vi helt enkelt bort klonen från USB-kontakten, sätter in minnet i uttaget och försöker:

Minnet upptäcktes och fliken SPI Flash dök upp, där du kan läsa och skriva det:

P.S. "BlackcatUSB"-programmeraren stöds för närvarande inte av utvecklaren - den släpps istället uppdaterad version"FlashcatUSB":

Den enda hårdvaruuppdateringen är ersättningen av MK med en mer rymlig version - ATmega32U2. Det finns fler programuppdateringar - stöd för ett bredare utbud av chips, inklusive NAND. Nya versioner av programmet finns tillgängliga på utvecklarens webbplats. Den nya NAND (FCUSB.1.07.NAND.hex) och JTAG (FCUSB.7.05.EJTAG_16K.hex) firmware är också lämplig för vår klon - i alla fall, de lanseras och detekteras, jag har inte testat funktionen - det finns helt enkelt ingenting.