Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Interfejsy można podzielić na synchroniczne (oddzielna linia zegara), np. I 2 C, SPI oraz asynchroniczne, np. CAN W rozwiązaniach synchronicznych zmiana częstotliwości zegara w trakcie transmisji danych nie wpływa na jej jakość Zygmunt Kubiak 2
Transmisja synchroniczna Zazwyczaj jeden z węzłów pełni funkcje master a zarządza transmisją (inicjuje) i generuje zegar Zygmunt Kubiak 3
I²C Zygmunt Kubiak 4
Magistrala I 2 C (ang. Inter IC) opracowana została na początku lat 80-tych w firmie Philips jako lokalny synchroniczny interfejs szeregowy (początkowo dla sprzętu audio-wizualnego), służący do wymiany danych pomiędzy układami scalonymi danego systemu. M 11-2014 Zygmunt Kubiak 5
Magistrala łączy układy programowalne 11-2014 Zygmunt Kubiak 6
Przykładowa sieć I²C (IIC - Inter Integrated Circuit) 11-2014 Zygmunt Kubiak 7
Magistrala I2C składa się z dwóch linii sygnałowych : SDA (serial data) - do przesyłania danych i SCL (serial clock) - do przesyłania sygnału taktującego, oraz linii masy. Obydwie linie magistrali I2C są liniami dwukierunkowymi. Dzięki przemyślanej konstrukcji magistrali I2C może być do niej podłączonych wiele układów 11-2014 Zygmunt Kubiak 8
Dzięki zastosowaniu tranzystorów z otwartym drenem w stopniu wyjściowym ( suma na drucie ) możliwe jest podłączenie do magistrali kilku i więcej układów komunikujących się ze sobą po szynie I2C. Obwody sterujące liniami SCL i SDA maja taka samą budowę i są przystosowane do pracy dwukierunkowej. Rezystory Rp są niezbędne. 11-2014 Zygmunt Kubiak 9
Transmisja bitów 0 jest sygnałem dominującym który wymusza stan linii 11-2014 Zygmunt Kubiak 10
Warunki Start i Stop 11-2014 Zygmunt Kubiak 11
Potwierdzenie transmisji bajta potwierdza zawsze odbiorca (9-ty bit 0 - sygnał 0 ) 11-2014 Zygmunt Kubiak 12
Procedura arbitrażu dwóch Master ów 11-2014 Zygmunt Kubiak 13
Przykład kompletnego procesu transmisji danych 11-2014 Zygmunt Kubiak 14
Transmisja danych do modułu Slave Odczyt danych z modułu Slave 11-2014 Zygmunt Kubiak 15
Kombinowany transfer z powtórzonym warunkiem Startu (kierunek transferu zależy od wartości bitów R/W) 11-2014 Zygmunt Kubiak 16
Transfer kombinowany. Master przesyła dane do dwóch węzłów Slave, jednego z 7-bitowym adresem i drugiego z adresem 10-bitowym. Pierwszy bajt 10-bitowego adresu rozpoczyna się od charakterystycznego ciągu 11110 11-2014 Zygmunt Kubiak 17
C8051F020 SMBUS/I²C 11-2014 Zygmunt Kubiak 18
C8051F020 SMBUS/I²C Master nadaje sekwencje danych 11-2014 Zygmunt Kubiak 19
C8051F020 SMBUS/I²C Master odbiera sekwencje danych 11-2014 Zygmunt Kubiak 20
C8051F020 SMBUS/I²C Slave nadaje dane 11-2014 Zygmunt Kubiak 21
C8051F020 SMBUS/I²C Slave odbiera dane 11-2014 Zygmunt Kubiak 22
Przykład czujnik ciśnienia BMP180 11-2014 Zygmunt Kubiak 23
Przykład czujnik ciśnienia BMP180 11-2014 Zygmunt Kubiak 24
Przykład czujnik ciśnienia BMP180 Współczynniki kalibracyjne zapisane w EEPROM 11-2014 Zygmunt Kubiak 25
Przykład czujnik ciśnienia BMP180 11-2014 Zygmunt Kubiak 26
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xAA + ACK - adres rejestru sterującego w BMP180 Starszy bajt rejestru 0xAA parametr AC1 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x1D + ACK - MSB 0x08 + NACK - LSB 11-2014 Zygmunt Kubiak 27
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xAC + ACK - adres rejestru sterującego w BMP180 Starszy bajt rejestru 0xAC parametr AC2 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0xFC + ACK - MSB 0x4F + NACK - LSB 11-2014 Zygmunt Kubiak 28
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xAE + ACK - adres rejestru sterującego w BMP180 Starszy bajt rejestru 0xAE parametr AC3 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0xCF + ACK - MSB 0x03 + NACK - LSB 11-2014 Zygmunt Kubiak 29
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xB2 + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xB2 parametr AC5 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x61 + ACK - MSB 0xFA + NACK - LSB 11-2014 Zygmunt Kubiak 30
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xB4 + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xB4 parametr AC6 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x3D + ACK - MSB 0xC8 + NACK - LSB 11-2014 Zygmunt Kubiak 31
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xB6 + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xB6 parametr B1 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x19 + ACK - MSB 0x73 + NACK - LSB 11-2014 Zygmunt Kubiak 32
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xB8 + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xB8 parametr B2 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x00 + ACK - MSB 0x1B + NACK - LSB 11-2014 Zygmunt Kubiak 33
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xBA + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xBA parametr MB 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x80 + ACK - MSB 0x00 + NACK - LSB 11-2014 Zygmunt Kubiak 34
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xBC + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xBC parametr MC 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0xD1 + ACK - MSB 0xF6 + NACK - LSB 11-2014 Zygmunt Kubiak 35
Przykład transmisji I²C - konfiguracja BMP180 0xEE (0x77 + bit R/W = 0 + ACK) adres BMP180, zapis 0xBE + ACK - adres rejestru sterującego w BMP180 Starszy baj rejestru 0xBE parametr MD 0xEF (0x77 + bit R/W = 0 + ACK) adres BMP180, odczyt 0x0A + ACK - MSB 0xD2 + NACK LSB 11-2014 Zygmunt Kubiak 36
Przykład transmisji I²C - konfiguracja BMP180 Przedstawiona powyżej korespondencja między mikrokontrolerem a sensorem BMP180 dotyczy odczytu współczynników kalibracyjnych (AC1, AC2, AC3, AC4, AC5, AC6, B1, MB, MC, MD), które są niezbędne dla obliczenia rzeczywistej wartości temperatury i ciśnienia Cała sekwencja podzielona jest na pakiety zaczynające się od adresu układu BMP180 i zakończone bitem NACK (wybór adresu BMP180, wybór adresu rejestru zawierającego współczynnik kalibracyjny, odczyt współczynnika kalibracyjnego) Każdy pakiet załączonej wyżej sekwencji, odczytuje jeden współczynnik kalibracyjny 11-2014 Zygmunt Kubiak 37
SPI Zygmunt Kubiak 38
SPI (ang. Serial Peripheral Interface) Opracowana w firmie Motorola Interfejs SPI umożliwia szybkie synchroniczne przesyłanie danych pomiędzy mikrokontrolerami, a także układami zewnętrznymi Transmisja odbywa się w trybie Master-Slave 11-2016 Zygmunt Kubiak 39
Sygnały sterujące MISO (Master In Slave Out) linia wejściowa danych dla układu Master MOSI (Master Out Slave In) - linia wejściowa danych dla układu Slave SS (Slave Select) linia wyboru trybu pracy układu, odpowiednik sygnału CS (Chip Select) SCK (Serial Data Clock) linia zegara Uwaga! czasem spotyka się inne oznaczenia sygnałów linii danych inna interpretacja SDI albo DIN niezależnie od układu, wejście danych SDO lub DOUT niezależnie od układu, wyjście danych 11-2016 Zygmunt Kubiak 40
Kierunki sygnałów dla układów Master i Slave Linia Układ Master Układ Slave MOSI Określa użytkownik Wejście MISO Wejście Określa użytkownik SCK Określa użytkownik Wejście /SS Określa użytkownik Wejście Uwaga! Sygnał CLK generowany jest zawsze przez układ Master Mikrokontrolery mogą być konfigurowane zarówno do pracy w funkcji Master jak i Slave 11-2016 Zygmunt Kubiak 41
Funkcje wyprowadzenia /SS Tryb Konfiguracja /SS Stan linii /SS Opis Slave Zawsze H Slave nieaktywny wejście L Slave aktywny Wejście H Master aktywny Master L Master nieaktywny Wyjście H Slave nieaktywny L Slave aktywny Uwaga! Sygnał CLK generowany jest zawsze przez układ Master Mikrokontrolery mogą być konfigurowane zarówno do pracy w funkcji Master jak i Slave 11-2016 Zygmunt Kubiak 42
Transakcja wymiany danych inicjowana jest zawsze przez układ Master, który również jest źródłem sygnału CLK Linie wyjścia danych muszą być w programie ustawione ręcznie W układzie Slave gdy sygnał /SS=1, wszystkie linie SPI są wejściami 11-2016 Zygmunt Kubiak 43
Magistrala SPI z jednym układem Master i wieloma układami Slave 11-2016 Zygmunt Kubiak 44
Aby transmisja pomiędzy mikrokontrolerem, a urządzeniem peryferyjnym przebiegała prawidłowo muszą być spełnione następujące warunki: zachowanie jednakowej długość danej (najczęściej 8 bitów lub wielokrotność tej liczby), taka sama kolejność wysyłania bitów (najczęściej od MSB do LSB, niektóre mikrokontrolery mają możliwość programowej zmiany tej kolejności), zgodna polaryzacja i faza sygnału zegarowego (w SPI dane wpisywane są jednym zboczem a przesuwane drugim) 11-2016 Zygmunt Kubiak 45
Przebiegi SPI dla mikrokontrolerów ATmega dla parametru określającego fazę zegara CPHA = 0 11-2016 Zygmunt Kubiak 46
Przebiegi Blok SPI mikrokontrolera ATmega 11-2016 Zygmunt Kubiak 47
Przykład kodu dla mikrokontrolerów ATmega 11-2016 Zygmunt Kubiak 48
Przykład kodu dla mikrokontrolerów ATmega 11-2016 Zygmunt Kubiak 49
Magistrala Microwire Magistrala synchroniczna podobna do SPI, firmowana przez National Semiconductor Sygnały SI (Serial Input Line) wejście rejestru przesuwającego SO (Serial Output Line) wyjście rejestru przesuwającego SK (Serial Clock) - zegar /CS (Chip Select) linia wyboru układu 11-2016 Zygmunt Kubiak 50
Magistrala Microwire Schemat bloku Microwire 11-2016 Zygmunt Kubiak 51
Magistrala Microwire Przykład obsługi pamięci EEPROM NMC93C06 (National Semiconductor) 11-2016 Zygmunt Kubiak 52
Magistrala Microwire Przykład konfiguracja (National Semiconductor) 11-2016 Zygmunt Kubiak 53
Magistrala Microwire Przykładowe przebiegi na magistrali Microwire (możliwość konfiguracji aktywnego zbocza i fazy sygnału zegarowego SK) 11-2016 Zygmunt Kubiak 54
Przykład C8051F020 11-2016 Zygmunt Kubiak 55
Przykład C8051F020 11-2016 Zygmunt Kubiak 56
Przykład C8051F020 11-2016 Zygmunt Kubiak 57
Przykład C8051F020 11-2016 Zygmunt Kubiak 58
Przykład moduł radiowy nrf24l01p 11-2016 Zygmunt Kubiak 59
Przykład moduł radiowy nrf24l01p 11-2016 Zygmunt Kubiak 60
Przykład moduł radiowy nrf24l01p, Rej. 0x06 11-2016 Zygmunt Kubiak 61
Przykład moduł radiowy nrf24l01p Operacje odczytu i zapisu 11-2016 Zygmunt Kubiak 62
Przykład nrf24l01p, radio.begin(); MOSI: 0x24, 0x4F MISO: 0x0E, 0x00 MOSI: 0x06, 0xFF MISO: 0x0E, 0x07 11-2016 Zygmunt Kubiak 63
Przykład nrf24l01p, radio.begin(); MOSI: 0x26, 0x07 MISO: 0x0E, 0x00 MOSI: 0x06, 0xFF MISO: 0x0E, 0x07 11-2016 Zygmunt Kubiak 64
Przykład nrf24l01p, radio.begin(); MOSI: 0x26, 0x27 MISO: 0x0E, 0x00 MOSI: 0x06, 0xFF MISO: 0x0E, 0x27 11-2016 Zygmunt Kubiak 65
Przykład nrf24l01p, radio.begin(); MOSI: 0x26, 0x27 MISO: 0x0E, 0x00 MOSI: 0x26, 0x07 MISO: 0x0E, 0x00 11-2016 Zygmunt Kubiak 66
Przykład nrf24l01p, radio.begin(); MOSI: 0x06, 0xFF MISO: 0x0E, 0x07 MOSI: 0x00, 0xFF MISO: 0x0E, 0x0C 11-2016 Zygmunt Kubiak 67
Przykład nrf24l01p, radio.begin(); MOSI: 0x20, 0x0C MISO: 0x0E, 0x00 MOSI: 0x3C, 0x00 MISO: 0x0E, 0x00 11-2016 Zygmunt Kubiak 68
Przykład nrf24l01p, radio.begin(); MOSI: 0x27, 0x70 MISO: 0x0E, 0x00 MOSI: 0x22, 0x4C MISO: 0x0E, 0x00 11-2016 Zygmunt Kubiak 69
Przykład nrf24l01p, radio.begin(); MOSI: 0xE2 MISO: 0x0E MOSI: 0xE1 MISO: 0x0E 11-2016 Zygmunt Kubiak 70
Przykład nrf24l01p, radio.begin(); Sekwencja generowana przy wywołaniu funkcji radio.begin() dotyczy konfiguracji układu nrf24l01p MOSI: 0x24, 0x4F; 0x06, 0xFF; 0x26, 0x07; 0x06, 0xFF; 0x26, 0x27; 0x06, 0xFF; 0x26, 0x27; 0x26, 0x07; 0x06, 0xFF; 0x00, 0xFF; 0x20, 0x0C; 0x3C, 0x00; 0x27, 0x70; 0x22, 0x4C; 0xE2; 0xE1 Cała sekwencja z reguły podzielona jest na grupy 2-bajtowe Pierwszy bajt jest zawsze komendą, drugi to dana 11-2016 Zygmunt Kubiak 71
Przykład nrf24l01p, radio.begin(); Sekwencja generowana przy wywołaniu funkcji radio.begin() dotyczy konfiguracji układu nrf24l01p MOSI: 0x24, 0x4F; 0x06, 0xFF; 0x26, 0x07; 0x06, 0xFF; 0x26, 0x27; 0x06, 0xFF; 0x26, 0x27; 0x26, 0x07; 0x06, 0xFF; 0x00, 0xFF; 0x20, 0x0C; 0x3C, 0x00; 0x27, 0x70; 0x22, 0x4C; 0xE2; 0xE1 Np. 0x24 (001A AAAA) oznacza W_REGISTER, A adr. Rejestru Adr. Rej. 0 0100 - SETUP_RETR (Setup of Autom.Retransmission) Dana 0x4F (0100 1111) bity 7:4 ARD (Auto Retransmit Delay) bity 3:0 ARC (Auto Retransmit Count) Opóźnienie automatycznej retransmisji 1250μs oraz do 15 retransmisji 11-2016 Zygmunt Kubiak 72
Dziękuję Zygmunt Kubiak 73 09-200 6