Witam.
Do tej pory nie interesowałem się w ogóle elektroniką cyfrową. Dlatego w tym temacie jestem prawie zielony.
Szkolę się z podstaw programowania arduino.
Jednak mam ochotę na nauczenie się programowania pamięci eeprom.
Dla testów zakupiłem programator CH341A. Wszystko idzie ładnie. Programator zgrywa wsad.
Ale nie rozumiem o co chodzi z tym wsadem. Zauważyłem że ludzie na forum potrafią coś z tego odzytać ale nie programem tylko samemu coś obliczają. Chciałbym się dowiedzieć gdzie można się nauczyć takich rzeczy. Czy są jakieś kursy, szkolenia? Bo widziałem na przykład kalkulator do odkodowania radia na podstawie wsadu z eeprom z radia. Ale ja chciałbym się dowiedzieć jak to np. na piechotę obliczyć. Czy jest to możliwe? Czy wsad taki służy tylko do odczytania informacji w nim zawartych tylko za pomocą specjalnego programu? Każda opinia będzie pomocna.
Ahahaha długa droga Kolego przed Tobą, ale jak Cię to ciekawi to już dobrze.
Dane są czasem zapisane jawnie i w oknie edytora można obok w interpretacji ASCII odczytać to co chcesz. Często jednak dane są specjalnie zabezpieczone - czasem tylko ze względów technicznych - czyli przydają się sumy kontrolne itp.
Do radyjek musisz poszukać specjalnych kolekcji wsadów które są pogrupowane katalogami i w takim katalogu obok przykładowego pliku BIN/HEX ze znanym kodem często jest plik tekstowy opisujący w których komórkach jest kod.
Kiedyś do takich radyjek podchodziło się tak, że najpierw zgrywasz wsad a dopiero potem wbijasz jakiś kod... jak kod nie pasuje to radio w eeprom zmienia "licznik błędów". Kod często był obok licznika błedów. Wystarczyło wgrac wczesniej zgrany wsad i miałes znowu kolejną próbe.
To tak naprawdę w malutkim skrócie i najprostsza z opcji. Niektóre stare radia miały kod w procesorze takim jak Motorola HC05, HC09, HC11 itd..
Poniżej masz coś ciekawszego. Jak kodowało się przebieg w autkach które juz prawie nie jeżdżą po drogach Kiedyś czytało się pamięci a potem już weszły programy do zmian po linii diagnostyki.
Warto jednak zaznajomić się z tym tekstem by miec wyobrażenie jak przebieg może być zapisany Miłej lektury.
[quote]sposoby liczenia komórek stanu licznika : np : 175.000 km
1.Najbardziej typowy sposób zapisu tzw "FFFF - xxxx"
jednostka zapisu : 2 bajty
1.1 stan licznika zostaj podzielony przez 32 (lub 16) = 5468 (reszta z dzielenia odrzucona)
1.2 zamieniony na HEX = 155C
1.3 odejmujemy od FFFF nasz wynik = EAA3 (wynik)
2.Typowy sposób zapisu tzw "zamienione bajty"
jednostka zapisu : 2 bajty
2.1 stan licznika dzielimy przez 32 (ew 16 lub 4) = 5468
2.2 zamieniamy na HEX = 155C
2.3 zamieniamy bajty młodszy ze starszym = 5c15 (wynik)
3.Sposób zapisu tzw "FFFF minus i zamienione bajty"
jednostka zapisu : 2 bajty
3.1 stan licznika dzielimy przez 32 (ew 16 lub 4) = 5468
3.2 zamieniamy na HEX = 155C
3.3 odejmujemy od FFFF nasz wynik = EAA3
3.3 zamieniamy bajty młodszy ze starszym = A3EA (wynik)
4.Tzw "zapis dziesiętny z sumą kontrolną" (np VW Corrado)
jednostka zapisu : 4 bajty
4.1 stan zapisany jest w notacji dziesiętnej w młodszych 3 bajtach = XX175000
4.2 XX jest sumą kontrolną wszystkich cyfr w zapisie HEX (1+7+5+0+0+0) = 13 (Dec) -> 0D (Hex)
wynik = 0D175000
5.Sposób "dec to hex 3 bity" (np BMW 5)
5.1 stan zamieniamy na HEX = 0124F8
5.1 bajty zapisujemy w przeciwnej kolejności = F82401
(uwaga : lepiej nie zmieniać najmłodszego bajtu) = xx2401
1. Najbardziej typowy tzw : 2 linijki
zapisane jeden po drugim wyniki naszych obliczeń 16 razy np :
00x0: EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3
00x0: EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3
x zapis w komurkach pod różnym adresem początku ale zawsze 0 jako najmłodszy bajt
2.Typowy zapis w jednej linijce
zapisane jeden po drugim wyniki naszych obliczeń 16 razy np :
00x0: EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3
x : j/w
3.Zapis w ciągu 16 (32) bajtowym
00x0: xx xx xx xx xx xx xx xx EA A3 EA A3 EA A3 EA A3
00x0: EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 EA A3 (ta linijka dla 32 bajtowego zapisu)
00x0: EA A3 EA A3 EA A3 EA A3 xx xx xx xx xx xx xx xx
x zapis w komórkach pod różnym adresem początku ale 8 jako najmłodszy bajt
4.Zapis w kolumnie
0060 : F8 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
0070 : F9 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
0080 : FA 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
0090 : FB 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
00A0 : FC 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
00B0 : FD 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
00C0 : F4 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
00D0 : F5 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
00E0 : F6 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
00F0 : F7 24 01 xx xx xx xx xx xx xx xx xx xx xx xx xx
ZMIENIAĆ TYLKO NAJSTARSZE BAJTY (24 01) w/g sposobu "dec to hex 3 bity"[quote]
Ech.... Widzę że temat trudny ale i jednocześnie bardzo ciekawy.
Żeby wszystko dokładnie zrozumieć będę musiał kilkanaście (jak nie kilkaset) dni posiedzieć nad tym.
Zamianę liczb rozumiem. Czytałem już o tym kiedyś, a nawet przeliczałem.
Poza tym można łatwo to kalkulatorem w windowsie policzyć.
Ale tutaj na wstępie nasuwają się kolejne pytania: Skąd wiadomo w których bajtach zapisany jest przebieg w danym modelu?
Bo jak nie trudno się domyślić producent takich infrmacji raczej nie podaje Albo jeszcze inaczej zadam pytanie. Jak rozszyfrować co oznacza cały zapis bajtów, czyli za co który bajt odpowiada? Bo cały ten zapis to nie tylko przebieg. Czy trzeba po prostu wiedzieć samemu z lat doświadczenia co gdzie jest czy są jakieś uniwersalne wzorce co gdzie ma być?
Oczywiście zdaję sobie sprawę że pytania które zadaję dla niektórych wydają się zabawne ale dla mnie jest to niejasne więc pytam.
Ok.
Temat mnie zaciekawił na tyle że nabyłem do testów sterownik z jakiegoś starszego samochodu.
Teraz biorę się za zgłębianie wiedzy i nabywanie doświadczenia.
Tematu nie zamykam bo podejrzewam że pytań będzie więcej.
Postaram się aby kolejne były już bardziej konkretne.
Ech. I na wstępie pojawił się problem.
Do testów kupiłem sterownik z Audi A4 B5. Siedzi tam kość B58196.
Programator mam Revelprog. Zgodnie z instrukcjami z internetu odczytałem pamięć jako 93c46.
Tylko nie wiem jaki ty wybrać: 8 bit czy 16 bit.
Dałem to i to i wyszły dwa różne wyniki. Porównałem to z wsadami z internetu i wydaje mi się że wyszły jakieś głupoty.
Czy mógłby ktoś obeznany w temacie zerknąć na to?
Proszę o podpowiedzi co robię źle.
I na wstępie pojawił się problem.
Do testów kupiłem sterownik z Audi A4 B5. Siedzi tam kość B58196.
............ Zgodnie z instrukcjami z internetu odczytałem pamięć jako 93c46.
Tylko nie wiem jaki ty wybrać: 8 bit czy 16 bit.
Proszę o podpowiedzi co robię źle.
Powróć do własnego poprzedniego postu gdzie napisałeś:
"Teraz biorę się za zgłębianie wiedzy i nabywanie doświadczenia. "
Przegapiłeś ten ważny element jako łącznik pomiędzy software i hardware!
Wskakując do pędzącego pociągu, bądź przygotowany że się trochę 'poobijasz' (uszkodzisz).
To jest dokładnie to co próbujesz robić.
A tak dla rozjaśnienia: EEPROM oderwany od programu nie znaczy absolutnie nic użytecznego, nawet to nie stanowi części programu.
Tylko współpracujący z nim program "wie" kiedy, i z którego adresu pobrać zmienną (8-bitową, 16-bitową czy też 32-bitową) i traktować to jako liczbę albo tekst. Ludzie mający pewne doświadczenie wiedzą, że na przykład: w sterowniku Audi w EEPROM pod adresem: powiedzmy 0x7A1 znajduje się n-bitowa informacja zawierająca kod radia. Program główny pobiera tę informację i porównuje z drugą informacją pobraną z odbiornika. Jeżeli są zgodne, to wyśle na lokalną sieć CAN informację (być może również wziętą z innego adresu EEPROM) załączającą odbiornik radiowy. To tylko taka mocno skrótowa/poglądowa informacja mająca na celu wyhamowanie cię abyś zbędnie nie tracił czasu....
e marcus
Moderated By Marek_Skalski:
Poprawiłem pisownię. Proszę się trochę bardziej starać. Zawartość forum jest automatycznie tłumaczona na język niemiecki i język angielski. Wiadomości mało czytelne po polsku są jeszcze mniej czytelne w innej wersji językowej. Dziękuję.
Zgadzam się.
Ale pytałem też gdzie mogę zgłębić tę wiedzę. Najlepiej od podstaw. Czy są jakieś kursy bądź strony w internecie, które uczą podstaw?
Dobre porównanie z tym pędzącym pociągiem. I pewnie prawdziwe. Ale nikt nie mówi że niemożliwe.
A zauważyłem również, że ludzie wysyłają (nawet na elektrodzie) wsady z prośbą o pomoc i taką otrzymują.
Ja na sam początek chciałbym się dowiedzieć czy pamięć została poprawnie odczytana, oraz czy odczytywać ją jako 8 czy 16 bit.
Chcesz coś czytać jako 93C46 a czy przyszło Tobie do głowy ściągnąć i zajrzeć do noty katalogowej?
Przeczytałbyś tam, że ta pamięć ma pin ORG. Kiedy pin ma połączenie z VCC to organizacja jest 16 bitowa a kiedy połączony z GND to 8 bitowa.
To wszystko jest napisane w pierwszych pięciu zdaniach w nocie....Spojrzyj na ścieżki po wylutowanej pamieci...
Mało znajdziesz moich pytań na forach bo zazwyczaj szukam rozwiązania sam. Wtedy nauczysz się najszybciej bo przy okazji poszukiwania odpowiedzi musisz przeczytać dziesięć razy więcej.
Jak będziesz dostawał odpowiedzi to dużo ciekawej innej wiedzy Cię omija a mogłaby się przydać przy innym temacie i tak sprawa się zapętla.
Widziałem notę katalogową. Nie zagłębiałem się jeszcze w takie szczegóły. Odpowiedź jak najbardziej pomocna.
Natomiast z tego co czytałem w tych samochodach odczytują ją jako 16 bit.
Zauważyłem na płycie że nóżki DC, ORG, i GND są połączone, czyli z tego wynika że powinna być odczytywana jako 8 bit.
Ale spokojnie. postaram się też sam dojść do tego, bo widzę że ktoś obeznany zaraz się denerwuje jak zadam banalne dla niego pytanie.
Dla mnie było to niejasne dlatego zapytałem. Oczywiście z dnia na dzień staram się w miarę możliwości pogłębiać swoją wiedzę, zarówno w programowaniu jak i w odczytach. Jest tego bardzo dużo dlatego proszę o wyrozumiałość.
Dodano po 2 [godziny] 23 [minuty]:
Po dokładniejszym zagłębianiu się chyba rozumiem dlaczego ma być odczytywana jako 16 bit.
Skoro nóżka ORG połączona jest z uziemieniem oraz z nóżką DC (czyli Dont Connect), oznacza to że należy traktować ją jako nóżkę nie podłączoną.
Czytając dalej notę katalogową wynika z tego że jeśli nóżka ORG jest nie podłączona należy pamięć czytać jako 16 bit. )
Więc już mogę świętować swój mały sukces. Chyba że się mylę to proszę o poprawienie mnie.