Raspberry Pi w slocie PCI
[image=IMG_3355]
Nie jest to takie wspaniałe, jak mogło by się wydawać (bo nie komunikuje się z PC), ale do tej pory chyba nikt jeszcze nie wpadł na taki pomysł. Może od początku. Od jakiegoś czasu mam skłonność do redukcji liczby zasilaczy i obudów w okolicy, chodzi w tym o kilka rzeczy, marnotrawstwo watów, zajmowane miejsce, ale przede wszystkim - zwolnione gniazdka. Domownicy mają tyle różnych elektronicznych zabawek, że doszło już do tego, iż za telewizorem są dwie, pięciogniazdkowe listwy zasilające, a wolne z tego jest całe jedno miejsce.
Dlatego ostatnimi czasy montuję sobie różne "customowe" zasilacze podobne do tego:
Ten konkretny model, podłączony do 12V zasilania pełni dwie funkcje - rozdzielacza i ładowarki do urządzeń ładowanych przez USB. Dzięki temu, jedno 12V/40W laptopowe źródło zasilania, jest w stanie podawać jedzenie bezpośrednio do sześciu urządzeń (wykorzystane są cztery). A poprzez wbudowaną ładowarkę USB nakarmi także do dwóch urządzeń USB jednocześnie, o ile sumarycznie nie pochłaniają więcej niż pięć amperów. Dzięki temu z całkowitej liczby siedmiu różnych zasilaczy ostał się ino jeden.
Ale co z tym Pi
Jak wiemy, Pi jest zasilane napięciem 5V. Można to robić przez wbudowane złącze µUSB, czego fanem nie jestem, lub przez złącze GPIO. Druga metoda zawsze wydawał mi się ciekawsza/lepsza, z dwóch powodów. Po pierwsze ograniczenia prądowe Pi a po drugie, rezygnując z zasilania przez µUSB pozbywamy się całkowicie wtyczek po jednej stronie płytki (nie mówię o wersji 2).
Gdyby ktoś chciał pytać, "ale co ty chcesz podłączyć, że potrzebujesz dużego prądu?!" - wyświetlacze LEDowe, głównie. Jeden matrycowy wyświetlacz LED 8x8 pobiera w szczycie 0,3A. Takich wyświetlaczy razem zestawiam 4‑5, co w najgorszym razie daje 1,5A.
Wracając do tematu, temu czemuś na wzór serwera przydałby się zdalny reset/włącznik, a poza tym ma w sobie niezbyt obciążony 300W zasilacz. To może by go wykorzystać? Moglibyśmy wykorzystać bardzo teoretycznie któryś z wewnętrznych portów USB, ale to nam zajmie cały port (włącznie z linią danych). Możemy się wpiąć bezpośrednio w złącze molex prowadzące do PSU, ale wtedy musimy jeszcze gdzieś wsadzić samo Pi (nie lubię jak coś w obudowie nie jest dobrze przykręcone) i zrobić przelotkę. I wtedy olśnienie, wolny slot PCI.
Slot PCI ma tę przewagę nad PCIe, że dostępna jest na nim cała gama napięć, 3v3 (+standby), +5V, +12V i -12V (i możemy z niego wyciągnąć z grubsza 25W). Nic tylko się wpiąć i korzystać, a "przejściówka" przy okazji załatwi problem z mechanicznym umiejscowieniem Pi w obudowie.
Idealnie byłoby gdyby w Pi dało się odpiąć regulator napięcia 3v3 bez potrzeby odlutowania go. Wtedy można wykorzystać linię 3v3 standby dostępną nawet kiedy komputer nie pracuje. Takiej opcji nie ma, także zostaje nam skorzystanie z 5V albo osadzenie na płytce regulatora przerabiającego 12V na 5V. Zastosujemy pierwsza opcję, bo prościej a poza tym to prototyp, najwyżej się zmieni. Do tego dwie dodatkowe zabawki, RTC oraz Atmega8, gdyż:
- Chcę przetestować jak wbudowany w Pi sprzętowy moduł SPI radzi sobie z programowaniem kontrolerów AVR programowanych przez SPI
- Ma dwa (w sumie trzy) wyjścia PWM (wentylatory)
- Pragnę przetestować driver do wentylatorów ATX, który wymóżdżyłem po tym jak zastosowanie TD62783AFG w innym projekcie nie wypaliło
- Toleruje wyższe napięcia, jak mi się coś zetknie do 5V, to nic mu się nie stanie, jak GPIO Pi zetknie się z 5V to "papa Pi" (już raz przerobiłem)
Oryginalnie chciałem wykorzystać szynę SMBus, (która jest dostępna na złączu PCI) do komunikacji miedzy Pi a serwerem. SMBus to nic innego jak I2C z nieco doprecyzowaną specyfikacją, także wyprowadzenia do tegoż są dostępne na złączu GPIO. Ale... Ale się nie da bo Linux. I rezystory, ale Linux jest większą przeszkodą. Pi ma zamontowane na szynie I2C rezystory podciągające je do 3v3, mają wartość 1k8 i trzeba je zdemontować, jeśli Pi ma być używane jako slave. Inaczej płynący przez SMBus prąd przekroczy wszystkie normy. Druga opcją jest zainstalowanie "voltage level-shiftera" na tych liniach, co przy okazji odizoluje trochę Pi od komputera. Ale nawet jeśli zmodyfikujemy sprzęt, to i tak nie możemy wykorzystać modułu i2c procesora w trybie slave (chociaż jest obsługiwany w sprzęcie) bo sam Linux nie posiada odpowiedniego wsparcia. A jestem zbyt leniwy aby takie wsparcie dopisać. Poza tym nie jestem pewien czy dokładna dokumentacja tego procesora jest dostępna w potrzebnym zakresie. Jedyną opcją wydaje się być wsadzenie między Pi a PCI dodatkowego układu posiadającego dwa moduły i2c albo jw. i realizacja transmisji programowo.
Tak czy inaczej zostaje nam wykorzystanie PCI tylko w ramach zasilania i rozszerzenia Pi o RTC i kilka testowych zabawek, włączając to opcję wywołania resetu serwera i ewentualnego wyłączenia wszystkiego (te funkcje realizowane przez AVR).
Jak widać złącze USB zostało zdemontowane, wystawało za bardzo w tył w stosunku do sieciowego, i tak nigdy do pi nie podłączyłem niczego poza modułem Bluetooth. Poza tym Pi dostanie jeszcze swój własny pełnowymiarowy dysk HDD (skoro już niedaleko jest odpowiednie źródło mocy) podłączony przez adapter USB, który wymontowałem z kieszeni zewnętrznej na takie właśnie dyski.
Suma summarum mamy:
- Porządnie mechanicznie osadzone Pi
- Zdalny reset komputera w którym siedzi
- Zdalne wyłączenie komputera w którym siedzi
- Sterowanie wentylatorem chłodzącym Pi (wydmuchuje ciepłe powietrze na zewnątrz)
- Monitorowanie napięć (no skoro Atmega8 ma adc...)
- Monitorowanie temperatur (bo DS18B20 i one-wire to nie problem dorzucić)
- Zegar RTC z podtrzymaniem
- I wszystko mieści się w slocie PCI jak powinno, nie wystaje i nawet śledzia dostanie ;)
- 6 kontrolek LED, z czego 3 sterowalne i wyprowadzone na śledzia
Swoją drogą ciekawostka: mini-PCIe ma wyprowadzone na sobie piny od interfejsu USB (Pi nie ma USB‑device, ale można mu je dodać, co już kiedyś zrobiłem), ani PCI, ani normalne PCIe takich nie posiadają, ale miało je... AGP. Nie wiem po co je miało AGP, znaczy wiem - aby puścić do monitora, tylko chyba nigdy takiego zastosowania nie widziałem.
Oraz fascynuje mnie zrobienie wersji na złączu PCIe, z opcjonalnym akumulatorem w ramach UPS i wpięciu się w +5V SB dostępne na wtyczce zasilania płyty głównej. Tylko wtedy dysk nie będzie dostępny w momencie kiedy główne obwody prądowe zasilacza są odłączone/na zasilaniu awaryjnym. Lubimy rozwiązywać takie problemy. :D
Notka: Bateria, LEDy i rezystory do dzielników napięcia (pomiar napięć) nie są jeszcze na nich zainstalowane.