To jest pytanie referencyjne. Usunąłem kilka komentarzy, które uczyniły to mniej oczywistym. (Na pytanie pytający odpowiada).
Nick Gammon
Odpowiedzi:
10
W tym samouczku, który prowadziłem na konferencji Embedded Linux Conference, próbowano odpowiedzieć na pytania, podając linki do bardziej szczegółowego opisu poruszanych tematów i wykorzystując praktyczny przykład prowadzenia drona 4WD, w którym Arduino Mini Pro działa jako niewolnik i kontroluje 4 niezależne koła . Oryginalny dokument można znaleźć tutaj .
Uwaga: Ta odpowiedź jest obecnie w toku, ponieważ dostosowuję podświetlenia z linku.
Typowe zastosowania magistrali I2C
Współpraca ze stosunkowo wolnymi urządzeniami peryferyjnymi. Np .: czujniki, siłowniki mechaniczne.
Kontrolowanie „szybkich” urządzeń peryferyjnych, które wykorzystują inne kanały do wymiany danych. Np .: kodeki.
W komputerze system operacyjny zwykle współpracuje przez I2C z:
mierniki temperatury i napięcia akumulatora;
sterowniki prędkości wentylatora;
kodeki audio.
W przypadku, gdy dostępnych jest wiele kontrolerów magistrali, urządzenia peryferyjne są pogrupowane według prędkości, dzięki czemu szybkie nie są karane przez wolniejsze.
Szybkie wprowadzenie do magistrali I2C - najważniejsze cechy
Autobus szeregowy.
Tylko 2 linie: Serial CLock i Serial DAta (plus masa).
4 prędkości: 100 kHz, 400 kHz, 1 MHz, 3,2 MHz.
Zazwyczaj 1 urządzenie nadrzędne i 1 lub więcej urządzeń podrzędnych.
Komunikacja jest zawsze inicjowana przez urządzenie nadrzędne.
Wielu masterów może współistnieć na tej samej magistrali (multi-master).
Otwarty odpływ: zarówno SDA, jak i SCL wymagają rezystorów podciągających.
„Rozciąganie zegara”
Master kontroluje SCL, ale niewolnik może go przytrzymać (ponieważ otwarty odpływ), jeśli musi wyregulować prędkość.
Kapitan musi sprawdzić ten scenariusz.
Niewolnik może utknąć i zablokować magistralę: potrzeba zresetowania linii z mastera do slave.
Zazwyczaj obsługiwane jest adresowanie 7-bitowe, ale także 10-bitowe.
Protokół logiczny: rzeczywiste poziomy napięcia nie są określone i zależą od poszczególnych implementacji. Np .: 1,8 V / 3,3 V / 5,0 V.
RTOS: pierwszeństwo, zadania, semafory, dynamiczny tik systemowy itp.
Mały ślad: link wykorzystuje tylko kod / dane.
Rozróżnienie między RTOS i BSP przez HAL.
GPLv3 do użytku niekomercyjnego.
Aktywnie rozwinięty, ale już dojrzały.
Obsługuje 8-bitowy AVR.
Jednak miał ograniczoną obsługę BSP dla AVR, brak: - przerywa sterownik dla AVR GPIO (dodano). - Obsługa I2C dla trybu podrzędnego AVR (niestandardowe). Które musiały zostać opracowane osobno jako część oprogramowania Drone SW dla AVR .
Definiowanie parametrów komunikacji
Dla każdego koła:
Cykl roboczy sygnału PWM użytego do jego sterowania - 1 bajt. 0xFF = maksymalny moment obrotowy / 0x00 = brak momentu obrotowego.
Kierunek obrotu - 1 bajt.
0x00 = bezczynny
0x01 = wstecz
0x02 = naprzód
0x03 = zablokowany
Średni okres między szczelinami enkodera optycznego - 2 bajty.
Pisanie czegokolwiek resetuje pomiar.
Indeks parametrów - 1 kęs:
0 = cykl pracy
1 = Kierunek
2 = średni okres
Indeksy kół - 1 ostry:
0 = lewy tył
1 = prawy tył
2 = prawy przód
3 = lewy przód
4 = wszystkie
Sub protokół: Definiowanie rejestrów
Format rejestru: 0xαβ
- α = indeks parametru - β = indeks koła
Adres (wybrany dowolnie): 0x10
Format Bus Pirate:
- [= bit początkowy -] = bit końcowy - r = bajt odczytu - czasy adresowe 2 (lewy Shift 1), dla bitu R / W
Przykład - w formacie Bus Pirate
[i2c_addr reg_addr = (parm, wheel) reg_value]
[0x20 0x20 0x02] Left Rear Forward
[0x20 0x21 0x01] Right Rear Backward
[0x20 0x22 0x01] Right Front Backward
[0x20 0x23 0x02] Left Front Forward
[0x20 0x14 0xFF] Wheels set to max torque
Samochód obraca się zgodnie z ruchem wskazówek zegara.
Odpowiedzi:
W tym samouczku, który prowadziłem na konferencji Embedded Linux Conference, próbowano odpowiedzieć na pytania, podając linki do bardziej szczegółowego opisu poruszanych tematów i wykorzystując praktyczny przykład prowadzenia drona 4WD, w którym Arduino Mini Pro działa jako niewolnik i kontroluje 4 niezależne koła . Oryginalny dokument można znaleźć tutaj .
Uwaga: Ta odpowiedź jest obecnie w toku, ponieważ dostosowuję podświetlenia z linku.
Typowe zastosowania magistrali I2C
Kontrolowanie „szybkich” urządzeń peryferyjnych, które wykorzystują inne kanały do wymiany danych. Np .: kodeki.
W komputerze system operacyjny zwykle współpracuje przez I2C z:
W przypadku, gdy dostępnych jest wiele kontrolerów magistrali, urządzenia peryferyjne są pogrupowane według prędkości, dzięki czemu szybkie nie są karane przez wolniejsze.
Szybkie wprowadzenie do magistrali I2C - najważniejsze cechy
Referencyjne adresy URL:
Przykład konfiguracji magistrali
Charakterystyka protokołu (uproszczony)
Przykład ruchu autobusowego
Custom Slaves
Po co tworzyć niestandardowe urządzenia podrzędne I2C?
Jak zaprojektować niestandardowy slave I2C?
Projekt I2C Master
Kluczowe kryteria projektowe:
Debugowanie: Dziel i rządź
Przejmij bezpośrednią kontrolę nad autobusem za pomocą urządzenia ad-hoc. Przykłady:
Szpieguj magistralę za pomocą analizatora logicznego lub miernika zakresu / zaawansowanego. Przykłady:
Użyj specyficznego dla urządzenia podrzędnego debugera / emulatora obwodu.
Przykład: AVR Dragon dla układów AVR (Arduino UNO, Nano, Mini, MiniPro)
BUS Pirate
Adapter USB na I2C
Sigrok i pulsview
logo sigrok (komponent bakend)
przykład impulsu (wizualizatora)
Przykład analizatora logiki niskiej klasy
Przykład: sterowanie dronem 4WD
Prototyp zbudowany przy użyciu 2 Arduino Mini Pro.
Co niewolnik robi w tym przykładzie?
Slave I2C:
Schemat blokowy wysokiego poziomu urządzenia I2C Slave.
Wybór Slave: Arduino Mini Pro
ICD specyficzne dla slave'a: AVR Dragon
Wybór systemu operacyjnego: ChibiOS
Jednak miał ograniczoną obsługę BSP dla AVR, brak: - przerywa sterownik dla AVR GPIO (dodano). - Obsługa I2C dla trybu podrzędnego AVR (niestandardowe). Które musiały zostać opracowane osobno jako część oprogramowania Drone SW dla AVR .
Definiowanie parametrów komunikacji
Dla każdego koła:
Cykl roboczy sygnału PWM użytego do jego sterowania - 1 bajt. 0xFF = maksymalny moment obrotowy / 0x00 = brak momentu obrotowego.
Kierunek obrotu - 1 bajt.
Średni okres między szczelinami enkodera optycznego - 2 bajty.
Indeks parametrów - 1 kęs:
Indeksy kół - 1 ostry:
Sub protokół: Definiowanie rejestrów
Format rejestru: 0xαβ - α = indeks parametru - β = indeks koła
Adres (wybrany dowolnie): 0x10
Format Bus Pirate: - [= bit początkowy -] = bit końcowy - r = bajt odczytu - czasy adresowe 2 (lewy Shift 1), dla bitu R / W
Przykład - w formacie Bus Pirate
[i2c_addr reg_addr = (parm, wheel) reg_value]
Samochód obraca się zgodnie z ruchem wskazówek zegara.
źródło