Liczba magistral szeregowych jest imponująca RS232, i2c, SPI, 1-wire, USB, CAN, FireWire, ethernet... Równie imponująca jest różnorodność protokołow komunikacyjnych. Wiele mikrokontrolerów ma po kilka interfejsów komunikacyjnych. Łatwo dostępne są też kości obsługujące protokół jednego typu magistrali 'tłumaczące go na inny protokól. Np CAN-RS232. Każdy protokół (ale zwykle z ograniczeniami dotyczącymi szybkości transmisji) można zaprogramować. Zwykle ma to jednak jedynie wartość dydaktyczną. Zajmowanie jednostki centralnej do udawania układu peryferyjnego jest w większości wypadków pomyłką. Sprzętowy interfejs komunikacyjny poza realizacją protokołu ma z reguły szereg funkcji kontrolnych, których zaprogramowanie nie jest możliwe. JEDNĄ Z PODSTAWOWYCH REGUŁ MAŁO PODKREŚLANYCH W OPISACH WAŻNĄ DLA WIĘKSZOŚCI PROTOKOŁÓW JEST ZDOLNOŚĆ ( OBOWIĄZEK ) KAŻDEGO INTERFEJSU DO PERMANENTNEJ KONTROLI STANU LINII. 1/33
SPI Serial Peripheral Interface Wprowadzona przez MOTOROLĘ synchroniczna magistrala dla komunikacji typu master-slave. Nazywana czasem 4-wire: SCLK Serial Clock MOSI Master Output MISO Master Input SS Slave Select 2/33
Konwencja nazw nie jest ściśle przestrzegana Spotyka się SCK, CLK, SDI, DI, SI, SDO, DO, SO, ncs, CS, CSB CSN... BUS SPI MOŻE OPEROWAĆ Z POJEDYNCZYM MASTER I WIELOMA SLAVE MASTER ZAWSZE INICJUJE TRANSMISJĘ PRZEZ PRZYGOTOWANIE ZEGARA. JEGO CZĘSTOTLIWOŚĆ MUSI BYĆ MNIEJSZA LUB RÓWNA MAKSYMALNEJ CZĘSTOTLIWOŚCI AKCEPTOWANEJ PRZEZ ODBIORNIKI. ZWYKLE 1 70 MHz. NASTĘPNIE MASTER WYBIERA SLAVE'a PRZEZ LINIĘ SS ( ACTIVE LOW ) ZWYKLE POWINIEN ODCZEKAĆ NIM ZACZNIE NADAWAĆ CLOCK. W CZASIE KAŻDEGO CYKLU ZEGARA ODBYWA SIĘ TRANSMISJA FULL DUPLEX MASTER PRZESYŁA BITY LINIĄ MOSI, A SLAVE ODCZYTUJE JE Z TEJ SAMEJ LINII. RÓWNOCZEŚNIE SLAVE WYSYŁA BITY LINIĄ MISO, A MASTER CZYTA JE Z TEJ LINII. TAKA TRANMISJA WYMAGA ZWYKLE DWÓCH REJESTRÓW PRZESUWNYCH, JEDEN U MASTER'A JEDEN U SLAVE'A. TRANSMISJA ZWYKLE ZACZYNA SIĘ OD PRZESYŁANIA MSB (ALE MOŻE TO BYĆ PRZEDMIOTEM KONFIGURACJI NP. W AVR). TRANSMISJA MOŻE TRWAĆ DOWOLNĄ LICZBĘ CYKLI. ZWYKLE KOŃCZY SIĘ, GDY MASTER WSTRZYMUJE ZEGAR (I ZDEJMUJE WYBÓR SLAVE'A ) 3/33
GDY WIĘCEJ NIŻ JEDEN SLAVE WYSTĘPUJE W SIECI TO MOŻNA ROZRÓŻNIĆ DWA TYPY POŁĄCZEŃ: - SIEĆ NIEZALEŻNYCH ODBIORNIKÓW - SIEĆ ODBIORNIKÓW POŁĄCZONYCH SZEREGOWO ( DAISY CHAIN ) 4/33
MASTER WYBIERA CZĘSTOTLIWOŚĆ ZEGARA oraz KONFIGURUJE JEGO FAZĘ (CPHA) I POLARNOŚĆ (CPOL) CPOL i CPHA PRZYJMUJĄ WARTOŚCI 0 i 1 PRÓBKOWANIE (ODCZYT) ORAZ USTAWIANIE LINII DANYCH (MOSI I MISO) ODBYWA SIĘ PRZY ZMIANACH STANU LINII ZEGARA SCK CPOL = 0 CPHA = 0 SCK: ZBOCZE NARASTAJĄCE =ODCZYT OPADAJĄCE = ZAPIS CPOL = 0 CPHA = 1 SCK: ZBOCZE NARASTAJĄCE = ZAPIS OPADAJĄCE = ODCZYT CPOL = 1 CPHA = 0 SCK: ZBOCZE NARASTAJĄCE = ZAPIS OPADAJĄCE = ODCZYT CPOL = 1 CPHA = 1 SCK: ZBOCZE NARASTAJĄCE = ODCZYT OPADAJĄCE = ZAPIS 5/33
I2C - BUS MAGISTRALA WPROWADZONA PRZEZ PHILIPS'a WYMAGA DWÓCH LINII AKTYWNYCH I MASY LINIE AKTYWNE TO SDA LINIA DANYCH SCL LINIA ZEGARA 6/33
KAŻDE URZĄDZENIE DOŁĄCZONE DO MAGISTRALI MA SWÓJ UNIKALNY ADRES. KAŻDE MOŻE BYĆ ODBIORNIKIEM LUB NADAJNIKIEM JEST TO MAGISTRALA MULTIMASTER CO ZNACZY, ŻE URZĄDZENIE STARTUJĄCE TRANSMISJĘ STAJE SIĘ MASTER'em. ALE, ZATEM, POJAWIA SIĘ PROBLEM ARBITRACJI CZASOWE RELACJE SCL I SDA DEFINIJJĄ ISTOTNE ELEMENTY PROTOKOŁU. SEKWENCJA START SEKWENCJA STOP DANE OK, GDY SCL HIGH DANE ZMIENIAMY, GDY SCL LOW 7/33
TRANSMISJA DANYCH POTWIERDZENIE --- ACKNOWLEDGE 8/33
9/33
10/33
KLASYCZNE I2C STOSUJE 7-MIO BITOWE ADRESOWANIE W WERSJI ROZSZERZONEJ ADRES JEST 10-BITOWY. ALE NAWET WTEDY PO PIERWSZYCH SIEDMIU BITACH ADRESU NADAWANY JEST 8-MY BIT KIERUNKU NASTĘPNEJ TRANSMISJI N.B. LSB KIERUNKU = 0 OZNACZA, ŻE MASTER BĘDZIE PISAĆ (NADAWAĆ) KOLEJNY BAJT = 1 OZNACZA, ŻE MASTER BĘDZIE CZYTAĆ NASTĘPNY BAJT SYNCHRONIZACJA ZEGARA I ARBITRACJA DOSTĘPU DO MAGISTRALI.. SYNCHRONIZACJA OPIERA SIĘ NA POMYŚLE 'WIRED-AND WSZYSTKICH LINII SCL. SCL LOW JEST WYZNACZONY PRZEZ URZĄDZENIE O NAJDŁUŻSZYM OKRESIE LOW A STAN HIGH WYZNACZA URZĄDZENIE O NAKRÓTSZYM OKRESIE HIGH ARBITRACJA DOSTĘPU DO LINII OPIERA SIĘ NA POMYŚLE DOMINANT LOW LINII SDA (I WSPOMNIANYM OBOWIĄZKU CZYTANIA STANU LINII) 11/33
JESZCZE RAZ PRZYKŁADY RAMEK DLA TRANSMISJI DANYCH 12/33
CAN BUS Control Area Network Magistrala wymyślona dla przemysłu samochodowego przez BOSCH'a 13/33
RAMKI CAN MIKROKONTROLERY - MAGISTRALE SZEREGOWE CAN 2 A CAN 2 B 14/33
BARDZO BOGATA RAMKA 11-BITOWY LUB 29-BITOWY IDENTYFIKATOR IDENTYFIKOWANY JEST TYP KOMUNIKATU, NIE URZĄDZENIE! ROZWINĘTA DETEKCJA BŁĘDÓW TRANSMISJI DETEKCJĘ BŁĘDÓW MUSZĄ PROWADZIĆ STALE WSZYSTKIE URZĄDZENIA KAŻDE WYKRYCIE BŁEDU OZNACZA OBOWIĄZEK WYSŁANIA KOMUNIKATU BŁĘDU BŁĘDNY KOMUNIKAT JEST SKASOWANY U WSZYSTKICH (WĘZŁÓW) STAN WSZYSTKICH KONTROLERÓW JEST ODNOWIONY co to oznacza... KOMUNIKAT JEST POWTARZANY, A JEŚLI JEST WIĘCEJ CHĘTNYCH DO NADAWANIA, TO ODBYWA SIĘ ZWYKŁA ARBITRACJA DOSTĘPU TYPY WYKRYWANYCH BŁEDÓW BŁĘDY BITÓW - BIT STUFFING ERROR - ZWYKŁA NIEZGODNOŚĆ NADAWANIA/ODCZYTU U NADAWCY BŁĘDY KOMUNIKATU - SUMA KONTROLNA - BŁĄD RAMKI - BŁĄD POTWIERDZENIA KAŻDY WĘZEŁ MOŻE BYĆ W JEDNYM Z TRZECH STANÓW: ERROR ACTIVE ERROR PASSIVE BUS OFF 15/33
CAN BUS LENGTH Bus length (metres) Maximum bit rate (bit/s) 40 1 Mbit/s 100 500 kbit/s 200 250 kpit/s 500 125 kbit/s 6 km 10 kbit/s 16/33
17/33
18/33
19/33
20/33
http://www.interfacebus.com/glossary-of-terms-network-topologies.html 21/33
22/33
USB Pin Location, Type A Connector MIKROKONTROLERY - MAGISTRALE SZEREGOWE USB Pinout, Cable Assembly Pin Signal Name Description 1 VBUS Red 2 D- White 3 D+ Green 4 GND Black Shell Shield Drain 23/33
Extreme USB - USB Converter, Hub/Hub allows USB up to 100 meters 24/33
. 25/33
26/33
27/33
Przykład wyposażenia w interfejsy szeregowe 28/33
PRZYKŁAD OBSŁUGI INTERFEJSU RS232 WŁĄCZONEGO W SYSTEM PRZERWAŃ ZREALIZOWANY NA ADuC812 (ANALOG DEVICES) ZAŁOŻENIA DOTYCZĄCE KOMUNIKACJI: 1. ROZMAWIAJĄCE STRONY WYMIENIAJĄ KOMUNIKATY O DŁUGOŚCI NBYTE +1 (< 32). Pierwszy bajt komunikatu to NBYTE, po którym następuje NBYTE bajtów danych, 2. KOMUNIKACJA ODBYWA SIĘ BEZ KONTORLI PARZYSTOŚCI, 3. SZYBKOŚĆ TRANSMISJI, TAKTOWANIE PROCESORA, KONFIGURACJA TRYBU TRANSMISJI WŁĄCZAJĄCA UŻYCIE TIMERA1 ZOSTAŁA POPRAWNIE WYKONANA W PROGRAMIE GŁÓWNYM, 4. PĘTLA GŁÓWNA UŻYWA BANKU REJESTRÓW 0, W OBSŁUDZE PRZERWANIA OD ŁĄCZA RS232 UŻYWA SIĘ BANKU 1. 5. ODEBRANIE PEŁNEGO KOMUNIKATU SYGNALIZOWANE JEST (PROGRAMOWI GŁÓWNEMU) USTAWIENIEM FLAGI 9 (BIT 9 W BITOWO-ADRESOWALNYM OBSZARZE PAMIĘCI DANYCH) 6. ZAKOŃCZENIE NADAWANIA KOMPLETNEGO (N-BYTOWEGO) KOMUNIKATU SYGNALIZOWANE JEST USTAWIENIEM BITU 8 ;Przykład UART ISR (interrupt service routine) dla ADuC812 ;; FLAGS ; 08H serial input completed ; 09H serial transmission completed ; $MOD812 ;rodzaj include file, podającej asemblerowi słownik dotyczący ADuC812 ; ; Własne definicje nazw komunikowane asemblerowi ; STOS DATA 70H 29/33
PRZYKŁAD OBSŁUGI INTERFEJSU RS232 WŁĄCZONEGO W SYSTEM PRZERWAŃ ZREALIZOWANY NA ADuC812 (ANALOG DEVICES) ;Przykład UART ISR (interrupt service routine) dla ADuC812 KONTYNUACJA ; STOS DATA 70H STATUS DATA 22H BUFIN DATA 30H ;bufor dla komunikatów przychodzących CNB DATA 3FH ;NBYTE BUFOU DATA 60H ;bufor dla komunikatów wysyłanych BOLNG EQU 06H ;jego długość ; CSEG ;dyrektywa asemblera (raczej zbędna) ORG 000H ;ta za to BARDZO ważna: tu ładuj następujący fragment programu AJMP START ; stamtąd naprawdę zaczynamy, ale sprzęt ustawia początek na ZERO ;==================================================================== ; INTERRUPT SERVICES ;==================================================================== ; UPRZEDZAJĄC PEŁNE STUDIA OBSŁUGI PRZERWAŃ WIEDZMY, ŻE: - WEWNĘTRZNE UKŁADY PERYFERYNE MOGĄ ZGŁASZAĆ PRZERWANIA - NP. USART ZGŁASZA ODEBRANIE NOWEGO BAJTU DO REJESTRU SBUF - LUB ZAKOŃCZENIE WYSYŁANIA BAJTU Z REJESTRU SBUF (wyjściowego) - DLA ADuC812 TO ODDZIELNE FLAGI, ALE ADRES OBSŁUGI JEST JEDEN 30/33
PRZYKŁAD OBSŁUGI INTERFEJSU RS232 WŁĄCZONEGO W SYSTEM PRZERWAŃ ZREALIZOWANY NA ADuC812 (ANALOG DEVICES) KONTYNUACJA ORG 23H ;RSR232 ma tu sprzętowy adres dla obsługi przerwania PUSH ACC PUSH PSW SETB RS0 ;BANK 1 JBC TI,WYDAJ CLR RI ;przerwania było z powodu ODCZYTU bajtu przez usart ; MOV @R0,SBUF ;R0 zawiera bierzący adres buforze wejściowym CJNE R2,#00H,avan MOV CNB,@R0 ;NBYTE do CNB avan: MOV A,R2 CJNE A,CNB,avant SETB 8 ;ustaw czytanie komunikatu zakończone flaga 9 SJMP back avant: INC R2 ;izwiększ licznik przeczytanych bajtów INC R0 ;i adres dla przyjęcia kolejnego w buforze SJMP back WYDAJ: 31/33
PRZYKŁAD OBSŁUGI INTERFEJSU RS232 WŁĄCZONEGO W SYSTEM PRZERWAŃ ZREALIZOWANY NA ADuC812 (ANALOG DEVICES) KONTYNUACJA WYDAJ: CJNE R3,#00H,go SETB 9 ;transmisja zakończona MOV R1,#BUFOU MOV R3,#BOLNG ;można przygotować ewentualnie nowy adres i długość SJMP back go: MOV SBUF,@R1 DEC R3 INC R1 back: CLR RS0 POP PSW POP ACC RETI ;------------------------------------------------------------------ ; ORG 70H ;==================================================================== START: 32/33
PRZYKŁAD OBSŁUGI INTERFEJSU RS232 WŁĄCZONEGO W SYSTEM PRZERWAŃ ZREALIZOWANY NA ADuC812 (ANALOG DEVICES) KONTYNUACJA START: MOV SP,#STACK ANL STATUS,#00H ;clear STATUS ; ; initiate timer and serial transmission MOV TMOD,#00100001B ;Timer0, mode1, Timer1 mode2 MOV SCON,#92H ;SERIAL MODE 2,READ ENBL, TI UP MOV PCON,#80H ;DOUBLE SPEED, SMOD=1 SETB RS0 ;BANK1 MOV R0,#BUFIN MOV R2,#00H ;input buffer counter, used to count up MOV R1,#BUFOU MOV R3,#BOLNG ;out buf counter, used to count down CLR RS0 ; CLR 8 ;"new string completed and waiting" CLR 9 ;------------------------------------------------------------------------------------------- ; MAIN LOOP ; lupa: ; setb AJMP lupa END 33/33