Kiedyś projektowałem sprzęt PCI-Express, który wymagał pełnej obsługi hot-plug w sprzęcie i oprogramowaniu, i na pewno jest to możliwe, ale jest dość zaangażowany i wymaga szerokiej obsługi oprogramowania - sprzęt jest właściwie dość prosty. Musiałem zaprojektować sprzęt, a następnie wdrożyć obsługę BIOS (UEFI) i jądra (Linux) dla podłączania na gorąco dowolnych urządzeń PCIe przez światłowód i miedź.
Z punktu widzenia oprogramowania należy pamiętać, że PCIe kontynuuje model oprogramowania PCI, w tym koncepcje adresowania magistrali, urządzeń i funkcji. Gdy magistrala PCI jest wyliczana, odbywa się to jako pierwsze wyszukiwanie:
Wyliczanie PCIe jest zwykle wykonywane dwukrotnie. Po pierwsze, BIOS (UEFI lub inny) to zrobi, aby dowiedzieć się, kto jest obecny i ile pamięci potrzebuje. Dane te mogą być następnie przekazane do systemu operacyjnego hosta, który może przyjąć je takim, jakim jest, ale Linux i Windows często również wykonują własną procedurę wyliczania. W systemie Linux odbywa się to za pośrednictwem podstawowego podsystemu PCI, który przeszukuje magistralę, w razie potrzeby stosuje dziwactwa na podstawie identyfikatora urządzenia, a następnie ładuje sterownik, który ma pasujący identyfikator w swojej funkcji próbkowania. Urządzenie PCI jest identyfikowane poprzez kombinację jego identyfikatora dostawcy (16 bitów, np. Intel to 0x8086) i identyfikatora urządzenia (kolejne 16 bitów) - najczęstsze źródło internetowe znajduje się tutaj: http://pcidatabase.com / .
Niestandardowa część oprogramowania pojawia się podczas tego procesu wyliczania, a więc należy wcześniej zarezerwować numery magistrali PCI i segmenty pamięci dla potencjalnych przyszłych urządzeń - jest to czasami nazywane „ dopełnianiem magistrali ”. Pozwala to uniknąć konieczności ponownego wyliczenia magistrali w przyszłości, czego często nie można zrobić bez zakłóceń w systemie. Urządzenie PCI ma paski BAR ( rejestry adresów podstawowych), które zapytanie do hosta, ile i jakiego typu pamięci (pamięć lub przestrzeń we / wy) potrzebuje urządzenie - dlatego nie potrzebujesz już zworek takich jak ISA :) Podobnie, jądro Linuksa implementuje hotplug PCIe poprzez pciehp kierowca. System Windows robi różne rzeczy w zależności od wersji - starsze wersje (myślę, że XP) ignorują wszystko, co mówi BIOS i wykonuje własne sondowanie. Nowsze wersje, moim zdaniem, bardziej szanują ACDI DSDT dostarczone przez oprogramowanie układowe hosta (BIOS / EFI) i będą zawierać te informacje.
To może wydawać się dość zaangażowane i tak jest! Pamiętaj jednak, że każdy laptop / urządzenie z gniazdem ExpressCard (które obsługuje PCIe, ponieważ możesz mieć karty ExpressCard tylko na USB) musi to zrobić, choć ogólnie wypełnienie jest dość proste - tylko jedna magistrala. Mój stary sprzęt był przełącznikiem PCIe, który miał za sobą kolejne 8 urządzeń, więc wypełnianie stało się nieco bardziej skomplikowane.
Z punktu widzenia sprzętu jest to o wiele łatwiejsze. Styki GND karty stykają się najpierw, a my położyliśmy układ scalony kontrolera wymiany z LTC lub podobnego na karcie, aby sekwencyjnie zasilać po nawiązaniu połączenia. W tym momencie pokładowy układ ASIC lub FPGA rozpoczyna sekwencję uruchamiania i rozpoczyna próbę szkolenia łącza swojego łącza PCI Express. Zakładając, że host obsługuje hot- pluging i PCI Express SLTCAP / SLTCTRLzarejestruj się (w specyfikacji: Rejestr możliwości gniazda PCI Express, Rejestr kontroli gniazda PCI Express. Do tego jest również 1 i 2 - wystarczająca liczba bitów do podzielenia na dwa rejestry). ponieważ ten port został skonfigurowany w taki sposób, aby wskazywał, że port może być podłączany podczas pracy, oprogramowanie może zacząć wyliczać nowe urządzenie. Rejestr stanu gniazda (SLTSTA, rejestr stanu gniazda PCI Express) zawiera bity, które urządzenie docelowe może ustawić, wskazując na awarie zasilania, mechaniczne zwalnianie zwalniania i oczywiście wykrywanie obecności + obecność zmieniona.
Wyżej wymienione rejestry znajdują się w „Przestrzeni konfiguracji PCI (Express)”, która jest małym regionem mapy pamięci (4K dla PCIe) przydzielonej każdemu potencjalnemu bdf (magistrala: urządzenie: funkcja). Rzeczywiste rejestry zazwyczaj znajdują się w urządzeniu peryferyjnym.
Po stronie hosta możemy użyć PRSNT1 # / PRSNT2 # jako prostych sygnałów prądu stałego, które zasilają włącznik układu scalonego przełącznika zasilania, lub uruchomić do GPIO na chipsecie / PCH, aby wywołać przerwanie i uruchomić SW „hej, coś włożono” , znajdź go i skonfiguruj! rutyna.
Jest to wiele informacji, które nie odpowiadają bezpośrednio na twoje pytanie (patrz krótkie podsumowanie poniżej), ale mam nadzieję, że dają lepsze tło do zrozumienia procesu. Jeśli masz jakieś pytania dotyczące określonych części procesu, daj mi znać w komentarzu tutaj lub napisz do mnie e-mail, a ja mogę omówić dalsze + zaktualizować tę odpowiedź o te informacje.
Podsumowując - urządzenie peryferyjne musi być zaprojektowane z myślą o obsłudze hot-plug ze sprzętowego POV. Właściwie zaprojektowany host / gniazdo jest również zdolny do podłączenia podczas pracy, a na wysokiej płycie głównej spodziewałbym się, że będzie bezpieczny. Jednak wsparcie oprogramowania w tym zakresie jest zupełnie innym pytaniem i niestety jesteś zobligowany do BIOS-u, który dostarczył ci OEM.
W praktyce używasz tej technologii za każdym razem, gdy wyjmujesz / wkładasz kartę PCIe ExpressCard z komputera. Ponadto wysokowydajne systemy kasetowe (telekomunikacyjne lub inne) również regularnie korzystają z tej technologii.
Końcowy komentarz - zapisz plik PDF, który był połączony ze specyfikacją podstawową, PCI-SIG zwykle za to pobiera opłaty :)