background image

maniek86

Blog:

2023

2022

Karta GPIO PCI z starego tunera TV PCI



Od pewnego czasu posiadam tuner PCI (bt878) na jeszcze analogową telewizję. Mimo, że analogowa telewizja już od długiego czasu jest nieaktywna na świecie to o to ta karta posiada wejście kompozytowe i S-Video. Jako iż mam aż dwie przechwytywarki na kompozyt po USB to ta karta leży w szafie i się tylko kurzy.

Ostatnio w sieci znalazłem krótki artykuł o wyprowadzaniu pinów GPIO z tej karty i nawet sterowniku do tego (sterownik nawet znajduje się już nawet w kernelu Linuxa). Prawdziwe karty GPIO na PCI/PCIe są drogie więc zainteresowany tym artykułem postanowiłem przerobić moją kartę.
Link do oryginalnego pomysłu, sterownika i inspiracji: https://bues.ch/cms/unmaintained/btgpio.html

Karta posiada 24 pinów GPIO działających na 5V, nie jestem pewny jakie jest maksymalne natężenie. Modyfikacje postanowiłem rozpocząć od rozlutowania demodulatora aby zrobić miejsce dla płytki prototypowej. Płytkę tą doczepiłem używając cyny i trochę kleju na gorąco. Następnie rozpoczęła się zabawa: lutowanie kabli do cienkich nóżek układu było paniką. Należało także przeciąć parę ścieżek aby piny były odłączone od wszystkiego (należy także sprawdzić tył płytki, gdyż niektóre ścieżki idą bezpośrednio pod układem i są wyprowadzane na drugą stronę). Poniżej wstawiam schemat i parę zdjęć z lutowania.



Źródło: https://static.lwn.net/kerneldoc/driver-api/gpio/bt8xxgpio.html






Gotowy rezultat lecz jeszcze nie ostateczny wygląda tak:



Podczas lutowania niestety z układu odpadła 1 nóżka z powodu mojego błędu – GPIO 2 (na zdjęciu widać nieprzylutowany jeden pin). No cóż, nikt nie jest idealny ale wystarczy mi 23 sprawnych pinów GPIO prawie za darmo. Pierwszy pin od lewej jest GND, VCC dolutowałem później. Zalałem klejem na gorąco układ aby zabezpieczyć całość. Na koniec jeszcze rozlutowałem porty karty – wiem, że powinienem to zrobić wcześniej ale jakoś tak wyszło. Dodałem jeszcze przewody i finałowa wersja wygląda tak:



Teraz kwestia sterownika. Od razu już teraz mówię, że nie ma sterownika na system Windows. Sterownik jest w kodzie Linuxa: https://github.com/torvalds/linux/blob/master/drivers/gpio/gpio-bt8xx.c. Najprawdopodobniej nie znajduje się już wraz z popularnymi dystrybucjami Linuxa (u mnie na Debianie 11 go nie było). Skompilowałem go poprzez pobranie kodu kernela, z wersji takiej samej co mam aktualnie u siebie i umieszczenie własnego Makefile w drivers/gpio. Raczej nie trzeba pobierać całego kernela, ale nie miałem czasu aby sprawdzić - powinno starczyć pobranie bt848.h i gpio-bt8xx.c i dodanie Makefile (Makefile użyty przez mnie możesz pobrać tu: https://maniek86.xyz/pliki2/blog_files/karta_gpio/Makefile). Po skompilowaniu sterownika wystarczyło usunąć moduł bttv poprzez `rmmod` i załadować skompilowany moduł przez komendę `insmod`. Należy także zainstalować programy do obsługi GPIO w Linuxie (w przypadku Debian/Ubuntu jest pakiet gpiod zawierający parę komend pokroju gpioinfo, gpioget, gpioset). Po załadowaniu modułu można sprawdzić sprawność przez wspomniane wcześniej komendy. Uwaga: biblioteki (np. do Pythona) napisane pod GPIO innych platform, np. Raspberry Pi nie będą działać! Teraz aby moduł ładował się przy starcie należy: dodać moduł bttv do blacklisty, skopiować skompilowany sterownik do odpowiednio folderu, odpalić depmod i zrestartować system. Polecam także dodać według poradników na internecie dostęp do urządzeń GPIO dla użytkowników non-root.

Nie jestem pewny czy karta dalej może być używana do przechwytywania – nie sprawdzałem tego (moduł po modyfikacji karty bttv sypał się na moim głównym PC, lecz na testowym komputerze już nie).

Co dalej?: GPIO karty udalo mi się sterować na ten moment z C, Pythona i NodeJS, używałem biblioteki libgpiod. Projekt może mieć potencjał, ponieważ karty z układami BT878 są tanie przez co umożliwiają podłączenie elektroniki bezpośrednio do komputera – może to mieć jakąś przewagę nad mikrokontrolerami. Układ posiada inne interfejsy, np. I2C: wystarczyłoby zrobić to samo co z GPIO i napisać sterownik aby go używać (kawałek kodu do tej karty do obsługi I2C nawet już widziałem). Można także zaprojektować własną płytkę PCB i zamiast trudnego lutowania każdego kabla, wystarczyło by po prostu przelutować układ.







Comments

No comments yet. Be the first!

Add Comment

* Required information
500
Captcha Image

17/01/2023 maniek86
Pytania i komentarze można również kierować na [email protected]