Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

UART w HDD - migawka elektroda.pl

TechEkspert 21 Aug 2016 19:18 16233 4
  • UART w HDD - migawka elektroda.pl
    Niektóre dyski twarde wyposażone są w interfejs szeregowy wyprowadzony na piny obok złącza SATA. Podstawowe informacje można znaleźć w temacie: FAQ HDD Seagate i Samsung plus terminal - krótki opis. Komunikacja z dyskiem przez interfejs UART zwykle wykorzystywana jest do diagnostyki awarii lub w niektórych przypadkach do usuwania uszkodzenia (np. popularny kiedyś problem z ST3500320AS). Złącze na którym może być dostępny interfejs szeregowy kiedyś wykorzystywane było do zapewnienia zgodności dysków SATA II z SATA I:







    UART w HDD - migawka elektroda.plUART w HDD - migawka elektroda.pl
    Do połączenia z dyskiem potrzebny będzie konwerter USB<->UART 3.3V (obecnie popularny m.in ze względu na Arduino). Pin TX HDD możemy odnaleźć eksperymentalnie, sprawdzając kolejne piny i oczekując pojawienia się transmisji podczas startu dysku. Pin RX HDD można również ustalić eksperymentalnie, dla bezpieczeństwa włączając w linię TX konwertera rezystor 1kΩ. Prędkość transmisji zwykle wynosi 9600 lub 38400 lub 57600b/s.
    UART w HDD - migawka elektroda.pl





    Interfejs diagnostyczny można znaleźć także w starych dyskach PATA:
    UART w HDD - migawka elektroda.pl

    Niektóre komendy wysyłane do dysku mogą uszkodzić dane lub dysk, dlatego warto przeprowadzić próby ze zbędnym dyskiem twardym.

    Seagate:
    Podczas startu HDD Seagate zwykle zobaczymy krótki log np.:
    Code: text
    Log in, to see the code


    W przypadku HDD Seagate możemy rozpocząć od wysłania Ctrl+z,
    następnie możemy przełączać się po między poziomami poleceń wprowadzając "/numer_poziomu" i enter np. /2 poziom drugi.
    Dostępne są też komendy niezależne od poziomu np. "." aktualny status HDD.
    Przykładowo na poziomie 2 (/2), możemy wydać polecenia:
    Z - zatrzymanie wirowania dysku
    U - uruchomienie wirowania dysku
    i - uszkodzenia na aktualnej ścieżce
    itp.
    Na poziomie 3 wydanie polecenia:
    b - zaparkuje na chwile głowice
    D - wykona test szybkości dostępu ( w trybie random)
    ale np. na poziomie 7 wydanie tego samego polecenia oznacza co innego:
    D - wyświetla temperaturę
    Pełny wykaz poleceń otrzymamy na poziomie C (/C) wydając polecenie:
    Q - informacje o komendach ASCII

    Dla badanego dysku otrzymałem całkiem pokaźny zestaw poleceń:

    Code: text
    Log in, to see the code


    Tutaj: informacje o komendach terminala HDD Seagate.

    Znajdziemy tam dość egzotyczne komendy np. wykonanie testu mechanizmu pozycjonowania głowicy i wyświetlenie danych do wykresu Bodego...



    Sprawne dyski Seagate przy starcie nie są zbyt "gadatliwe" zwykle uzyskujemy informacje o poprawnym starcie, ew. dane o firmware lub modelu dysku, ilości pamięci, w przypadku dysków PATA o konfiguracji zworek. Czasami pojawia się informacja o dacie kompilacji firmware a czasami o autorze oprogramowania.

    Tutaj: więcej informacji o próbach dostępu do systemu "operacyjnego" HDD Samsung, oraz kontynuacja Link.

    Samsung:
    HDD Samsung podczas startu są bardziej "gadatliwe", otrzymujemy informacje o napięciu zasilającym, temperaturze prędkości obrotowej, wynikach testów, parametrach dysku, np.:

    Code: text
    Log in, to see the code


    Z trybu ENG> do trybu DBG> przełączamy się przyciskiem Esc, do ENG> wracamy komendą GO.

    Dostępne komendy uzyskujemy wpisując:
    HE
    Code: text
    Log in, to see the code


    Ogólnodostępna dokumentacja komend jest słabsza dla dysków HDD Samsung niż dla HDD Seagate, przykładowo:

    RT - reset, ponowne uruchomienie
    LB - informacje o HDD
    DV - informacje o firmware
    LL - prawdopodobnie sektory oczekujące na przeniesienie / uszkodzone

    Sprawdzanie kolejnych komend bez ich dokładnej znajomości może skutkować uszkodzeniem dysku (np. FE - to może być np. flash erase...).

    Dlaczego sprawdziłem ten sposób komunikacji z HDD?
    Taki sposób komunikacji z dyskiem stosuje się zwykle gdy wystąpił jakiś problem z HDD. Mam dwie maszyny gdzie nie mogę odczytywać SMART dysków. W jednym przypadku HDD pracują w prostym RAID1 obsługiwanym przez kontroler płyty głównej, w drugim przypadku HDD ukryty jest za kontrolerem realizującym Intel® Smart Response. Komunikację po UART z dyskiem chciałem wykorzystać do ciągłego monitoringu stanu dysku (zamiast S.M.A.R.T). Niestety w obu przypadkach były to dyski WD, które najprawdopodobniej nie miały wyprowadzonych linii UART na złącze obok złącza SATA.

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    TechEkspert
    Editor
    Offline 
    W moich materiałach znajdziecie testy i prezentacje sprzętu elektronicznego, modułów, sprzętu pomiarowego, eksperymenty. Interesuje mnie elektronika cyfrowa, cyfrowe przetwarzanie sygnałów, transmisje cyfrowe przewodowe i bezprzewodowe, kryptografia, IT a szczególnie LAN/WAN i systemy przechowywania i przetwarzania danych.
    Has specialization in: elektronika, mikrokontrolery, rozwiązania it
    TechEkspert wrote 4137 posts with rating 3431, helped 12 times. Been with us since 2014 year.
  • #2
    spamove
    Level 10  
    Rewelacyjny post, słowem komentarza tylko: dyski Samsunga mają czasami piny ułożone 2x2, interfejs jest wtedy taki:

    UART w HDD - migawka elektroda.pl

    co do pinu z *, w niektórych (głównie starszych) dyskach pozwala to wymusić tryb SATA I, w innych nie robi nic albo robi różne dziwne rzeczy.

    Dodano po 2 [godziny] 5 [minuty]:

    Po swoich testach, zamieszczam rozszerzoną listę "rozszyfrowanych" poleceń do Samsungów (mogą oczywiście być tu błędy, plus nie każdy dysk reaguje na wszystkie tak samo):

    dysk HD502IJ F1_3D:

    HE RT RC RF PD D DS DL DB DW DI M MD MS ML MB
    MW FB FW DX SB CA DN DT DG BI SP TP RB ZM DZ LE
    PP RP FE FU EP EF RD WR SK QT QB QK QN QA QL QS
    QG QW QR QD R0 R1 XT XL XN XA XC XE XS SL OU ST
    SU SD PK UV SM SG EI WI MI PR PW IF TF RU WU TI
    TU IC TC DV LI WS CB BD BS BC GO SS NS DA DR MR
    LL LM LR LS LV LT LB LD LC L4

    * ogólne

    klawisz Escape - wychodzi z trybu ENG do DBG
    HE - Help (wyświetla to, co wyżej, czyli listę poleceń)

    * polecenia grupy "R" + "PD" (typowe polecenia "serwisowe")

    RT - ReseT urządzenia
    RC - wyświetla "nagłówek" dysku heksadecymalnie (u mnie po przekonwertowaniu hex->ASCII można bez problemu znaleźć tam nazwę dysku, a także numer seryjny dysku i numer rewizji firmware)
    RF - wyświetla "nagłówek" firmware'u heksadecymalnie
    PD - wyświetla fragment firmware'u (heksadecymalnie), zawierający "IBR_SETL"

    * polecenia grup "D" "M" "F" i podobne (debugowanie)

    D DS DL DB DW DI
    M MD MS ML MB MW
    FB FW
    - prawdopodobnie dostęp do danych/pamięci firmware'u przy okazji debugowania (druga litera to (?) skrót od odpowiednio Short Long Byte Word)

    DX SB CA DN DT DG BI
    WI MI PR PW TF RU WU TU IC DB BS BC SS NS DA DR MR RP - j/w

    SP TP - ScriPt (prawdopodobnie uruchamiają skrypty z pamięci)

    ZM - "CmdZeroMC" (UWAGA: u mnie zrobiło "resetowanie" firmware'u)

    PP - uruchamia coś (?)

    FE - Flash Erase (zamienia HDD w awangardowy przycisk do papieru; nie polecam)

    TF RU WU RB SM EI TU DZ LE - ? (u mnie chyba NOP)

    IF - wykonuje "InitMcfs"
    TI - wyświetla różne informacje dotyczące wykonywanie kodu firmware'u (flagi, adres kodu, wskaźnik stosu itp.)
    LI - następne polecenie traktuje jako tablicę, i coś robi z nią ("EPOK"?)
    WS - wyświetla "DONE", więc *coś* robi.
    BD - wyświetla aktywne breakpointy do debugowania firmware'u
    GO - wychodzi z trybu DBG do ENG

    DV - u mnie NOP (za TechEkspert podaję, że w innych dyskach być może wyświetlać informacje o firmware)

    * polecenia grupy "X" (testy mechaniczne i ustawianie ich parametrów)

    XT parametr - bez parametru wyświetla możliwe "CLASS OF SERVO MEASUREMENT", z parametrem ustawia zadaną wartość
    XA - odpowiednik XT 10, ustawia tryb testu HEAD_MISALLIGN
    XN - odpowiednik XT 80, ustawia tryb testu NOTCH_ID
    XE - odpowiednik XT 4, ustawia tryb testu SEEK_TIME
    XC - uruchamia "servo spin Current test"
    XL - uruchamia "servo Latch force test" (nie polecam puszczać tego zbyt długo, szczególnie na starszych dyskach)
    XS - uruchamia "Servo head Stiction test"

    * polecenia pokrewne do poleceń "X" (komendy mechaniczne)

    SL - uruchamia "Servo Latch force test" w starych Samsungach (u mnie wyświetla komunikat "Latch force measurement command is changed from SL to XL")
    OU - park i Unlatch (najpierw jedno, potem drugie)
    ST - Servo STatus (status serwomechanizmu HDD)
    SD - SpinDown dysku
    SU - SpinUp dysku
    PK - ParK (parkuje głowicę dysku)
    UV - Unlatch głowicy dysku

    * różne polecenia

    R0 - wyświetla wartość "erase Rcc @ SrvC/H"
    R1 - wyświetla wartość "write Rcc @ SrvC/H"
    SG - wyświetla możliwe "CLASS OF SERVO SCANGRAY OPTION", ale najwyraźniej nie przyjmuje parametru

    * polecenia grupy "L" ("List")

    LL LM LR LS LV LT - "Number of defects" + lista "defect"ów, druga litera w poleceniu to typ defektu
    LB - różne info o HDD (np. serial, firmware rev. itp.)
    LD - lista "obszarów", w których są defekty, razem z ich adresami ABA, LBA itp.
    LC - ? (jakieś randomowe informacje)
    L4 - różne informacje o kalibracji i wzmocnieniu głowic

    * niesprawdzone (TODO)

    FU EP EF RD WR SK QT QB QK QN QA QL QS
    QG QW QR QD
  • #3
    TechEkspert
    Editor
    Dziękuję za ciekawe uzupełnienie.

    Zastanawiam się czy taki interfejs posiadają dyski SAS i czy posiadały go dyski SCSI.

    Mam w planach zajrzeć do jakiegoś dysku SSD i zobaczyć czy na płytce wewnątrz obudowy znajduje się interfejs debugujący, który zdradzi być może trochę więcej o wewnętrznym życiu dysku SSD a w szczególności jak pracuje wbudowany GarbageCollector, WearLeveling i jak przebiega (po jakim czasie), realizacja komendy TRIM.
  • #4
    Łukasz_W

    HDD and data recovery specialist
    TechEkspert wrote:
    Zastanawiam się czy taki interfejs posiadają dyski SAS

    Tak, w Seagate na przykład.
    W niektórych dyskach SSD również jest on obecny (SanDisk, Samsung).