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.
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.
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:
Jednak NeoProgrammer twierdzi, że układ nie odpowiada. Ten sam błąd jest, gdy jest pusta podstawka:
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ć:
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
No tak, JEDEC ID to 0xFF 0xFF 0xFF....
Co natomiast się stanie, gdy mimo to wyślemy standardowe instrukcje odczytu danych?
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ę.