logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pamięć Flash podłączona ale programator jej nie widzi? Rozwiązanie problemu CH341 NeoProgrammer

p.kaczmarek2 28 Lut 2026 16:30 1548 0

TL;DR

  • Dotyczy to pamięci Flash Macronix ze starej drukarki HP PSC1410 podłączonej do programatora CH341, która w NeoProgrammer zgłasza IC not responding i nie zwraca standardowego ID.
  • Kluczowy trik polegał na ręcznym wyborze typu pamięci w ASProgrammer oraz późniejszym dodaniu w BK7231GUIFlashTool odczytu Flash z pominięciem weryfikacji ID.
  • Wybrany na próbę typ MX25L1605D pozwolił rozpocząć odczyt, a zwracane identyfikatory miały postać 0xFF 0xFF 0xFF.
  • Mimo braku JEDEC ID standardowe instrukcje odczytu danych działały poprawnie, więc pamięć dało się zgrać bez dodatkowych zmian protokołu.
  • Wniosek jest taki, że oprogramowanie CH341 nie powinno kończyć diagnostyki na samym ID, bo brak odpowiedzi na Read ID nie musi oznaczać uszkodzenia układu.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Zbliżenie na układ scalony MX na zielonej płytce PCB z opisami R465 i U151
    Podłączyłeś poprawnie pamięć Flash do programatora CH341, ale program na komputer wcale jej nie rozpoznaje? NeoProgrammer pokazuje IC not responding, czy układ jest uszkodzony? Operacja Read ID (odczyt identyfikatora flash) zwraca same 0xFF? Nie poddawaj się - tu pokażę nietypowy przypadek dobrze demonstrujący, że niektóry układy pamięci po prostu nie wspierają odczytu ID a mimo to można zgrać z nich dane.
    Zbliżenie na płytkę PCB z układem pamięci Macronix „MX” i innymi scalakami
    Pacjent to niezidentyfikowana przeze mnie pamięć Macronix ze starej drukarki HP PSC1410. O tym, że jest to pamięć, świadczy nie tylko oznaczenie, lecz również sposób podłączenia wyprowadzeń. Widać tu, że do głównego procesora właśnie idą tylko te piny, które odpowiadają za SPI w przypadku typowej obudowy SO16.
    Schemat wyprowadzeń pamięci SPI w obudowie SOP-16 (300 mil) z opisanymi pinami
    Pamięć zdjąłem gorącym powietrzem i przylutowałem na płytkę-adapter od CH341, upewniając się, że dobrze ustawiłem pierwszy pin (tzw. notch). Wszystko wyglądało okej:
    Układ pamięci w obudowie SOIC na niebieskiej płytce-adapterze, obok pinów złącza
    Jednak NeoProgrammer twierdzi, że układ nie odpowiada. Ten sam błąd jest, gdy jest pusta podstawka:
    Zrzut ekranu NeoProgrammer z błędem „IC not responding” dla układu MX25L6405D [3.3V]
    ASProgrammer też tej pamięci nie wykrywa:
    
    Current programmer: CH341
    ID(9F): FFFFFF(Unknown)
    ID(90): FFFF(Unknown)
    ID(AB): FF(Unknown)
    ID(15): FFFF(Unknown)
    

    Miałem się już poddać, gdy coś podkusiło mnie by wybrać w ASProgrammer na sztywno jeden z typów pamięci. Strzelałem, że to coś z serii MX25L1605D:
    
    14:03:45
    Reading memory...
    Done
    Execution time: 00:01:19
    CRC32 = 0x0149DE9F
    

    O dziwo coś udało się odczytać:
    Zrzut heksadecymalny pamięci z kolumną ASCII; widoczny tekst „Boot” i „ERIDANI ERROR DETECTED”.
    Operację powtórzyłem w NeoProgrammer - bezskutecznie. Ten i tak utyka na ID.
    Szybko jednak dotarłem do wniosku, że ta pamięć nie wspiera odczytu ID, ale wspiera odczyt danych.
    Przyszła pora na finalną weryfikację, gdyż mam własny program, który wspiera m. in. pamięci Flash przez CH341:
    https://github.com/openshwprojects/BK7231GUIFlashTool
    Zrzut ekranu programu BK7231 Easy UART Flasher z zielonym komunikatem „Reading done”
    No tak, JEDEC ID to 0xFF 0xFF 0xFF....
    Co natomiast się stanie, gdy mimo to wyślemy standardowe instrukcje odczytu danych?
    Zrzut ekranu programu do odczytu flash z komunikatem „Reading done” i logiem w czerwonej ramce
    Pamięć zostaje odczytana poprawnie, nie ma żadnych więcej niestandardowych zmian w protokole.
    Na skutek tej obserwacji dodałem do mojego BK7231GUIFlashTool (aka Easy Flasher - tak, nazwa wymaga zmiany) możliwość odczytu Flash z pominięciem weryfikacji ID i z ręczna deklaracją oczekiwanego rozmiaru.

    Podsumowując, wygląda na to, że twórcy NeoProgrammer wcale o tym nie wiedzą, a twórcy ASProgrammer albo fartem się na to załapali, albo zapomnieli o tym wspomnieć w przypadku gdy da się odczytać pierwszy sektor, ale nie ID. Uważam, że narzędzia do obsługi CH341 nie powinny dawać w takiej sytuacji wprowadzającego w błąd komunikatu "IC not responding" (cytując NeoProgrammer), tylko powinny podejmować próbę odczytu jednej strony i dopiero wtedy oceniać, czy jest komunikacja. Dopiero takie podejście da rzetelne rezultaty.
    Czy spotkaliście się z tego typu problemem w przypadku pamięci Flash? A może to ja jestem w błędzie? Cóż, niewątpliwie mój Flash udało się odczytać, a JEDEC ID on nie zwraca. Przynajmniej nie w klasyczny sposób...
    PS: Czy rozpoznaje ktoś, jaki konkretny model Flash tu pokazałem?

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14549 postów o ocenie 12551, pomógł 654 razy. Jest z nami od 2014 roku.
  • REKLAMA
📢 Słuchaj (AI):
REKLAMA