MX25U12873F – programowanie CH347 V1, usuwanie blokady zapisu w AsProgrammer
Pytanie
jak zaprogramować MX25U12873F programatorem CH347 V1. W jaki sposób usunąć ochronę przed zapisem, którą zgłasza asprogrammer?
Odpowiedź Sztucznej Inteligencji
Bezpośrednia odpowiedź na pytanie
- Do MX25U12873F bezwzględnie użyj adaptera 1,8 V (CH347 V1 domyślnie ma 3,3 V). Podciągnij piny WP# (pin 3) i HOLD# (pin 7) do VCC=1,8 V.
- W ASProgrammer wybierz MX25U12873F (ew. zbliżony profil: MX25U12872F / MX25U12835F / MX25L12873F), wykonaj sekwencję: Unprotect → Erase → Program → Verify.
- Jeśli „Write protection” nie znika: ręcznie wyczyść bity ochrony w rejestrach statusu (SR1/SR2): WREN (06h) → WRSR (01h) z danymi 0x00, 0x00 (BPx=0, SRP/SRP1=0) przy WP#=HIGH. Często komunikat ASProgrammer jest ostrzeżeniem i mimo niego zapis/erase przebiega poprawnie.
Kluczowe punkty:
- Napięcie 1,8 V i poprawne podciągnięcie WP#/HOLD# to warunek konieczny.
- Odczytaj JEDEC ID i SR1/SR2; skasuj bity BPx, SRP/SRP1/CMP.
- Zmniejsz prędkość SPI (1–2 MHz) i stabilizuj zasilanie podczas programowania.
Szczegółowa analiza problemu
- Układ MX25U12873F to 128 Mbit (16 MB) SPI-NOR 1,8 V (seria „U”). Większość problemów z „write-protect” wynika z:
- Nieprawidłowego napięcia interfejsu (3,3 V zamiast 1,8 V).
- Sprzętowej blokady przez WP#=LOW przy ustawionych bitach SRP/SRP1.
- Ustawionych bitów BPx/TB/SEC/CMP w SR1/SR2.
- Niestabilnych połączeń (klips SOIC8, długie przewody) lub zbyt wysokiej szybkości SPI.
Teoretyczne podstawy:
- Rejestr statusu 1 (SR1) zawiera m.in.: SRP0/SRP (Status Register Protect), SEC, TB, BP[2:0], WEL, WIP.
- Rejestr statusu 2 (SR2) zawiera m.in.: SRP1, CMP (Complement Protect), LBx, QE itp.
- Ochrona zapisu obejmuje:
- Ochronę blokową (BPx + TB/SEC) – blokuje zakresy adresów.
- Zabezpieczenie rejestru (SRP1:SRP0) – przy WP#=LOW uniemożliwia zmianę SR.
- Opcjonalnie bity „Lock” dla rejestrów Security (LBx).
Praktyczne zastosowania:
- Do zmiany BPx/SRPx musisz:
- mieć WP#=HIGH (1,8 V),
- wykonać WREN (06h),
- zapisać SR1 i SR2 komendą WRSR (01h) – zwykle dwubajtowo: [SR1][SR2].
- CMP=1 odwraca interpretację BPx (często utrudnia erase) – ustaw CMP=0.
Procedura krok po kroku (sprawdzona w praktyce):
- Sprzęt
- CH347 V1 + prawdziwy adapter 1,8 V (z tłumikiem poziomów, nie tylko stabilizatorem!).
- WP# i HOLD# do VCC=1,8 V (rezystory podciągające 10 kΩ lub mostki).
- Krótkie przewody/klips SOIC8; masa wspólna; ESD.
- Połączenia (SOIC8/WSON8 z wyprowadzeniami):
- CS#(1), SO/DO(2), WP#(3), GND(4), SI/DI(5), SCLK(6), HOLD#(7), VCC(8).
- Oprogramowanie (ASProgrammer/NeoProgrammer/UsbAsp-flash dregmod)
- Wybierz CH347, tryb SPI, częstotliwość 1–2 MHz (zwiększysz później).
- Wybierz układ: MX25U12873F (lub najbliższy z listy).
- Diagnostyka
- Read ID: producent C2h (Macronix), pozostałe bajty zależne od wariantu – ważne, by ID nie było 00/FF.
- Read Status (SR1/SR2) i zanotuj bity BPx, SRP, CMP, TB, SEC.
- Usuwanie ochrony
- Automatycznie: Unprotect (wiele wersji ASProgrammer robi: WREN → WRSR(00 00)).
- Ręcznie (gdy automat zawodzi):
a) 06h (WREN)
b) 01h (WRSR) + dane: 0x00, 0x00 (BPx=0, SRP/SRP1=0, CMP=0)
c) Odczytaj SR i potwierdź zmiany.
Uwaga: jeśli SR się nie zmienia – WP# nie jest na HIGH lub SRP aktywne.
- Dodatkowo (gdy kość „usypia”): wyślij „Resume from Deep Power-Down” (0xAB) przed operacjami (większość narzędzi robi to sama).
- Kasowanie i programowanie
- Full Erase (Erase Chip) → Blank Check.
- Program (Write) z pliku .bin/.rom → Verify.
- Jeżeli weryfikacja losowo się nie zgadza: zmniejsz prędkość SPI, skróć przewody, popraw docisk klipsa, powtórz.
Warianty problematyczne:
- „Erase failed / Write failed / Verify failed”: najczęściej 1,8 V-adapter „tylko zasilający” (bez level shiftingu) lub WP#=LOW. Czasem komunikat „Possible protection is enabled” można bezpiecznie zignorować – i tak przechodzi erase/program.
- „SR nie daje się zapisać”: SRP/SRP1 aktywne + WP#=LOW – podciągnij WP# do VCC i powtórz WRSR.
- „ID nieczytelny (FF/00)”: błędna orientacja klipsa, za duża prędkość, niepewne styki lub brak 1,8 V.
Aktualne informacje i trendy
- ASProgrammer (różne fork-i, np. dregmod) oraz NeoProgrammer mają gotowe skrypty Unprotect/Erase/Program/Verify dla rodzin MX25U i obsługę CH347.
- UsbAsp-flash (nowsze wydania) dodaje profile 1,8 V dla MX25U12873F oraz „Resume from Deep Power-Down” przed operacjami – przydatne przy problemach z „uśpioną” kością.
- W praktyce serwisowej często wybiera się sekwencję z menu: unprotect → erase → program → verify; ostrzeżenie o ochronie w ASProgrammer bywa nieszkodliwe.
Wspierające wyjaśnienia i detale
- TB/SEC: definiują „od góry” czy „od dołu” chroniony zakres. Gdy BPx>0 i CMP=0 – blokada obejmuje fragment od góry/dół zależnie od TB; przy CMP=1 – odwrócony obszar. Dlatego ustaw: BPx=000, TB=0, SEC=0, CMP=0.
- SRP/SRP1: gdy (SRP1:SRP0) ≠ 00 i WP#=LOW, zapisu SR nie dokonasz – to najczęstsza pułapka.
- WRSR w Macronix zwykle wymaga zapisania dwóch bajtów (SR1+SR2) po jednym WRSR.
Aspekty etyczne i prawne
- Programowanie BIOS/flash powinno dotyczyć własnego sprzętu lub sprzętu powierzonego za zgodą właściciela.
- Zmiany wsadu mogą naruszać gwarancję; przechowuj oryginalny odczyt (backup).
Praktyczne wskazówki
- Zawsze wykonaj pełny backup (Read → Save) przed erase.
- Odłącz zasilanie płyty, baterie (w laptopie także RTC) – unikniesz konfliktu z układem PCH/EC.
- Jeśli programujesz wlutowaną kość – zapewnij stabilne 1,8 V z adaptera; nie „dokarmiaj” układu przez płytę.
- Zaczynaj od 1 MHz, dopiero po stabilnej weryfikacji podnoś częstotliwość.
- Używaj krótkiego, grubego kabla USB i portu o pewnym zasilaniu.
Ewentualne zastrzeżenia lub uwagi dodatkowe
- „Adapter 1,8 V” musi obniżać poziomy logiczne wszystkich linii SPI, nie tylko VCC. Tanie płytki z samym LDO 1,8 V powodują błędy.
- Czas pełnego kasowania 16 MB bywa długi; nie przerywaj „bo wisi” – obserwuj WIP.
- Jeśli kość była choć raz podana 3,3 V – możliwe uszkodzenie bramek I/O (objawy: niestabilna weryfikacja).
Sugestie dalszych badań
- Sprawdź w dokumentacji MX25U12873F mapę bitów SR1/SR2 i dokładne komendy „Block/Sector Protection”.
- Przetestuj alternatywne narzędzia: NeoProgrammer, UsbAsp-flash (profil MX25U12873F_1.8V), komendy ręczne przez terminal (jeśli oprogramowanie to umożliwia).
- Rozważ programatory z natywnym 1,8 V (RT809H, Dediprog) w środowisku serwisowym o dużej powtarzalności.
Krótkie podsumowanie
- Sedno problemu: napięcie 1,8 V, WP#=HIGH, a następnie wyzerowanie BPx/SRPx w SR1/SR2.
- W ASProgrammer przejdź przez Unprotect → Erase → Program → Verify; w razie potrzeby ręcznie: 06h → 01h + [00 00].
- Zadbaj o jakość połączeń i właściwą prędkość SPI; ostrzeżenie „Possible protection…” często nie blokuje realnie zapisu.
Jeśli podasz: (a) odczyt ID, (b) wartości SR1/SR2 przed odblokowaniem, (c) zrzut z błędu ASProgrammer oraz zdjęcie podłączenia – wskażę dokładnie, które bity ustawić i jaką sekwencję wysłać w Twojej konfiguracji.
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.
Zadaj dodatkowe pytanie Sztucznej Inteligencji