Tym razem chciałbym zaprezentować opis magistrali SPI.
SPI (ang. Serial Peripheral Interfejs) jest to magistrala szeregowa stosowana w systemach opartych głównie o mikrokontrolery. Pozwala on na stosowanie synchronicznej, dwukierunkowej transmisji danych (full-duplex). Prędkość transmisji dostosowywana jest do najwolniejszego ze stosowanych układów.
Magistrala jest zbudowana z trzech linii:
Co do linii SCK od układu nadrzędnego będzie to wyjście, natomiast dla układu podrzędnego będzie to wejście. Linia CS jest wejście dla układu podrzędnego, sterowana jest z portu GPIO pracującego jako wyjście, podawane są na niego dwa stany wysoki w celu zablokowania transmisji, niski w celu nawiązania komunikacji.
Transmisja poprzez standardowy interfejs SPI odbywa się po 8 bitach czyli po jednym bajcie. Jako pierwszy transmitowany jest najbardziej znaczący bit.
Transmisja danych w tym interfejsie może odbywać się dwukierunkowo w trybie full duplex. Dzięki temu prędkość transmisji będzie znacząco zwiększona.
Taktowanie danych będzie się odbywać na narastającym zboczu sygnału. Transmisja rozpoczynana jest od wystawienia najbardziej znaczącego bitu na szynę danych. Jest on wstawiany razem z pojawieniem się zbocza opadającego na linii wybierającej układ. Po całej transmisji stan na linii wybierającej zostaje zamieniony na wysoki.
Co do łączenia wielu układów spotyka się dwa rozwiązania:
W pierwszej sieci SPI mogą pracować układy różnego typu.
Drugi sposób pozwala na łączenie układów tego samego typu. Linie CS i SCK połączone są w standardowy sposób.
Jeśli chodzi o transfer danych pomiędzy układem master a slave to należy pamiętać o przesyłaniu bitów tzw. dummy, których wartość wynosi od 0 do FF, przy transmisji po dwóch liniach. Spowodowane jest to tym, że dla tego protokołu każdy odczyt wiąże się z zapisem danych. Czyli jeśli chce się odczytać dane to należy przesłać do układu śmieci, czyli wspomniane wcześniej dummy bytes aby włączyć sygnał zegarowy i przesłać dane.
SPI
SPI (ang. Serial Peripheral Interfejs) jest to magistrala szeregowa stosowana w systemach opartych głównie o mikrokontrolery. Pozwala on na stosowanie synchronicznej, dwukierunkowej transmisji danych (full-duplex). Prędkość transmisji dostosowywana jest do najwolniejszego ze stosowanych układów.
Magistrala jest zbudowana z trzech linii:
- SCK - czyli linia sygnału taktującego
- MISO - wyjście danych z układu podrzędnego
- MOSI - wejście danych dla układu podrzędnego
- CS, SS - pozwala na wybranie układu który będzie przeprowadzał transmisję
Rys. 1. Podłączenie układu do magistrali [wikipedia]
Co do linii SCK od układu nadrzędnego będzie to wyjście, natomiast dla układu podrzędnego będzie to wejście. Linia CS jest wejście dla układu podrzędnego, sterowana jest z portu GPIO pracującego jako wyjście, podawane są na niego dwa stany wysoki w celu zablokowania transmisji, niski w celu nawiązania komunikacji.
Transmisja poprzez standardowy interfejs SPI odbywa się po 8 bitach czyli po jednym bajcie. Jako pierwszy transmitowany jest najbardziej znaczący bit.
Sposób przesyłania danych oraz sposoby łączenia
Transmisja danych w tym interfejsie może odbywać się dwukierunkowo w trybie full duplex. Dzięki temu prędkość transmisji będzie znacząco zwiększona.
Taktowanie danych będzie się odbywać na narastającym zboczu sygnału. Transmisja rozpoczynana jest od wystawienia najbardziej znaczącego bitu na szynę danych. Jest on wstawiany razem z pojawieniem się zbocza opadającego na linii wybierającej układ. Po całej transmisji stan na linii wybierającej zostaje zamieniony na wysoki.
Rys. 2. Przebiegi na liniach
Co do łączenia wielu układów spotyka się dwa rozwiązania:
W pierwszej sieci SPI mogą pracować układy różnego typu.
Rys. 3. Połączenie standardowe [google.pl]
Drugi sposób pozwala na łączenie układów tego samego typu. Linie CS i SCK połączone są w standardowy sposób.
Rys. 4. Połączenie tych samych układów SPI [google.pl]
Jeśli chodzi o transfer danych pomiędzy układem master a slave to należy pamiętać o przesyłaniu bitów tzw. dummy, których wartość wynosi od 0 do FF, przy transmisji po dwóch liniach. Spowodowane jest to tym, że dla tego protokołu każdy odczyt wiąże się z zapisem danych. Czyli jeśli chce się odczytać dane to należy przesłać do układu śmieci, czyli wspomniane wcześniej dummy bytes aby włączyć sygnał zegarowy i przesłać dane.