Programator SPI flash: citirea, dump-ul și scrierea corectă a memoriei

Pe scurt
- Înainte de orice scriere, citești memoria de cel puțin două ori și compari fișierele printr-o sumă de control (SHA-256). Dacă diferă, conexiunea nu e de încredere.
- ID-ul JEDEC (comanda 9Fh; JEDEC e organismul de standardizare care dă codurile de producător) spune producătorul și tipul cipului: EFh 40h 16h e un Winbond W25Q32JV de 3 V, EFh 60h 17h un W25Q64FW de 1,8 V.
- Flash-ul se scrie doar în locații șterse (FFh), deci scrierea înseamnă ștergere, programare și apoi verificare prin recitire.
- Cu clema SOIC-8 (o clemă care prinde capsula cu 8 pini) pe placă, programatorul poate alimenta și alte circuite prin pinul VCC al memoriei. Plăcile cu sursă de rețea nu se programează în priză.
Verificat la 10 octombrie 2026.
Un dump e copia binară completă a memoriei, octet cu octet, de la prima la ultima adresă. E singura cale de întoarcere dacă o scriere iese prost, deci o tratezi ca pe un original. Citirea și rescrierea memoriilor de pe plăci le facem și la reparații electronice în Coșereni.
Ce este o memorie SPI flash și ce comenzi înțelege?
E o memorie flash cu interfață serială pe 4 fire (SPI): selecție (/CS), ceas (CLK), date intrare (DI) și ieșire (DO). Programatorul îi trimite un octet de comandă, apoi adresa și datele. Comenzile de bază, din fișa Winbond W25Q32JV:
| Comandă | Cod | Ce face |
|---|---|---|
| Read JEDEC ID | 9Fh | întoarce producătorul și două octeți de tip și capacitate |
| Read Data | 03h | citește de la o adresă de 24 de biți, continuu |
| Write Enable | 06h | obligatorie înaintea oricărei scrieri sau ștergeri |
| Page Program | 02h | scrie 1–256 de octeți într-o pagină deja ștearsă |
| Sector Erase | 20h | șterge 4 KB, adică îi pune pe toți la FFh |
| Block Erase | 52h / D8h | șterge 32 KB sau 64 KB |
| Chip Erase | C7h / 60h | șterge tot cipul |
| Read Status Register-1 | 05h | arată dacă cipul e ocupat și biții de protecție |
| Read SFDP | 5Ah | citește tabelul de parametri al cipului |
| Read Unique ID | 4Bh | întoarce un număr unic de 64 de biți, pus din fabrică |
Două detalii din fișă care contează la scriere. Page Program merge doar în locații șterse (FFh). Dacă trimiți mai mult de 256 de octeți, adresa se întoarce la începutul paginii și suprascrie ce ai trimis deja.
Ce spune ID-ul JEDEC și de ce îl citești primul?
ID-ul JEDEC e prima verificare că vorbești cu cipul corect. Primul octet e producătorul: EFh înseamnă Winbond (fișa W25Q32JV). Următorii doi spun tipul de memorie și capacitatea:
- EFh 40h 16h: W25Q32JV, 32 Mbit, 2,7–3,6 V (variantele IQ/JQ; la IM/JM, fișa dă EFh 70h 16h);
- EFh 60h 17h: W25Q64FW, 64 Mbit, 1,65–1,95 V.
Exemplul arată de ce contează: aceeași familie, dar alt octet de tip și altă tensiune. O memorie de 1,8 V cere adaptor, cum explică ghidul despre CH341A și adaptorul de 1,8 V.
Cipul poate avea și un tabel SFDP, citit cu comanda 5Ah, care descrie configurația, comenzile disponibile și alte trăsături. Fișa Winbond spune că e compatibil cu standardul JEDEC JESD216 din 2011 și că îl au majoritatea memoriilor Winbond livrate după iunie 2011. Un ID format numai din FFh sau 00h nu identifică nimic: poate însemna că programatorul nu primește răspuns de la cip.
Cum faci un dump corect al memoriei?
- Identifici cipul după inscripție și fișă: capacitatea și tensiunea.
- Citești ID-ul JEDEC și îl compari cu fișa.
- Citești toată memoria într-un fișier, de exemplu
flashrom -p ch341a_spi -r citire1.bin. - O citești a doua oară, în alt fișier, fără să muți clema.
- Compari sumele de control:
sha256sum citire1.bin citire2.binpe Linux saucertutil -hashfile citire1.bin SHA256pe Windows. Sumele trebuie să fie identice. - Păstrezi fișierul neatins, cu numele cipului, al plăcii și data, și lucrezi pe o copie.
De ce SHA-256: standardul NIST FIPS 180-4 spune că orice schimbare în fișier dă, cu probabilitate foarte mare, alt rezumat. Un singur bit citit greșit se vede.
Două citiri diferite arată o problemă de legătură sau de semnal, nu o memorie „schimbătoare”. Documentația flashrom pune citirile inconsecvente pe seama semnalelor distorsionate și recomandă fire scurte, sub 20 cm, toți pinii de intrare legați și un ceas mai mic. La CH341A ceasul e fix, la 2 MHz, deci rămân firele și contactul. Documentația versiunii flashrom în dezvoltare descrie și o opțiune care citește de mai multe ori și votează majoritar (--read-repeated).
Un dump plin numai de FFh poate fi o memorie chiar ștearsă (starea ștearsă e FFh, după fișă) sau o citire eșuată. Unul plin de 00h poate însemna o linie de date blocată. Nu-l lua drept copie bună.
Dump-ul unei memorii de aparat poate conține și date proprii acelui exemplar, nu doar programul. Un exemplu e seria sau codul panoului la televizoare, explicat în ghidul despre EEPROM-ul televizorului. De aceea copia se face înainte de orice altă intervenție.
Cum scrii și verifici memoria?
După fișă, ștergerea pune toți biții la 1 (FFh), iar programarea merge doar în locații șterse. Scrierea are deci trei pași: ștergerea sectoarelor, programarea paginilor, recitirea. Flashrom îi face pe toți la -w. După pagina de manual:
- face întâi o copie a conținutului în memoria calculatorului;
- șterge și scrie doar ce diferă;
- la final citește tot cipul și îl compară cu fișierul;
- opțiunea
-n, care sare verificarea, „nu e recomandată”.
După scriere, mai faci o citire și compari suma ei cu cea a fișierului scris. Dacă scrierea nu „prinde”, cipul poate fi protejat. Fișa W25Q32JV descrie biții de protecție din registrul de stare, pinul /WP și blocările pe sectoare. Flashrom are opțiuni pentru starea protecției (--wp-status). Nu dezactiva protecția fără să știi de ce a fost pusă de producătorul plăcii.
Clema SOIC-8 pe placă: ce riscuri are?
Clema prinde memoria pe placă, fără dezlipire. Documentația flashrom o numește o metodă simplă și de încredere, dar descrie și problemele programării în circuit:
- Magistrala nu e izolată. Prin pinul VCC al memoriei, programatorul poate alimenta parțial și alte circuite de pe placă.
- Alt circuit poate folosi memoria în același timp. Flashrom dă exemplul Intel ME (un controler din chipset-ul Intel), care citește și scrie memoria.
Pe lângă ce spune flashrom: clema ține pe pini doar prin apăsare, deci o mișcare poate strica o citire. De aici citirea dublă de mai sus.
Flashrom propune pentru plăcile de calculator alimentarea plăcii normale și ținerea ei în reset. La plăcile care au sursă de rețea, ca la televizoare sau electrocasnice, asta ar însemna lucru în priză, deci nu o face. Acolo memoria se citește dezlipită, pe soclu, sau placa ajunge la atelier.
Simptom, cauză posibilă, ce faci
| Ce vezi | Ce poate fi | Ce faci |
|---|---|---|
| ID-ul e FFh FFh FFh sau 00h | clema întoarsă sau fără contact, memorie fără alimentare, cip de 1,8 V fără adaptor | verifici pinul 1, contactul și tensiunea din fișă |
| Două citiri dau sume diferite | contact instabil, fire lungi (flashrom) | refaci contactul, scurtezi firele; altfel dezlipești cipul |
| Citirea merge, scrierea nu | protecție la scriere: biți BP/SRP sau pinul /WP (Winbond) | citești starea protecției înainte de orice |
| Placa „pornește” pe jumătate cu clema pusă | programatorul alimentează și alte circuite (flashrom) | oprești; memoria se citește dezlipită |
Ce poți face singur?
- Lucrezi întâi pe o memorie scoasă din circuit, ca să-ți verifici programatorul.
- Ții un jurnal: ID-ul, sumele SHA-256 ale citirilor, fișierul scris.
- Nu scrii niciodată fără două citiri identice salvate.
- Nu folosești imagini luate de la alt model de placă fără să știi ce date proprii conțin.
Când un aparat rămâne blocat după o actualizare sau o pană de curent, memoria e doar una dintre cauze. La televizoare, pașii de dinainte de deschidere sunt în ghidul despre televizorul blocat pe logo.
Când e de atelier?
Când memoria e pe o placă cu sursă de rețea, când citirile nu ies identice sau când cipul trebuie dezlipit. În atelier avem programator pentru memorii EEPROM și flash și stație de lipit cu aer cald, deci putem citi cipul și pe soclu, după dezlipire. Detaliile sunt pe pagina de reparații electronice din Coșereni.
Întrebări frecvente
Ce face un programator SPI flash?
Vorbește direct cu memoria prin cele 4 fire SPI: îi citește ID-ul, o citește într-un fișier, o șterge și o scrie, fără procesorul plăcii.
Ce este un dump de EEPROM sau de flash?
Fișierul binar cu tot conținutul memoriei, de la prima la ultima adresă. Se face înaintea oricărei scrieri și se păstrează neatins, ca origine de întoarcere.
Ce este ID-ul JEDEC al unei memorii?
Trei octeți citiți cu comanda 9Fh: producătorul (EFh e Winbond), tipul și capacitatea. De exemplu, EFh 40h 16h e un W25Q32JV de 3 V.
De ce se citește memoria de două ori?
Ca să compari sumele SHA-256 ale celor două fișiere. Dacă diferă, conexiunea nu e stabilă și copia nu e de încredere; documentația flashrom leagă citirile inconsecvente de semnale distorsionate.
Se poate programa memoria cu clema pe placă?
Da, dar programatorul poate alimenta și alte circuite prin pinul VCC, iar alt circuit poate folosi memoria. La plăcile cu sursă de rețea nu se lucrează în priză: memoria se citește dezlipită sau în atelier.
Surse
- Winbond, fișa W25Q32JV: comenzile SPI, ID-ul JEDEC, ștergerea, programarea pe pagini, protecția, SFDP (JESD216) — citit 10.10.2026
- Winbond, fișa W25Q64FW: ID-ul JEDEC EFh 60h 17h, memorie de 1,8 V — citit 10.10.2026
- flashrom, pagina de manual: citirea, scrierea cu verificare, -n, -v, protecția — documentația v2.0.0-devel, citită 10.10.2026
- flashrom, „In-System Programming”: clema SOIC și problemele programării în circuit — citit 10.10.2026
- flashrom, „Misc notes and advice”: citirile inconsecvente, firele, pinii nelegați — citit 10.10.2026
- NIST, FIPS 180-4 „Secure Hash Standard”: SHA-256 — citit 10.10.2026
- GNU coreutils, sha256sum — citit 10.10.2026
- Microsoft Learn, certutil -hashfile — citit 10.10.2026

Discuție
Încă nu a scris nimeni aici. Dacă ai o întrebare despre montaj sau despre ce se potrivește pe mașina ta, scrie-o mai jos.