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

Problem z połączenie do Atmega640 przez JTAG z wykorzystiem konwertera Sipeed

lech1212 09 Lis 2024 15:28 162 10
  • #1 21295439
    lech1212
    Poziom 7  
    Cześć,
    Potrzebuję odczytać oraz zmodyfikować rejestr pamięci w uC Atmega 640. Zainstalowany jest on w centrali wentylacyjnej, w której producent ma bug obracający czujniki temperatury. Niestety centrala jest już po gwarancji, a najbliższy serwis, który jest w stanie to zmodyfikować, ma ponad 300 km w jedną stronę. Pozostali jedynie proponują wymianę całej płyty głównej, bo nie mają interfejsu do centrali. Koszt wymiany płyty głównej to 30% centrali...

    Aktualnie znalazłem manual serwisowy do bliźniaczej centrali. Odnalazłem rejestry pamięci, które odpowiadają za wybór czujników. Czyli jest to do zrobienia i nawet wiadomo, co trzeba zrobić :)

    Niestety mam problem z podłączeniem się do mikrokontrolera. Zweryfikowałem złącze serwisowe i są tam wyprowadzone piny zgodne z pinoutem JTAG ICE - do weryfikacji jedynie reset (na tym pinie jest ciągle 3,3V). Zakupiłem Sipeed RV Debugger Plus, niestety próby połączenia z wykorzystaniem AVRDude kończą się niepowodzeniem:

    Zrzut ekranu z błędem podpisu urządzenia w AVRDude dla Atmega640

    Nigdy wcześniej nie korzystałem z JTAG. Czy może być to wina kiepskiego konwertera? Zamówiłem Arduino Leonardo do testów JTAG. Co powinienem robić dalej? Zakupić MPLAB SNAP lub Atmel ICE?
  • Pomocny post
    #2 21295725
    kamyczek
    Poziom 38  
    Po pierwsze masz program w postaci *.BIN albo *.HEX żeby go wgrać ,bo to jest podstawa żeby coś zacząć robić
    Poza tym mikrokontroler może mieć wyłączony interface J-tag i w tym przypadku nie będzie odpowiadał .
    Do wgrania możesz użyc MPLAB SNAP tylko trzeba w nim zainstalować odpowiednie oprogramowanie i zrobić niewielką modyfikację na pcb . Z reszta znajdziesz tu cały opis co i jak zrobić .
    Poza J-tagiem ten mikrokontroler ma jeszcze interfejs ISP i równoległu którym również da się go zaprogramować .
  • #3 21295888
    lech1212
    Poziom 7  
    Konkretnie wygląda to tak, posiadam centralę wentylacyjną firmy Vasco, producentem sterowników do niej jest firma Airios. Firma ta produkuje uniwersalne sterowniki do central wentylacyjnych z możliwością personalizacji. Znalazłem manual serwisowy do rekuperatorów Alnor, w którym opisywana jest modyfikacja rejestrów https://www.alnor.com.pl/assets/files/instrukcje-obslugi/Instrukcja-I2C%20Tool.pdf
    Jedyną różnicą, jaką widzę pomiędzy płytkami Alnor, Airios oraz Vasco, jest to, że w przypadku Vasco wyprowadzone zostało złącze z JTAG, a w przypadku Alnor jest to USB z I2C. Oznaczenia złącz, ogólny wygląd płytki jest praktycznie taki sam. Zdaję sobie sprawę, że rejestry pamięci nie muszą być identyczne. Jednak bez podłączenia się do mikrokontrolera nie jestem w stanie tego sprawdzić.

    Co do wyłączonego JTAG, to jest to jedyna możliwość podłączenia się do sterownika, a od serwisanta wiem, że można to naprawić bez konieczności wymiany całej płyty głównej.

    Z ciekawostek dodam też, że na modułach komunikacyjnych jest przycisk reset, z którego nie można korzystać, bo zacznie wysyłać dane na macierzysty serwer firmy Airios, a nie brandowany.

    Poniżej dodaję zdjęcia PCB dla central Alnor, Vasco oraz płytki Airios. Płytka drukowana systemu wentylacyjnego z oznaczeniami złącz i komponentów. Zdjęcie płytki PCB z elementami elektronicznymi. Płytka drukowana do centrali wentylacyjnej z różnymi komponentami
  • #4 21296693
    kamyczek
    Poziom 38  
    Rejestry deklarowane przez program nie mają nić współnego z rejestrami mikrokontrolera , z resztą odczyt i zapis zawartości mikrokontrolera ich nie dotyczy , bo są fizycznie w pamięci ram której programator nie zapisuje . Jtag był używany do analizowania i debugowania oprogramowania podczas uruchamiania układu . Nic z tym nie zrobisz jeśli nie będziesz miał zmodyfikowanego pliku z nowym oprogramowaniem którego nikt ci nie udostępni . Możesz albo kupić płytę uniwersalną albo swoją wysłać na serwiś i zaktualizować . Przypuszczam że producent i tak wyłączył j-taga i zablokował mikrokontroler przed odczytem bo to powszechna praktyka w celu nieautoryzowanego kopiowania urządzenia . Jedyna opcja to skasować i wgrać od nowa cały program , ale trzeba go mieć . Wracamy więc do tego co napisałem w poprzednim poście masz plik z aktualnym oprogramowaniem w formie *.bin albo *.hex , jeśli nie to nic sam nie zrobisz . Wyślij zapłać , albo kup nowy uniwersalny wybór należy do ciebie ...
  • Pomocny post
    #5 21296885
    TMSU
    Poziom 11  
    kamyczek napisał:
    Rejestry deklarowane przez program nie mają nić współnego z rejestrami mikrokontrolera , z resztą odczyt i zapis zawartości mikrokontrolera ich nie dotyczy , bo są fizycznie w pamięci ram której programator nie zapisuje .

    "Rejestr" nie oznacza tylko fizycznego rejestru rdzenia procesora czy peryferiala . Może to być jedna lub kilka komórek w pamięci np. EEPROM, która przechowuje jakieś konkretne dane, w protokołach komunikacyjnych też używa się pojęcia "rejestrów". W tym przypadku zapewne chodzi o modyfikację zawartości pamięć EEPROM, można to zrobić za pomocą JTAGa (nawet w zewnętrznej pamięci EEPROM na magistrali I2C), ale do tego potrzebny jest program, który współpracuje z konkretnym interfejsem JTAG (raczej nie pierwszym lepszym). Na podstawie tego dokumentu https://www.alnor.com.pl/assets/files/instrukcje-obslugi/Instrukcja-I2C%20Tool.pdf nie możesz bezpośrednio działać na pamięci, ponieważ nie jest tu jasno wskazane jakie typy danych są przechowywane i ile komórek pamięci konkretna dana zajmuje oraz gdzie ta dana w tej pamięci się znajduje.
    Napisz co Ty chciałeś tym AVRdude robić, odczytać pamięć EEPROM?
    lech1212 napisał:
    Zakupiłem Sipeed RV Debugger Plus

    Skąd wytrzasnąłeś informację, że ten debugger jest kompatybilny z AVRdude? Z tego co widzę jest na jakimś dziwnym chińskim układzie a nie na FT2232H.
    Tu masz listę obsługiwanych interfejsów JTAG przez AVRdude Appendix C List of Programmers

    Edit:
    Ok, widać jest to coś kompatybilnego
    Cytat:
    https://pl.aliexpress.com/i/1005002908614535.html?gatewayAdapt=glo2pol
    JTAG z RV debugger + może być używany bez sterownika w systemie Windows i Linux. Teoretycznie macOS jest taki sam. Oficjalny system ma zintegrowany sterownik ft2232. RV debugger symuluje standardowy FT2232HL. W teorii jest kompatybilny ze środowiskiem symulacyjnym FT2232 i może być używany. Zaleca się użycie łańcucha narzędziowego OpenOCD. Żaden sterownik nie jest wymagany do korzystania z wirtualnego portu szeregowego. Jeśli pod oknami pojawi się nieznany sprzęt, użyj narzędzia innej firmy, aby zainstalować sterownik (na przykład kreatora sterownika).

    Maksymalna szybkość komunikacji RV debugger JTAG wynosi 2.5Mhz, a szybkość transmisji obsługiwana przez wirtualny port szeregowy wynosi do 2MJTAG. Gowin FPGA nie jest tymczasowo obsługiwany.
    (Późniejszą aktualizację oprogramowania układowego można pobrać z: https://github.com/sipeed/RV-Debugger-BL702)

    więc teoretycznie powinien się skomunikować z procesorem.
  • Pomocny post
    #6 21296997
    kamyczek
    Poziom 38  
    Proponuje zapoznać się z budową avr i strukturą zabezpieczeń . Tam jak producent ustawił zabezpieczenie , a jak znam życie to to zrobił to nie działa OCD , i nie da się nic odczytać ani zapisać można tylko skasować te zabezpieczenia wraz z zawartościa pamięci programu . Prodcent pdłaczy JTAG da erase i skasuje program Potem wgra nowy i zabezpieczy koniec . Ale producent ma zawartość a bez niej tej procedury się nie zrobi ...
  • #7 21297124
    lech1212
    Poziom 7  
    >>21296997 No właśnie z instrukcji jakie udostępnia alnor wyraźnie jest napisane, żeby modyfikować komórki pamięci. Tutaj prawdopodobnie jest bardzo podobnie. Fragment instrukcji dotyczący podłączenia nagrzewnicy wstępnej.
    Dlatego uważam, że Airios który jest dostawcą nie zablokował możliwości odczytu oraz modyfikacji pamięci. W moim przypadku może być podobnie ale nie ma 100 % pewności.

    Dodano po 4 [minuty]:

    TMSU napisał:
    Napisz co Ty chciałeś tym AVRdude robić, odczytać pamięć EEPROM?

    Tak, chciałem odczytać pamięć. Pierwsze co to chciałem dokopać się do rejestrów w dokumentacji Alnor o numerach 110-113. Następnie zmienić ich wartość. Ale aktualnie utknąłem na podłączeniu się do AVR przez JTAG.

    Ale dobra wracając na początek. Czy teoretycznie ten programator powinien skomunikować się z tym Atmega 640? Ewentualnie mogę spróbować dolutować złączą do I2C tylko nie wiem czy to coś zmieni i czy będzie łatwiej skoro domyślnie producent korzysta z JTAG.
  • Pomocny post
    #8 21297137
    TMSU
    Poziom 11  
    kamyczek napisał:
    Proponuje zapoznać się z budową avr i strukturą zabezpieczeń . Tam jak producent ustawił zabezpieczenie , a jak znam życie to to zrobił to nie działa OCD , i nie da się nic odczytać ani zapisać można tylko skasować te zabezpieczenia wraz z zawartościa pamięci programu . Prodcent pdłaczy JTAG da erase i skasuje program Potem wgra nowy i zabezpieczy koniec . Ale producent ma zawartość a bez niej tej procedury się nie zrobi ...

    Proponuję lepiej analizować treść postów.
    >>21296997
    lech1212 napisał:
    Co do wyłączonego JTAG, to jest to jedyna możliwość podłączenia się do sterownika, a od serwisanta wiem, że można to naprawić bez konieczności wymiany całej płyty głównej.


    Weź miernik w ręce i sprawdź do których pinów procesora są podłączone piny złącza JTAG. Może okazać się, że złącze nie jest zgodne ze standardem, a do tego na tym złączu mogą być piny od UARTa (COMa).

    Narysuj i wstaw tutaj schemat, który pin z czym się łączy i jak podłączasz piny od debuggera do złącza JTAG
  • #9 21297273
    lech1212
    Poziom 7  
    TMSU napisał:
    Weź miernik w ręce i sprawdź, do których pinów procesora są podłączone piny złącza JTAG. Może okazać się, że złącze nie jest zgodne ze standardem, a do tego na tym złączu mogą być piny od UARTa (COMa).

    Narysuj i wstaw tutaj schemat, który pin z czym się łączy i jak podłączasz piny od debuggera do złącza JTAG


    Zweryfikowałem to już na samym początku. Pinout wyprowadzony na złączu serwisowym jest niemalże zgodny z pinoutem JTAG wykorzystywanym przez Atmel ICE.
    Schemat połączeń AVR JTAG z pinami TCK, TDO, TMS, TDI, GND, VCC, /RESET, TRST i NC.
    Jedyna różnica, jaką zaobserwowałem, to na pinie Reset jest ciągle 3,3 V oraz prawdopodobnie niepodłączona jedna masa. TCK, TDO, TMS oraz TDI mierzyłem bezpośrednio do wyprowadzeń na mikrokontrolerze. Tutaj mam pewność, że jest ok.

    Schemat połączeń poniżej.
    Schemat połączeń JTAG między konwerterem a ATmega 640.
  • #10 21297389
    vania
    Poziom 24  
    lech1212 napisał:
    Jedyną różnicą, jaką widzę pomiędzy płytkami Alnor, Airios oraz Vasco, jest to, że w przypadku Vasco wyprowadzone zostało złącze z JTAG, a w przypadku Alnor jest to USB z I2C.
    Niekoniecznie.
    Płytka która jest na zdjęciu czarno-biała (zgaduję że to Vasco) jest na procesorze AVR. Pewnie tak jak piszesz ATMEGA640. Natomiast pozostałe (na zdjęciach kolorowych) na jakimś procesorze firmy NXP. Coś z serii LPC + chyba zewnętrzna pamięć I2C.
    Zbliżenie na układ scalony NXP LPC na zielonej płytce PCB.
  • #11 21297424
    TMSU
    Poziom 11  
    lech1212 napisał:
    Jedyna różnica, jaką zaobserwowałem, to na pinie Reset jest ciągle 3,3 V

    Zmierz miernikiem czy reset złącza podłączony jest do resetu procesora oraz do zasilania procesora. Prawdopodobnie te 3,3V to z pullupa. Jeśli Reset na złączu nie jest połączony z 3,3V tylko z procesorem, to podaj masę na reset i wtedy spróbuj połączyć się debugerem. Sprawdź czy pin 8 i 10 złącza nie są podłączone przez jakiś rezystor z którymś pinem procesora (może to są rx i tx uarta).
REKLAMA