Skip to content
Menu
FM POLAND
  • FM Poland
    • Start
    • Aktualności
    • Wydarzenia
      • Już niedługo
    • O projekcie
    • Co tworzy sieć FM Poland?
    • Zasady FM POLAND
    • Kodeks Krótkofalowca
    • Polityka prywatności
    • Aktualne grupy
    • System numeracji grup
    • Opis znaków w FM Poland
    • Kody DTMF w FM Poland
    • Galeria FM
  • Przemienniki
    • Przemiennik SP4
      • SR4EL Elbląg
    • Przemiennik SP5
      • SR5GM Grodzisk Maz.
      • SR5MM w Mińsku Maz.
      • SR5RAD Radom
      • SR5RR w Warszawie
      • SR5S w Siedlcach
    • Przemiennik SP7
      • SR7OS Ostrowiec Świętokrzyski w FM Poland
    • Przemiennik SP8
      • SR8LLB w Lubartowie
      • SR8LSD TETRA w Świdniku
      • SR8LSW w Świdniku
      • SR8LW Łuków
      • SR8PPN w Urszulinie
  • Wiedza
    • Jak to działa?
    • Konstrukcje
    • Ciekawe linki
    • Kącik SP0DZ
      • DasboardPi
      • Konstukcje
  • Dashboard
    • Dashboard
    • Live Mapa
  • ♥ Pomagam ♥
    • Wsparcie dla projektu
    • Wesprzyj FM Poland
    • Wspieraj 1.5 procent
    • Zgoda Donatora
  • Stowarzyszenie
    • Regulamin FM-POLAND
    • Deklaracja przystąpienia
  • Kontakt
    • Rejestracja w FM POLAND
    • Rejestracja Grupy Rozmownej
    • Formularz Kontaktowy
    • Zaproś FM Poland
    • Ankieta Satysfakcji
FM POLAND

Projektowanie interfejsów PTT i SQL dla SvxLink na Raspberry Pi (Debian 12 / Bookworm)

Opublikowano 2023-12-182026-09-13

Budując sprzętowy interfejs (ROIP) dla oprogramowania SvxLink na bazie Raspberry Pi modeli Zero, Zero 2W, 3, 3B, 4, najczęstszym problemem, z jakim mierzą się konstruktorzy, jest niekontrolowane kluczowanie nadajnika (PTT) podczas uruchamiania systemu oraz błędne odczytywanie stanu blokady szumów (SQL/COS). Poniższy opis nie dotyczy, kiedy stosujemy modyfikowane karty dźwiękowe C-Media CM1xx, np. CM108, CM119 itp., bo wtedy nie używamy GPIO z pinów GPIO Raspberry PI.

W systemie Debian 12 (Bookworm) zaszły zmiany w obsłudze portów – zrezygnowano ze starego systemu /sys/class/gpio na rzecz nowoczesnego standardu gpiod. Ten poradnik wyjaśnia, jak poprawnie zaprojektować i skonfigurować porty GPIO, aby Twój przemiennik lub węzeł simplexowy działał stabilnie i bezpiecznie od pierwszej sekundy po włączeniu zasilania.


1. Pułapka sprzętowa: Anatomia pinów GPIO (0-8 vs 9-27)

Procesor Raspberry Pi po resecie lub włączeniu zasilania konfiguruje wszystkie piny jako wejścia, ale narzuca im domyślne stany sprzętowe (Pull-Up / Pull-Down). Zignorowanie tego faktu to najprostsza droga do spalenia końcówki mocy w radiu lub zablokowania częstotliwości.

  • Grupa GPIO 0 do GPIO 8 (Domyślny stan: WYSOKI / Pull-Up):
    Na tych pinach po włączeniu zasilania pojawia się napięcie 3.3 V. Stan ten utrzymuje się przez kilkadziesiąt sekund – dopóki system operacyjny się nie zabootuje, a usługa svxlink nie przejmie nad nimi kontroli. Co jest niebezpieczne, jeśli np. svxlink nie uruchomi się z powodu błędnej konfiguracji lub z innych przyczyn, możesz mieć włączony cały czas nadajnik TRX.
  • Grupa GPIO 9 do GPIO 27 (Domyślny stan: NISKI / Pull-Down):
    Na tych pinach po włączeniu zasilania panuje całkowita cisza – napięcie wynosi 0 V.

2. Projektowanie portu PTT (Nadawanie)

Załóżmy, że Twój klucz PTT (np. na tranzystorze NPN lub transoptorze) wymaga stanu wysokiego (3.3 V) z Maliny, aby otworzyć klucz i uruchomić nadajnik w radiu (Active High).

Co się stanie, jeśli wybierzesz pin z zakresu GPIO 0 – 8 (np. GPIO 4)?

W momencie włączenia Raspberry Pi, na pinie natychmiast pojawi się 3.3 V. Nadajnik zacznie nadawać i będzie siał w eterze pustą nośną przez około 30-50 sekund, dopóki SvxLink się nie uruchomi i nie wymusi stanu niskiego.

Jak to rozwiązać?

  1. Złota zasada projektowania: Dla sygnałów PTT sterowanych stanem wysokim zawsze wybieraj piny z zakresu GPIO 9 – 27 (np. GPIO 17). Po restarcie na pinie będzie 0 V i nadajnik pozostanie bezpiecznie wyłączony.
  2. Rozwiązanie w config.txt (jeśli musisz użyć GPIO 4):
    Możesz zmusić Raspberry Pi, aby natychmiast po wykryciu zasilania ściągnęło dany pin do 0V. W tym celu edytuj plik konfiguracyjny: nano /boot/firmware/config.txt
  3. Dopisz na samym końcu wymuszenie stanu niskiego (dl = Drive Low) i ustawienie jako wyjście (op = Output) następujący tekst: gpio=4=op,dl
  4. Jeśli używasz płytki RF.Guru warto dla PTT zrobić wymuszenie stanu wysokiego (dh = Drive High) użyć wpisu: gpio=16=op,dh
  5. Po restarcie Malina wyłączy napięcie na GPIO 4 w ułamku sekundy, minimalizując niepożądane mignięcie nadajnika.

Ale używając do PTT GPIO z zakresu 0 – 8 możemy wpaść w drugą pułapkę. Kiedy wyłaczymy system w RPI via komendę poweroff lub shutdown now pomimo że system zostanie wyłaczony i sam RPI do procesora nie ma napiecia to szyna Raspberry PI nadala ma napięcie tzn wszystkie piny sa tak jak w stanie przed uruchmieniem systemu a więc mamy napięcia na PIN 1 i 2 oraz GPIO z zakresu 0 – 9 przywraca stan pierwotny czyli mają stan wysoki co spowoduje prze pewnych konstrukcjach układu PTT ze właczy sie nam nadajnik czyli zadziała PTT. Jest tak we wszystkich modelach RPI Zero, Zero 2W, 3B, 4, z wyjątkiem RPI 5, który ma na szynach GPIO wtedy 0 V. Załóżmy, że mam taki układ PTT jak na rysunku:

Musimy wtedy spróbować dołożyć zewnętrzny rezystor pull-down: 2k2 (lub 2.2-4.7kΩ), który w pełni samodzielnie rozwiąże oba problemy (boot i shutdown/crash), działając czysto sprzętowo. Rezystor należy dołożyć pomiędzy wejściem na GPIO 4 a masą.
Wpis config.txt możesz spokojnie zostawić jako dodatkową warstwę zabezpieczenia (nie koliduje z niczym — kiedy SvxLink faktycznie wystartuje i przejmie GPIO4 przez libgpiod, jego sterowanie i tak nadpisuje zarówno stan z rezystora, jak i z firmware) — ale nie jest już on konieczny, skoro masz rezystor. Jeśli wolisz uprościć konfigurację, możesz go usunąć bez żadnej straty bezpieczeństwa — cała ochrona teraz siedzi w samym obwodzie, niezależnie od software’u.


3. Projektowanie portu SQL / COS (Blokada szumów)

Układ blokady szumów przesyła sygnał do Maliny, informując SvxLink, czy na częstotliwości jest ruch. Ponieważ jest to port wejściowy, musimy dopasować konfigurację do logiki wyjściowej naszego radia.

W nowym SvxLink (korzystającym z gpiod) konfigurację polaryzacji wejść wykonujemy bezpośrednio w pliku /etc/svxlink/svxlink.conf za pomocą znaku wykrzyknika (!), który odwraca logikę (Active Low). Zapomnij o starych skryptach gpio.conf czy modyfikacjach w rc.local – są już nieaktywne.

Oto jak skonfigurować najpopularniejsze scenariusze w sekcji [Rx1] pliku svxlink.conf:

Scenariusz A: Radio daje 3.3 V (Stan Wysoki), gdy blokada jest OTWARTA (jest sygnał)

  • Wybór pinu: Najlepiej użyć pinu z zakresu GPIO 9-27 (np. GPIO 22), ponieważ ich domyślny stan niskiego podciągania (Pull-Down) zapobiegnie „wiszeniu” portu w powietrzu i fałszywym otwarciom, gdy radio jest odłączone.
  • Konfiguracja svxlink.conf:
    • [Rx1]
    • SQL_DET=GPIOD
    • SQL_GPIOD_LINE=22 # Brak wykrzyknika = czysty stan wysoki (3.3V = SQL otwarty) 

Scenariusz B: Radio daje 3.3 V (Stan Wysoki), gdy blokada jest ZAMKNIĘTA (cisza), a spada do 0 V, gdy pojawia się sygnał

  • Wybór pinu: Tutaj idealnie sprawdzą się piny GPIO 0-8 (np. GPIO 5), ponieważ mają wbudowany Pull-Up, który naturalnie trzyma stan wysoki.
  • Konfiguracja svxlink.conf:
    Musimy poinformować SvxLink, że otwarcie blokady następuje przy spadku napięcia do 0 V (Active Low). Robimy to za pomocą wykrzyknika:
    • Rx1]
    • SQL_DET=GPIOD
    • SQL_GPIOD_LINE=!5 # Wykrzyknik (!) odwraca logikę (0V = SQL otwarty)


Podsumowanie dla konstruktora – Ściągawka

FunkcjaOczekiwany stan fizyczny do aktywacjiSugerowany zakres GPIOZapis w svxlink.confWpis w config.txt (Opcjonalnie)
PTTStan Wysoki (3.3 V = Nadawanie)GPIO 9 – 27PTT_GPIOD_LINE=17Niepotrzebny
PTTStan Wysoki (3.3 V = Nadawanie)GPIO 0 – 8PTT_GPIOD_LINE=4gpio=4=op,dl (Wymagany!)
SQLStan Wysoki (3.3 V = Ktoś mówi)GPIO 9 – 27SQL_GPIOD_LINE=22Niepotrzebny
SQLStan Niski (0 V = Ktoś mówi)GPIO 0 – 8SQL_GPIOD_LINE=!5Niepotrzebny

Złota zasada na koniec: Projektując interfejs od zera, najbezpieczniejszym podejściem dla PTT jest zawsze stosowanie logiki odwróconej (Active Low) na poziomie sprzętu (nadajnik włącza się zwarciem do masy). Wtedy, nawet w przypadku awarii zasilania, zawieszenia systemu operacyjnego lub odłączenia przewodu sterującego, Twój nadajnik pozostanie całkowicie bezpieczny i wyłączony.

Warto dodać zastrzeżenie, że reguła 0-8/9-27 jest pewna dla Pi modeli Zero, Zero 2W, 3, 3B, 4, ale na Pi 5 należy to zweryfikować fizycznie na konkretnej płytce przed podłączeniem PTT, np. poleceniem:

raspi-gpio get 0-27

⚠️ Ważna uwaga dla użytkowników czujników temperatury DS18B20 (1-Wire)

Wielu krótkofalarzy wyposaża swoje interfejsy w cyfrowe czujniki temperatury DS18B20 do monitorowania radiatora nadajnika. Domyślnie system Raspberry Pi OS (Raspbian) rezerwuje dla magistrali 1-Wire właśnie pin GPIO 4.

Jeśli Twój interfejs radiowy wykorzystuje już GPIO 4 do sterowania PTT, dojdzie do konfliktu sprzętowego, który może zablokować nadajnik lub uniemożliwić odczyt temperatury.

Jak przenieść czujnik DS18B20 na inny pin (np. GPIO 27)?

Musisz jawnie wskazać systemowi nowy pin dla magistrali 1-Wire. W tym celu:

  1. Otwórz plik konfiguracyjny: sudo nano /boot/firmware/config.txt
  2. Znajdź linię odpowiedzialną za 1-Wire i dopisz parametr gpiopin=27
    1. dtoverlay=w1-gpio,gpiopin=27
  3. Zapisz plik i wykonaj restart maliny (sudo reboot).

Czy domyślny stan niski na GPIO 27 ma znaczenie przy podłączeniu rezystora 4.7 kΩ?

Czujniki DS18B20 do poprawnej pracy wymagają zewnętrznego rezystora podciągającego (najczęściej 4.7 kΩ) wpiętego między linię danych (GPIO) a zasilanie 3.3 V.

Możesz się zastanawiać: Skoro GPIO 27 ma domyślnie sprzętowy stan niski (Pull-Down), to czy nie „pogryzie się” on z zewnętrznym rezystorem 4.7 kΩ (Pull-Up)?

Nie musisz się tym martwić. Wewnętrzny rezystor Pull-Down w procesorze Raspberry Pi ma bardzo dużą rezystancję (około 50 kΩ). Kiedy podłączysz zewnętrzny, znacznie silniejszy rezystor 4.7 kΩ do linii 3.3 V, bez problemu „przemoże” on wewnętrzne podciąganie procesora. W efekcie, po włączeniu zasilania (a jeszcze przed załadowaniem systemu), na linii GPIO 27 i tak ustali się bezpieczny stan wysoki (~3.3 V) wymagany przez czujnik temperatury. Nie zakłóci to startu maliny ani pracy samego czujnika.

Autor artykułu nie ponosi odpowiedzialności za wykorzystane rozwiązanie i wynikające z niego skutki.


Statystyka

Statystka na dzień 13.07.2024 r. Zarejestrowanych na reflektorze
294 - Użytkowników
60 - Stacji Automatycznych

Nadchodzące wydarzenia

Aktualnie nie ma żadnych wydarzeń.

Ostatnie wpisy

  • FM Poland prosto z gwiazd
  • 🗣️ Sprawdź Swoje Audio
  • Ankieta Satysfakcji
  • PolStar🌠 w FM-Poland
  • Świąteczne Życzenia

Archiwa

  • wrzesień 2026
  • sierpień 2026
  • kwiecień 2026
  • marzec 2026
  • luty 2026
  • grudzień 2025
  • listopad 2025
  • październik 2025
  • sierpień 2025
  • czerwiec 2025
  • maj 2025
  • kwiecień 2025
  • luty 2025
  • styczeń 2025
  • grudzień 2024
  • listopad 2024
  • październik 2024
  • wrzesień 2024
  • lipiec 2024
  • czerwiec 2024
  • maj 2024
  • kwiecień 2024
  • marzec 2024
  • luty 2024
  • styczeń 2024
  • grudzień 2023
  • październik 2023
  • wrzesień 2023
  • sierpień 2023

Kategorie

  • DasboardPi
  • Jak to działa?
  • Już niedługo
  • Kącik SP0DZ
  • Konstrukcje
  • Konstukcje
  • Przemiennik SP4
  • Przemiennik SP5
  • Przemiennik SP7
  • Przemiennik SP8
  • Przemienniki
  • Wiadomości
  • Wiedza

#Polonia #TG Audio BF888 CM108 FM POLAND FM Suite Giełczyn GPIO Hotspot HPTerminal interlink Jak to działa? Kody DTMF konfiguracja Konstrukcje news OrangePIZero Przemiennik Przemiennik FM Quansheng RaspberryPI SA818 Schematy sieć fm SP2GUB SP2KRM SP2WLF SP4I SP4KDK SP4WZ SP9UVG SQ2DOL SQ2HEG SQ4FAE SQ4GIN SQ4MIK StarLink SVXLink UV-K5 UV-K6 Wiadomości Wiedza Zasilacz łomża

  • DasboardPi
  • Jak to działa?
  • Już niedługo
  • Kącik SP0DZ
  • Konstrukcje
  • Konstukcje
  • Przemiennik SP4
  • Przemiennik SP5
  • Przemiennik SP7
  • Przemiennik SP8
  • Przemienniki
  • Wiadomości
  • Wiedza
©2026 FM POLAND | Powered by SuperbThemes