SFP reader

SFP reader

SFP reader pozwala na odczyt pamięci oraz zmianę konfiguracji modułów SFP i SFP+. Obsługa jest możliwa poprzez graficzny interfejs webowy. Poza podglądem zawartości prezentuje on także opis poszczególnych rejestrów zaczerpnięty ze standardu.

Podstawowe parametry:
  • pozwala na odczyt pamięci oraz zmianę konfiguracji modułów SFP i SFP+,
  • obsługa poprzez graficzny interfejs webowy,
  • prezentuje opis poszczególnych rejestrów,
  • komunikacja z komputerem poprzez interfejs USB.

SFP jest skrótowcem od Small Form-factor Pluggable transceiver. Służy on do połączenia pomiędzy naszym urządzeniem, a zewnętrznym medium transmisyjnym. Najczęściej jest to laser ze złączem światłowodowym (fotografia 1a), albo wtyk RJ-45 (fotografia 1b) pozwalający na podłączenie miedzianej skrętki. Dostępne są także kable DAC (Direct Attached Cable), które powodują bezpośrednie połączenie wyjścia Tx z wejściem Rx po drugiej stronie (fotografia 1c). Na fotografii 2 została pokazana gotowa komputerowa karta sieciowa z dwoma złączami SFP+.

Fotografia 1. Przykładowe komponenty SFP: a) moduły światłowodowe; b) moduł z RJ45; c) kabel DAC

Dostępna jest szeroka gama złączy wymagających takiej samej obudowy, ale różniących się prędkością transmisji:

  • SFP (<= 1 Gbps),
  • SFP+ (10 Gbps),
  • SFP28 (25 Gbps),
  • SFP56 (50 Gbps).
Fotografia 2. Karta sieciowa z dwoma złączami SFP

Są też wersje typu quad (qSFP), w których dostępne są cztery linie transmisyjne, co zapewnia czterokrotnie większą szybkość przesyłania danych. Mają one jednak inną budowę mechaniczną i nie pasują do opisywanego urządzenia.

Rysunek 1. Rozmieszczenie sygnałów na wyprowadzeniach złącza SFP

Standard SFP+ jest zdefiniowany w normie [1]. Moduły SFP mają złącze w postaci krawędzi płytki PCB z wyprowadzeniami wykonanymi, jako 20 metalizowanych pół po obu stronach płytki. Jednak do jego połączenia z płytką używa się odpowiedniego gniazda oraz metalowej „klatki”, które zostały pokazane na fotografii 3.

Fotografia 3. Złącze i klatka dla modułu SFP

Rozmieszczenie sygnałów na wyprowadzeniach gniazda zostało pokazane na rysunku 1, a ich funkcjonalność została opisana w tabeli 1 i na rysunku 2.

Rysunek 2. Funkcje i kierunki sygnałów złącza SFP

Najważniejsze są dwa sygnały różnicowe:

  • RD, czyli odebrany sygnał, który dociera do naszego urządzenia,
  • TD, czyli sygnał nadawany, który wysyłamy do innego urządzenia.

Znajdują się tam osobne wejścia zasilania dla części nadawczej oraz odbiorczej, znajdziemy także sygnały pozwalające na kontrolę oraz sprawdzenie stanu modułu:

  • Tx_Fault – gdy jest w stanie wysokim informuje o błędzie nadajnika. Jest to wyjście typu otwarty kolektor, dlatego musimy je podciągnąć do zasilania za pomocą rezystora 4,7...10 kΩ;
  • Tx_disable – wejście pozwalające na sterowanie diodą laserową w nadajniku. Gdy panuje na nim stan wysoki jest ona wyłączona. Wejście to powinno być wewnątrz modułu podciągnięte do plusa zasilania za pomocą rezystora. Aby włączyć nadajnik należy wymusić na nim stan niski;
  • RS0/RS1 – wejścia pozwalające na wybór prędkości. RS0 dotyczy odbiornika, a RS1 nadajnika. Ich implementacja jest opcjonalna;
  • Mod_ABS – wejście to jest w module zwarte do masy. Po stronie urządzenia powinno być podciągnięte do plusa zasilania. Przy braku modułu panuje na nim stan wysoki, a po jego włożeniu zostanie ściągnięte do masy;
  • Rx_LOS – kolejne wyjście pracujące w trybie otwartego kolektora (podłączamy rezystor podciągający). Stan wysoki informuje, że na wejściu nie wykryto sygnału;
  • SDA i SCL – to dobrze znany Two Wire Interface (TWI, albo inaczej I2C). Pozwala na dostęp do pamięci konfiguracyjnej modułu.

Budowa i działanie

Schemat ideowy urządzenia został pokazany na rysunku 3. Głównym elementem jest mikrokontroler STM32F042F6. Dzięki synchronizowaniu swojego wewnętrznego generatora z sygnałem USB pozwala on na poprawną obsługę tej magistrali bez zewnętrznego rezonatora kwarcowego. Zwarcie zworki BOOT1 pozwala na włączenie bootloadera. Pozwala on na wgranie oprogramowania poprzez port USB, bez zewnętrznego programatora.

Rysunek 3. Schemat ideowy urządzenia

Złącze mikroUSB J2 służy do komunikacji oraz zasilania. Dioda D4 sygnalizuje obecność napięcia. Stabilizator U2 dostarcza napięcia 3,3 V dla mikrokontrolera oraz modułu SFP. Dodatkowo zasilanie sekcji nadajnika i odbiornika jest filtrowane przez cewki L1, L2 oraz kondensatory C7...C10. Złącze J5 umożliwia dołączenie modułu SFP.

Większość jego wejść i wyjść wymaga podciągnięcia do plusa zasilania, co zostało zrealizowane za pomocą rezystorów R6...R13.

Za pomocą zworki J4 możemy ustalić, czy część nadawcza i odbiorcza ma być sterowana. Gdy je zewrzemy trafią na nie sygnały z pary układów scalonych U3 i U4. Są to odpowiednio nadajnik i odbiornik linii różnicowej. Jeżeli chcemy używać urządzenia jedynie do odczytu i modyfikacji pamięci możemy ich nie montować (co znacznie zredukuje koszty urządzenia). Rezystor R14 terminuje linię odbiornika.

Diody LED D1...D3 prezentują stan modułu SFP: brak modułu, błąd odbiornika oraz błąd nadajnika. Można także wymusić ich miganie w celu identyfikacji sterowanego sprzętu.

Oprogramowanie

Oprogramowanie zostało napisane w języku C, z zastosowaniem biblioteki HAL udostępnionej przez producenta, a większość konfiguracji została wygenerowana w programie STM32CubeMX. Kod można pobrać z repozytorium [4].

Rysunek 4. Schemat blokowy programu sterującego pracą urządzenia

Schemat blokowy projektu prezentuje rysunek 4. Komunikacja odbywa się poprzez wirtualny port szeregowy udostępniony przez firmę STM32. Sterownik dla niego można pobrać z [6]. Kolejno odebrane bajty są przekazywane do maszyny stanów. Jej implementacje znajdziemy w pliku firmware/sfpexperiments/Src/parse.c. Dla parsera zostały przygotowane testy w Google Test. Przykładowy wynik testów regresyjnych wykonanych w serwisie Gitlab można zobaczyć w [5].

Listę obsługiwanych poleceń znajdziemy w tabeli 2. Polecenie B powoduje miganie diodami modułu. Jest ono przydatne do identyfikacji urządzenia, gdy podłączonych jest kilka modułów, na przykład przy eksperymentowaniu z komunikacją pomiędzy dwoma SFP. Komendy P pozwalają na obsługę wejść/wyjść konfiguracyjnych modułu. Rozkazy I i G służą do dostępu do pamięci I2C. I pozwala na odczyt/zapis pojedynczego adresu, natomiast G odczytuje całą stronę z pamięci. Ostatnia rodzina poleceń to R. Pozwalają one na zgrubne testowanie komunikacji. Możemy włączyć generowanie sygnału PWM na lini nadawczej. Drugi rozkaz uaktywnia moduł DMA, który zbiera do pamięci sto kolejnych próbek z wyjścia Tx. Pozwala to na proste eksperymenty z torem nadawczo/odbiorczym.

Interfejs graficzny

GUI zostało przygotowane w formie strony internetowej. Można je uruchomić w przeglądarce Chrome. Może być konieczne odblokowanie funkcji eksperymentalnych #enable-experimental-web-plat-form-features w chrome://flags. Stronę można otworzyć z adresu [7] albo z repozytorium: gui/index.html. Zobaczymy ekran podobny do tego z rysunku 5. Najpierw w lewym górnym rogu naciskamy Connect i z listy wybieramy odpowiedni port szeregowy.

Rysunek 5. Wygląd aplikacji webowej

Poniżej znajdziemy przyciski: Blink miga diodami, a Read memory wczytuje całą zawartość pamięci. Poniżej w panelu Pins znajdują się kontrolki pokazujące stan i pozwalające sterować wejściami i wyjściami modułu SFP. Aby uaktualnić stan klikamy przycisk Read pins. Ostatni panel I2C pozwala na odczyt i zapis pojedynczego rejestru pamięci.

Wartości odczytane z pamięci widzimy w prawej części okna. Górna część to lista rejestrów. Zakładkami A0 i A1 wybieramy interesującą nas stronę pamięci. Gdy klikniemy któryś z rejestrów w dolnej części okna wyświetli się jego opis. Na rysunku 6 pokazano fragment odczytanej pamięci. Opis rejestrów został przygotowany w formacie JSON. Znajduje się w pliku gui/sfp.js. Na jego podstawie generowany jest obraz w przeglądarce.

Rysunek 6. Przykład odczytanych rejestrów

Ostatnia zakładka TXRX pozwala na eksperymenty z nadajnikiem i odbiornikiem. Na rysunku 7 zostały pokazane dwa otwarte okna, dla dwóch modułów połączonych ze sobą.

Rysunek 7. Działanie trybu TXRX

Za pomocą przełącznika Send Tx signal włączamy nadawanie. Natomiast gdy naciśniemy przycisk Get RX Signal włączymy zbieranie danych, które następnie zostaną przesłane do komputera i wyświetlone w postaci ciągu zer i jedynek oraz graficznie.

Montaż i uruchomienie

Schemat płytki PCB został pokazany na rysunku 8. Montaż jest klasyczny, ale szczególną uwagę należy zwrócić na to, aby równo przylutować piny oraz klatkę dla złącza SFP. Jeśli tego nie dopilnujemy, to możemy mieć problemy z podłączaniem modułów. Zmontowany układ prezentuje fotografia tytułowa.

Rysunek 8. Schemat płytki PCB

Dla urządzenia została zaprojektowana prosta obudowa, którą można wydrukować na drukarce 3D. Projekt powstał w otwartym programie FreeCAD. Znajdziemy go w folderze case. Składa się z pudełka i pokrywki widocznych na rysunku 9.

Rysunek 9. Wizualizacja projektu obudowy

Aby wyprowadzić światło z diod LED na obudowę, można wkleić w otwory kawałek pręta z plexi. Pokrywkę można delikatnie przykleić klejem na gorąco.

Fotografia 4. Układ w obudowie

Zmontowany układ umieszczony w wydrukowanej obudowie prezentuje fotografia 4.

Rafał Kozik
rafkozik@gmail.com

[1] SFF Committee SFF-8431 Specification for SFP+ High Speed Electrical Interface
[2] Management Interface for SFP+ SFF-8472 Rev 12.3 SNIA SFF TWG Technology Affiliate Jul 29,2018
[3] SFF-8024 Specification for SFF Module Management Reference Code Tables
[4] https://bit.ly/3zI0z6C
[5] https://bit.ly/3ibSdOq
[6] http://bit.ly/37e7bw7
[7] https://bit.ly/39DY7TR

Wykaz elementów:
Rezystory: (SMD0603)
  • R1: 100 kΩ
  • R2: R5...390 Ω
  • R6...R9, R12, R13: 4,7 kΩ
  • R10,R11: 1 kΩ
  • R14: 100 Ω
Kondensatory:
  • C1, C3, C9, C10: 22 μF
  • C2, C7, C8: 100 nF
  • C4: 1 μF
Półprzewodniki:
  • D1...D4: dioda LED (SMD0603)
  • U1: STM32F042F6 (TSSOP20)
  • U2: TLV75533 (SOT23-5)
  • U3: ADN4661 (SO8)
  • U4: ADN4662 (SO8)
Inne:
  • L1, L2: 4,7 μH
  • J2: złącze mikroUSB
  • J5: złącze SFP
Artykuł ukazał się w
Elektronika Praktyczna
październik 2021
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów