Naprawa Dtf1, Dtf2 i 1630

tf2 i 1630

  Mój kolega mawiał "Elektronika to proste zajęcie wystarczy logicznie myśleć". Metody, które wykorzystuję do naprawy "ugrobionych" dekoderów opierają się na pracy u podstaw, którą wykonali T.Vlad, a także pio, bo chyba to on opracował sposób postępowania z denatami. Przykre, iż drobny błąd, najprawdopodobniej drukarski, spowodował powstanie wielu błędnych teorii o niemożliwości naprawy dekoderów.

 

Ostrzeżenia
Jeśli dekoder nie jest waszą własnością nie powinniście w nim grzebać i go rozkręcać.

 

UWAGA!!! ABY NIE UWALIĆ TUNERA NAJPIERW PRZECZYTAJ CAŁY TEKST A POTEM DZIAŁAJ, NIEKTÓRZY ROBIĆ NA ODWRÓT ALBO JEDNOCZEŚNIE CZYTAJĄ I DOKONUJĄ PRZERÓBEK, POTEM PŁACZĄ!

 

Wymyślono wprawdzie kilka mniej lub bardziej rozsądnych metod radzenia sobie z problemem, inwencja ludzka nie zna granic, ale nie zawsze było to do wykorzystania przez zwykłych śmiertelników. Np. nikt nie powtórzył wyczynu sołtysa z Wąchocka, który by mu ken zaświecił, wlutował flasza z aparatu fotograficznego, co pozwoliło mu oglądać wieczorami erotyki, gdy małżonka szła spać. TAP (Test Access Port) wymyślono, by naprawiać padłe urządzenia nafaszerowane elektroniką cyfrową. Dla flaszy wymyślono znormalizowane instrukcje, by je kasować, programować, itd. nie wylutowując ich z układu. ST20 bez programu bootującego i dobrej konfiguracji EMI (External Memory Interface - interfejs pamięci zewnętrznej) pozwala tylko na odczyt. Do tego,jeżeli spojrzeć na schematy urządzeń, to okazuje się, iż flasze różnią się między sobą sposobem podłączenia ich magistrali adresowej do magistrali adresowej procesora. Generalnie rzecz biorąc do metodyki pio nie można w żaden sposób się przyczepić. Jednakże od czasu opracowania metody minął prawie rok i wiedza na temat dekoderów jest dużo bogatsza stąd niniejsza próba modyfikacji jego metody. W odniesieniu do 1630 prawdziwe są wnioski dotyczące programowania dużego flasza w Dtf1 i nie ma za bardzo o czym pisać. Jedynym problemem może być tylko algorytm kasowania/zapisu flaszy różnych producentów, ale po drobnej modyfikacji trapa nie powinno być problemu.

Metodyka naprawy


W zależności od typu dekodera wykorzystujemy program dtf1.exe lub dtf2.exe. Programowanie lub kasowanie wybranego flasza polega na załadowaniu odpowiedniego trapa i uruchomieniu go programem jtag_b.exe. Wyjątkiem jest kasowanie flaszy pod adresem 7fe00000 w dtf2, które są kasowane niejako z "definicji" jtaga bez wykorzystywania trapa. Nie mam za bardzo czasu i możliwości sprzętowych by zoptymalizować te programy, w każdym razie jeżeli wykonywać jedną czynność na raz to programy te mają bardzo dużą skuteczność. I tak np. po kasowaniu flasha pod adresem 50000000 należy wyłączyć dekoder i zakończyć program, potem włączyć dekoder i uruchomić program z trapem zapis5.bin. Na pewno da się napisać takiego trapa, który kolejno kasowałby dużego, potem małego flasha, programowałby małego flasza i na końcu miaby programowanie dużego flasha. Odpowiednie procedury wyboru funkcji są już w prg3a4_2.dat - może ktoś napisze "cztery (albo trzy dla dtf2) w jednym"; powinien taki trap chodzić przy drobnej modyfikacji kodów żródłowych. W obu przypadkach, zarówno trapy jak i dane są zapisywane do obszaru 40000000. Dla dtf2 jest to jedyne miejsce gdzie trap może fukcjonować poprawnie, dla dtf1 nie ma to większego znaczenia, bo trap może funkcjnować w obszarze 80000000. Wysyłanie większych paczek danych przyśpiesza trochę program. Jeszcze jeden szczegół dla "trawiących" a dotyczący dtf2. Trap ciężko chodzi, a czasami nawet wcale, gdy na początku trapa nie znajduje się polecenie pod adres 3004 prześlij 60000. Po uruchomieniu jtaga_b, po break'u i po kliknięciu pola 30 w polu control musi się pojawić na chwilę wartość 40060000, jeżeli jest inaczej to trap nie załapie. Programowanie flasza pod adresem 50000000 jest dość trudne gdy duży flasz jest "żywy", dlatego nie polecam stosowania mojej metody do programowania dekodera, szczególnie osobom nie "czującym" tematu. Wprawdzie jak coś nie wyjdzie w programowaniu, to tym programem można dekoder odratować, ale niewielka ilość testów nie pozwala na określenie stopnia niezawodności metody.

Przykład - zapis flasha pod adresem 7fe00000 w dtf2

a. właczyć dekoder (najlepiej w trybie serwisowm)
b. uruchomić dtf2.exe
c. wybrać opcję 5 - trap load i potem podać nazwę pliku 7fezapis.bin, po zakończeniu wczytywania pliku (zniknie licznik) należy, nie wyłączając dtf2.exe,
d. uruchomić program jtag_b.exe (zaznaczmy pole 16 w jtag properties, potem 29 w control, odznaczamy je, a następnie klikamy pole 30; jeżeli w tym momencie nie pojawi się przez chwilę wrtość 40060000 w okienku na lewo od klikanych pól to wyłączamy dekoder i powtarzamy procedurę. Jeżeli mignie nam przed oczami ta liczba, to niżej powinien pojawić się WPAdr równy 40000148 - można programować).
e. zamykamy jtaga_b klikając x w prawym górnym rogu i powracamy do dtf2.exe.
f. wybieramy opcję 2 - zapis 7fe0 i wpisujemy nazwę pliku, który chcemy zapisać pod 7fe00000 i uruchamiamy zapis.

Uwaga. By zapisać dużego flasza można wybrać opcję 7 - zapis 7fe. Ale jest to metoda dla mających trochę czasu. Jest to bezpośredni zapis bez trapa. Zaprogramowanie pamięci tym sposobem w czasie poniżej 2 godzin to duży wyczyn. Metoda z opcji 2 potrzebuje ok 2 minut. Być może opcja 7 komuś się przyda.

Dtf1.exe ma trochę inną numerację opcji, ale zasada programowania czy też kasowania flaszy jest identyczna. Warto po przeprowadzonej operacji kasowania lub zapisu odczytywać zawartość pamięci, na której prowadzimy jakieś działania. Jeżeli odczyt jest zgodny z oczekiwaniami to możemy przechodzić do natępnych punktów programu. Jeżeli jest coś nie tak, to najlepiej wyłączyć dekoder na około pół minuty.

Ewentualne problemy


Trapy tutaj zamieszczone obsługują dosyć dużą liczbę układów typu flasz
różnych producentów. Jednakże może dojść do niespodzianek. Edycja trapa nie jest trudna, można ją robić w dowolnym edytorze hex. Niektóre trapy w obu katalogach, mimo takiej samej nazwy nie są identyczne. Np.flasze w dtf1 i dtf2 pod adresem 50000000 różnią się trochę adresowaniem instrukcji zapisu i programowania - w dtf1 adres jest trzycyfrowy a w dtf2 czterocyfrowy. Nie jest wykluczone, że w niektórych przypadkach trap dla dtf1 będzie chodził w dtf2 i odwrotnie. Trap dla pamięci 2Mx8 powinien obsługiwać dużą grupę pamięci różnych producentów i co za tym idzie powinien się sprawdzić dla różnych dekoderów.

trapy

dtf1
erase5.bin - kasowanie małego flasza
erase2M.in - kasowanie dużego flasza
zapis5.bin - zapis małego flasza
zapis2M.bin - zapis dużego flasza

dtf2
erase5.bin - kasowanie małego flasza
zapis5.bin - zapis małego flasza
7fezapis.bin - zapis dużego flasza
(kasowanie dużego flasza - opcja nr 4 programu dtf2.exe kasowanie 7fe0)

PS. Dtf1.exe i dtf2.exe powstały na podstawie oprogramowania T.Vlada i były kompilowane przy pomocy programu Dev-C++.

PS2. Przeczytałem na forum o próbach łączenia jtag_w z moim programem umieszczonym w pliku dtf2 rescue (tutaj opcja nr 7). Takie połączenie nic nie wnosi. Wręcz przeciwnie wpisanie prg3a4_2.dat tym programem likwiduje skutecznie łączność dtf2 z otoczeniem i w tych warunkach trap niczego nie zrobi (udawało mi się uruchomić trapa kasowania flaszy, umieszczonego w obszarze powyżej 80000000, ale nic się nie działo mimo ustawienia przez procesor poprawnego Wptr - 7fe0aaa8). W dtf2 w obszarze 80000140 muszą się znajdować jakieś informacje potrzebne dekoderowi do działania, nawet martwemu. O jakie dokładnie dane chodzi - nie wiem. Przed uruchomieniem zapisu należy sprawdzić "czystość" dużego flasza. Jeżeli program wykasuje flasze to na pewno je zapisze.Przed dokonaniem właściwego zapisu można testowo wpisać pod adres 7fe00000 krótki plik tekstowy. Taki zapis trwa chwilę. Program ma szansę odratować dekoder gdy po odczycie początku flasza na podglądzie pojawi się kopia użytego pliku. Procedura jest nieodpowiednia jeśli flasze nie będą zmodyfikowane i wówczas trzeba poszukać czegoś innego. Czasami po wykonaniu jakiejś operacji na flaszach ulega zaburzeniu komunikacja mikroprocesor-jtag i nie ma na to reguły. Można sprawdzic czy taka komunikacja istnieje odczytując kawałek dowolnej pamięci. Przy nieczytelnym odczycie trzeba wyłączyć dekoder i program. Po ponownym włączeniu dekodera i ponownym uruchomieniu programu w liniach wyświetlających zawartość rejestrów 2000-2070 powinny pojawić się dane konfiguracyjne dtf2, a w linii dotyczącej 7fe00000 mają być same efy - wtedy program powinien pójść. Program jest napisany dla flaszów at29w800 i w przypadku innych kości może wystąpić różnica w algorytmach kasowanie/zapis, a co za tym idzie trzeba zmodyfikować program na potrzeby takich kości. Metodę testowałem na dwóch "żywych" dekoderach. Kasowałem pamięć, wyłączłem dekoder a potem je "ratowałem". Nie miałem z tym żadnych problemów.

 

drukuj

 

zamknij to okienko!