12.07.2015 Views

Elektronika Praktyczna, kwiecień 2012 - UlubionyKiosk

Elektronika Praktyczna, kwiecień 2012 - UlubionyKiosk

Elektronika Praktyczna, kwiecień 2012 - UlubionyKiosk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Wprowadzenie doLinuksa embedded (7)Obsługa interfejsu SPIW związku z ogromnym zainteresowaniem artykułami z cyklu „Wprowadzenie doLinuxa Embedded” oraz związanymi z nimi pytaniami o obsługę urządzeń dołączonychdo magistrali SPI, w ramach uzupełnienia cyklu opisujemy sposób obsługi SPIz poziomu jądra systemu Linuksa.Krok po koroku Kursy EPInterfejs SPI zawdzięcza swoją popularność przedewszystkim swojej niezwykłej łatwości zastosowania orazdużej szybkości działania, która może być znacznie większaod szybkości transmisji za pomocą I 2 C. Implementacjainterfejsu jest łatwa zarówno po stronie urządzeniaperyferyjnego, jak i mikrokontrolera. Dodatkowo, wymaganiewielkich zasobów sprzętowych. Może ona byćzrealizowana za pomocą specjalizowanego układu peryferyjnego,interfejsu sprzętowego mikrokontrolera lubemulowana za pomocą linii GPIO. Podobnie jak dla interfejsuI 2 C w Linuksie istnieje specjalny podsystem obsługiSPI, pozwalający używać funkcji obsługi tego interfejsuw modułach przestrzeni jądra. A dodatkowo, sterownikspidev umożliwia dostęp z poziomu aplikacji przestrzeniużytkownika.W artykule zapoznamy się z: podsystemem SPI;mechanizmem mapowania sterowników jądra do urządzeń,a w przykładzie praktycznym ze sposobem obsługiinterfejsu SPI z poziomu aplikacji użytkownikana przykładzie modułu KAMOD-MEMS2, który zawieraakcelerometr komunikujący się przez SPI. W przykładzieużyjemy modułu spidev, a rezultat działania będziemywyświetlać na standardowym wyjściu (konsoli).Rysunek 1. Model podsystemu magistrali SPIObsługa interfejsu SPI w systemieLinuxImplementacja podsystemu SPI charakteryzujesię modelem warstwowym dzięki czemu system jestbardzo elastyczny i uwzględnienia możliwości działaniawielu magistral, wielu kontrolerów magistrali, jaki wielu urządzeń podłączonych do nich. Jest jest bardzopodobny do omówionego w poprzednim podrozdzialepodsystemu dla magistrali I 2 C. Na rysunku 1 przedstawionomodel podsystemu magistrali SPI.Sercem podsystemu jest SPICORE, który z jednejstrony komunikuje się ze sterownikiem sprzętowegokontrolera magistrali SPI, zaś z drugiej udostępnia niezależneod sprzętu API, umożliwiające innym sterownikomtrybu jądra korzystanie z jednolitego API. Sterownikkontrolera magistrali SPI jest odpowiedzialny zakomunikację ze sprzętowym kontrolerem SPI, udostępniającjednolite API, które jest wykorzystywane przezSPICORE. Sterownik może stanowić moduł obsługującyspecjalizowany sprzętowy kontroler SPI (dla platformyat91 jest to atmel_spi), lub w wypadku jego braku możeto być moduł generujący sygnały magistrali SPI programowoza pomocą linii GPIO. Istnieje również możliwośćbezpośredniego dostępu do magistrali z poziomuaplikacji użytkownika, co realizuje moduł SPIDEV, któryudostępnia dobrodziejstwa API SPI trybu jądra aplikacjomprzestrzeni użytkownika. Jednak w przeciwieństwiedo omówionego wcześniej interfejsu I 2 C, z tegopowodu, że adresowanie urządzeń dołączonych do SPIodbywa się z wykorzystaniem linii sprzętowych CS orazna różne dostępne tryby pracy SPI, podsystem wymagazdefiniowania i zarejestrowania struktury platform devicew kodzie jądra, która będzie zawierać informacjęo parametrach konfiguracji SPI przypisanych do danejmagistrali oraz linii CS.Każde urządzenie SPI, przypisane do danej linii CS,będzie widoczne w przestrzeni użytkownika jako plik /dev/spiX.Y ( gdzie X to numer porządkowy interfejsuSPI, natomiast Y to numer porządkowy linii CS). Jak jużwielokrotnie wspominano we wcześniejszych odcinkach,sam interfejs SPI nie jest urządzeniem realizującymkonkretne zadanie. Poprawnym sposobem wykorzystaniaurządzenia dołączonego do SPI (oraz innychinterfejsów) jest napisanie sterownika w przestrzeni ją-92 ELEKTRONIKA PRAKTYCZNA 4/<strong>2012</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!