Friday, July 17, 2015

Identyfikacja pinów i podłączenie się do portu szeregowego na przykładzie Cisco SPA 502G.

Kiedy byłem mały, chętnie rozkręcałem różne urządzenia elektroniczne, żeby zobaczyć co jest w środku i dowiedzieć się jak ono działa. Zwykle, po skręceniu sprzęt nadawał się już tylko na przycisk do papieru, w dodatku niektóre elementy cudownie się rozmnażały i choć skręcić się udało, jakieś śrubki czy sprężynki zostały luzem. Podobnie zresztą miałem z rowerem...

Dziś już jestem duży i więcej obwodów drukowanych mam na zewnątrz obudowy, niż w ich wnętrzu, jak przewidzieli producenci. 

Tym razem zajmiemy się rozkręceniem urządzenia, identyfikacją zakończeń (pinów) portu oraz podłączeniem się do urządzenia poprzez ten port- bootloader oraz uruchomienie się systemu. Nie spotkałem się z routerem, który wewnątrz lub w dokumentacji miałby opisany jasno port. Internet jest pełen już zidentyfikowanych pinów, do ogromnej ilości sprzętu, jednak do swojego modelu nie udało mi się znaleźć.

Jako przykład użyję aparatu IP Cisco SPA 502G. 



Będziemy potrzebować:

-multimetr
-przewody-piny. 
-przydatne będą krokodylki 
-konwerter USB-UART

Warto też (choć nie w przypadku SPA 502G) zaopatrzyć się w piny oraz narzędzia do lutowania. Może okazać się, że w Twoim routerze, czy też dekoderze, trzeba będzie przylutować przewody do płytki drukowanej. 





Aparat ten jest mi dobrze znany, mając na myśli jego standardowe zastosowanie. Przypomniało mi się, że nigdy nie zajrzałem do jego wnętrza, mimo, że wiele razy przychodziła taka myśl- jak zwykle nie miałem do niego dostępu, a potem o tym zapominałem :)

Do rozkręcenia obudowy nie wystarczy nam wkrętak-krzyżak. Śrubki jakie trzymają ten sprzęt w jednym kawałku są typu torx TR (tamper proof, security torx, etc.) Różni się tym od zwykłego torxa, że śrubka wewnątrz ma wystający "cypelek", mniej więcej na wysokość śrubki, który uniemożliwia odkręcenie. Ma to na celu zniechęcenie użytkownika, do zaglądania do środka. Zapewne w jakimś stopniu to działa, ale na nas będzie nieskuteczne. Jeżeli mamy akurat tego typu końcówkę (bit), nie będziemy mieli kłopotu z odkręceniem. Możemy te wkrętaki zakupić w dobrze zaopatrzonych sklepach z takim asortymentem, lub jeśli jesteśmy bardzo niecierpliwi, można sobie poradzić odpowiednio małym wkrętakiem płaskim. Wystarczy zablokować go pomiędzy wewnętrznym brzegiem a środkowym pręcikiem. Dość mocno dociskając wzdłuż osi śrubki, żeby nie uszkodzić jej krawędzi. Jest to stal twarda, jednak przy zbyt długim "gmeraniu", może okazać się, że krawędź wewnętrzna zaczyna robić się okrągła. 





Po rozkręceniu, zobaczymy płytę główną telefonu: 


i obok gniazda zasilania, kandydata na port szeregowy:


W pierwszej kolejności zidentyfikujemy masę układu (GND). Poza tym, by mieć pełną komunikację z urządzeniem, w dalszych etapach musimy znaleźć nadawanie (Tx) oraz odbieranie (Rx). Zasilanie i tak znajdziemy po drodze, jednak nie będziemy go używać. Skorzystamy z zasilania dedykowanego. Przykładanie napięcia z konwertera USB nawet do odpowiedniego pinu, może uszkodzić sprzęt!

Zwykle w takich urządzeniach znajdziemy ekranowanie w postaci metalowej obudowy (shielding), na której możemy testować ciągłość obwodu. W przypadku tego aparatu takiego ekranowania nie ma, ale dobrym miejscem będzie niewielka obudowa dookoła gniazda zasilania, którą widać częściowo na powyższym zdjęciu w lewym dolnym rogu. Jeśli nie mamy ekranowania, powinno być miejsce na nie - ścieżka dookoła chipsetu, z otworami na nóżki ekranowania, które zaginane są pod spodem płytki drukowanej. Takiego elementu moja płytka również nie posiada.

Przyjmijmy oznaczenie poszczególnych pinów od lewej do prawej 1-5.
Ustawmy multimetr w pozycji sprawdzenia ciągłości obwodu
Zetknięte ze sobą, podłączone do multimetra przewody-próbniki wskazują wartość +/- 0, w zależności od modelu, możemy być też informowani sygnałem dźwiękowym.

Sprawdźmy pin 1. 

NA TYM ETAPIE ZASILANIE NIE JEST PODŁĄCZONE DO BADANEGO URZĄDZENIA.

Dla wygody przymocowałem jeden przewód krokodylkiem do masy, drugi w podobny sposób do przewodu:

Zdjęcie 1


PIN 1: Odczytana wartość w moim przypadku to 001. Oznacza to, że pin jest bezpośrednio połączony z masą układu i znaleźliśmy właściwe zakończenie w pierwszej próbie. Bywa tak, że możemy GND rozpoznać po tym, że pin wyraźnie jest przylutowany do masy- od spodu widać 4-kierunkowy lut. Taka ocena pinu nie jest konieczna, ponieważ znalezienie masy jest bardzo proste.




Zdjęcie 2



PIN 2: Brak wartości, zbyt duży opór, lub obwód otwarty. 


Zdjęcie 3


PIN 3:  Odczytana wartość: 730 - jest to zbyt duży opór.


Zdjęcie 4


PIN 4: Odczytana wartość to 729, wniosek podobny jak w poprzednim przypadku.



Zdjęcie 5



PIN 5: Odczytana wartość to 366. Eliminuje to pin 5 jako masę. 


1- GND

Na tym etapie będziemy szukać kolejnych zakończeń: nadawanie, odbieranie, zasilanie. Będziemy postępować tak jak przed chwilą, z tą różnicą, że mając podłączony jeden próbnik do masy i jeden do nieznanego jeszcze pinu, podłączamy zasilanie do urządzenia i czekamy kilkanaście sekund na odczyty. Tym razem multimetr ustawiamy na badanie napięcia stałego, np. do 20V. 

Podłączamy przewody jak na zdjęciu 2 i włączamy sprzęt, tak, aby mógł się uruchamiać. 

Pin 2- 0,00V. 

Odłączamy zasilanie od aparatu, próbnik z pinu 2, przekładamy na 3. 

Pin 3- Widać wyraźne wahania w zakresie 3,25-3,26 V. Wstępnie możemy określić, że jest to zakończenie Rx, jednak nie ma tutaj żadnej reguły. Zidentyfikowanie tego pinu jest najbardziej kłopotliwe. Można przeprowadzić dodatkowy test: Podłączyć przewody-sondy pod łatwo identyfikowalny GND oraz prawdopodobny VCC (zasilanie), przyłożyć napięcie nawet na chwilę. Zwykle po odłączeniu zasilania wartość odczytywana na multimetrze będzie powoli spadać do 0V, nawet przez kilkadziesiąt sek. Przy badaniu w taki sposób GND oraz RX, powolny spadek napięcia nie pojawi się, lub będzie trwał bardzo krótki czas. To też nie jest reguła i nie daje 100% pewności. 
Do komunikacji jednostronnej PCB->PC wystarczy nam zidentyfikować GND oraz Tx. Kiedy zobaczymy, że urządzenie się uruchomiło, naciskamy na stałe jakiś klawisz, np spację, podłączamy Tx do Rx i sprawdzamy, czy na ekranie widać przesuwający się kursor. Jeśli nie, musimy szukać dalej. Czasem jest też tak, że ścieżki do Rx i Tx są wyraźnie cieńsze niż ścieżka do zasilania (warto sprawdzić od spodu). 

1-GND
2-?
3-RX

Pin 4- Podobnie jak poprzednio odłączamy zasilanie, przekładamy przewód sondy na pin 4, przykładamy zasilanie, obserwujemy. 

Po ok. 5-6 sekundach napięcie bardzo wyraźnie spada z 3,30 V do wartości bliskich 0V i taki objaw możemy zaobserwować co kilka sekund do momentu uruchomienia się urządzenia. To, jak wysokie spadki napięcia zarejestrujemy, zależy od klasy multimetra i szybkości z jaką będzie przedstawiał dane. Ponieważ urządzenie na etapie uruchamiania poszczególnych elementów systemu wysyła dane w pewnych "porcjach" i odstępach czasu, zidentyfikowaliśmy pin i wartości jako typowe dla kanału transmisji.

1-GND
2-?
3-RX
4-TX

Po zbadaniu pinu nr 5 obserwujemy stałą wartość 3,30V (to jest ok 0,05V więcej niż pin 3, co jest kolejnym nieśmiałym dowodem, że pin 3 odbiera dane. VCC możemy również sprawdzić mierząc obwód ze stabilizatorem napięcia- odczyt będzie podobny jak w przypadku GND.

1-GND
2-?
3-RX
4-TX
5- VCC


Nadszedł moment podłączenia naszego komputera do aparatu Cisco. 

Podłączamy nasz adapter do gniazda USB, najwygodniej będzie przez przewód przedłużający. Aby sprawdzić czy poprawnie działa, tzn. poza napięciem, o którym zwykle świadczy dioda, czy wysyła i odbiera dane, robimy pętlę pomiędzy Rx i Tx:




Sprawdzamy port, do którego podłączyliśmy konwerter:


sudokillall@sudo:~$ dmesg



...
...
...
[18091.923192] pl2303 5-1:1.0: pl2303 converter detected
[18091.935201] usb 5-1: pl2303 converter now attached to ttyUSB1

Widzimy, że jest to /dev/ttyUSB01

Łączymy się za pomocą np. minicoma:

sudokillall@sudo:~$ sudo minicom -D /dev/ttyUSB1 

I sprawdzamy, czy widzimy znaki, pisząc cokolwiek na klawiaturze:

Witaj w minicomie 2.7

OPCJE: I18n 
Skompilowany dnia Jan  1 2014, 17:13:19.
Port /dev/ttyUSB1, 22:10:14

Wciśnij CTRL-A Z po pomoc na temat specjalnych klawiszy

sprawdzam, czy to co piszę widać na ekranie


OK. Możemy podłączyć się do naszego telefonu konwerterem i zobaczyć efekty. 

Tx w telefonie podłączamy do Rx w adapterze
Rx w telefonie podłączamy do Tx w adapterze
GND łączymy z GND. 

Jeśli nie odłączaliśmy konwertera od usb, możemy zostawić minicoma otwartego (teraz już znaki wysyłane klawiaturą nie są widoczne na ekranie) i tylko podłączyć zasilanie do badanego telefonu:


hmm...

Mija pewien czas, aparat się uruchomił a na ekranie cisza. Dlaczego?
Nie wiemy jakie parametry transmisji są poprawne. Minicom domyślnie używa (widać na dole ekranu):

115200 8N1 | NOR | Minicom 2.7 | VT102 | Online 0:8 | ttyUSB1

Takie ustawienia są często spotykane, jednak w tym przypadku brak efektów. Spróbujemy zmienić prędkość transmisji (baud-rate) na inną:

115200
57600
38400
19200
9600

sudokillall@sudo:~$ sudo minicom -D /dev/ttyUSB1 -b 9600

Podłączamy zasilanie do aparatu, mija kila sek i:

Witaj w minicomie 2.7



OPCJE: I18n 
Skompilowany dnia Jan  1 2014, 17:13:19.
Port /dev/ttyUSB1, 22:21:22

Wciśnij CTRL-A Z po pomoc na temat specjalnych klawiszy


Basic POST completed...     Success.
Last reset cause: Hardware reset (Power-on reset)

PSPBoot1.4 rev: 1.4.0.6
(c) Copyright 2002-2008 Texas Instruments, Inc. All Rights Reserved.
 Press ESC for monitor... 1

(psbl) 

Booting...
Attached TCP/IP interface to dummy unit 254
Attaching network interface lo0... done.

Adding 8766 symbols for standalone.
CPU: TI TNETV1057 Communication Processor.  Processor #0.
Memory Size: 0xffe000.  BSP version 7.2.7.20.


        ========================================================
        Board           : TI TNETV1057 Communication Processor
        SOC             : Titan, ChipId: 0x7, Version: 2
        Cache           : Write-Back, Write-Allocate
        PSP Version     : 7.2.7.20
        Type            : BasePSP 7.2.7.20 Patch
        PSPWIZ Version  : 0.5
        MIPS freq       : 87500000 Hz,
        System Freq     : 87500000->  Hz,
        VBUS freq       : 81250000 Hz
        BasePSP mode    : Routing
        ========================================================
Model no: 1
appCreate: autoBootLevel=2
MXP environment is created.
About to create Idle Task
About to create Measurement Task
Idle Measurement Tasks created
Panic button enabled
Heartbeat started
Creating Golden Gateway application...
528 Load sipapp.o.z
528 LoadProtocolModule /bin/sipapp.o.z entry - ffs_fread
1120 LoadProtocolModule after reading size=996373
1120 LoadProtocolModule call ramfs_create fs_size=3145728
1120 Creating fs:/tmp 3145728
1124 Decompress app module.... start
4470 Decompress app module.... done
4470 loading sprvoip_app.os start
appmodule len=3115608
6652 loading sprvoip_app.os end
6652 Creating fs:/DR 49152
/DR created
6682 ========== app_main - call init_modules
6682 rate=500 kernel_tick=3341  user_tick=668 gettime=668
6682 ========== init_modules - call warmmem_mod_init
6682 ========== init_modules - call hal_board_init
6682 ========== init_modules - call init_const_table
decompress constdat successfully:523660
8034 ========== init_modules - call flash_init
flash_init . . .
  -- flash_raw_init . . .
  -- flash_fstr_init . . .
  -- flash_fsm_init . . .
  -- flash_license_init . . .
  -- flash_fpar_init . . .
  -- flash_custom_init . . .
  -- flash_fprv_init . . .
  -- flash_dhcp_prov_init . . .
flash_init done
11274 ========== init_modules - call pal_init
11898 ========== init_modules - call hal_board_init2
11900 ========== init_modules - call utl_init
11908 ========== init_modules - sysmsg_init
11910 ========== app_main - call nal_net_init
11910 ========== app_main - call SG_Init
DICT_getCurDictIndex, 1
12010 ---------------lcddev_open - call lcd_drv_init
12032 ---------------lcddev_open - call lcd_drv_open
12032 ---------------lcddev_open - after call lcd_drv_open
12036 ========== app_main - call PHN_preInit
15038 ========== app_main - call creat_app_threads
15040 ========== app_main - call nal_net_startup
15042 ============== nal_net_startup - check ethernet
0000007597 - DSPALLOC: AER instance 1, max_tail = 60 ms, usage = ( HS  HeS  GL_HS  GL_HeS )
0000007597 - DSPALLOC: AER instance 0, max_tail = 200 ms, usage = ( HS  HeS  HF  GL_HS  GL_HeS )


Brawo! Podczas uruchamiania możemy klawiszem ESC wejść do boot-menu. Poleceniem help wyświetlimy dostępne komendy. Każdą z nich lepiej poprzedzić słowem help, chyba, że mamy świadomość po co tu jesteśmy :)







1 comment: