klasa I2C – dvožični serijski protokol¶
I2C je dvožični protokol za komunikaciju između uređaja. Na fizičkoj razini sastoji se od dvije linije, SCL (takt) i SDA (podaci). OpenMV Cam ne pruža ugrađene pull-up otpornike ni na jednoj liniji – vanjski pull-up otpornici potrebni su na obje linije SCL i SDA da bi sabirnica funkcionirala.
I2C objekti vezani su za određenu sabirnicu i mogu se inicijalizirati pri konstrukciji ili kasnije putem init().
Primjer:
from pyb import I2C
i2c = I2C(2) # create on bus 2 (uninitialised)
i2c = I2C(2, I2C.CONTROLLER) # create and init as a controller
i2c.init(I2C.CONTROLLER, baudrate=20000) # init as a controller
i2c.init(I2C.PERIPHERAL, addr=0x42) # init as a peripheral with the given address
i2c.deinit() # turn off the peripheral
Ispis I2C objekta prikazuje njegovu konfiguraciju.
Osnovne metode su send() i recv()
i2c.send("abc") # send 3 bytes
i2c.send(0x42) # send a single byte, given by the number
data = i2c.recv(3) # receive 3 bytes
Za primanje na mjestu, prvo stvorite bytearray
data = bytearray(3) # create a buffer
i2c.recv(data) # receive 3 bytes, writing them into data
Možete odrediti istek vremena (u ms):
i2c.send(b"123", timeout=2000) # timeout after 2 seconds
Kontroler mora odrediti adresu primatelja:
i2c.init(I2C.CONTROLLER)
i2c.send("123", 0x42) # send 3 bytes to peripheral with address 0x42
i2c.send(b"456", addr=0x42) # keyword for address
Kontroler također ima ove metode:
# Check if peripheral 0x42 is ready.
i2c.is_ready(0x42)
# Scan the bus and return a list of responding addresses.
i2c.scan()
# Read 3 bytes from peripheral 0x42 starting at memaddr 2.
i2c.mem_read(3, 0x42, 2)
# Write 3 bytes to peripheral 0x42 at memaddr 2.
i2c.mem_write("abc", 0x42, 2, timeout=1000)
Konstruktori¶
- class pyb.I2C(bus: int | str, *args, **kwargs)¶
Stvara I2C objekt na zadanoj sabirnici
bus(cjelobrojni indeks periferije, npr.2zaI2C2). Bez dodatnih parametara objekt se stvara, ali se ne inicijalizira (zadržava prethodne postavke sabirnice, ako ih ima); ako se navedu dodatni argumenti, sabirnica se inicijalizira. Pogledajteinit()za dostupne parametre.I2C(2)je ožičen na iste pinove zaglavlja na svakoj OpenMV Cam kameri koja izlažepyb.I2C(M4 / M7 / H7 / H7 Plus / Pure Thermal):Signal
Pin zaglavlja
Napomene
SCLP4SDAP5I2C(4)je dodatno dostupan na OpenMV Cam M7, H7, H7 Plus i Pure Thermal saSCLna pinu zaglavljaP7iSDAna pinu zaglavljaP8.OpenMV Cam N6 ne izlaže
pyb.I2C; umjesto toga koristitemachine.I2C.Metode¶
- init(mode: int, *, addr: int = 0x12, baudrate: int = 400000, gencall: bool = False, dma: bool = False) None¶
Inicijalizira I2C sabirnicu sa zadanim parametrima:
modemora bitiI2C.CONTROLLERiliI2C.PERIPHERAL.addrje 7-bitna adresa (smislena samo za periferiju).baudrateje brzina SCL takta (smislena samo za kontroler).gencalloznačava treba li podržati način općeg poziva (general-call).dmaoznačava treba li dopustiti upotrebu DMA za I2C prijenose (napomena: DMA prijenosi imaju precizniji tajming, ali trenutačno ne obrađuju pravilno pogreške sabirnice).
Stvarna frekvencija takta može biti niža od zatražene frekvencije. To ovisi o hardveru platforme. Stvarna brzina može se utvrditi ispisom I2C objekta.
- is_ready(addr: int) bool¶
Provjerava odgovara li I2C uređaj na zadanu adresu. Valjano samo u načinu kontrolera.
- mem_read(data: int | bytearray, addr: int, memaddr: int, *, timeout: int = 5000, addr_size: int = 8) bytes¶
Čita iz memorije I2C uređaja:
datamože biti cijeli broj (broj bajtova za čitanje) ili međuspremnik u koji se čitaaddrje adresa I2C uređajamemaddrje memorijska lokacija unutar I2C uređajatimeoutje istek vremena u milisekundama za čekanje na čitanjeaddr_sizeodabire širinu memaddr: 8 ili 16 bita
Vraća pročitane podatke. Ovo je valjano samo u načinu kontrolera.
- mem_write(data: int | bytes | bytearray, addr: int, memaddr: int, *, timeout: int = 5000, addr_size: int = 8) None¶
Zapisuje u memoriju I2C uređaja:
datamože biti cijeli broj ili međuspremnik iz kojeg se zapisuje.addrje adresa I2C uređaja.memaddrje memorijska lokacija unutar I2C uređaja.timeoutje istek vremena u milisekundama za čekanje na zapisivanje.addr_sizeodabire širinumemaddr: 8 ili 16 bita.
Valjano samo u načinu kontrolera.
- recv(recv: int | bytearray, addr: int = 0x00, *, timeout: int = 5000) bytes¶
Prima podatke na sabirnici:
recvmože biti cijeli broj, koji je broj bajtova za primanje, ili promjenjiv međuspremnik koji će se popuniti primljenim bajtovimaaddrje adresa s koje se prima (potrebna samo u načinu kontrolera)timeoutje istek vremena u milisekundama za čekanje na primanje
Povratna vrijednost: ako je
recvcijeli broj, tada novi međuspremnik s primljenim bajtovima, inače isti međuspremnik koji je proslijeđen urecv.
- send(send: int | bytes | bytearray, addr: int = 0x00, *, timeout: int = 5000) None¶
Šalje podatke na sabirnicu:
sendsu podaci za slanje (cijeli broj za slanje ili objekt međuspremnika).addrje adresa na koju se šalje (potrebna samo u načinu kontrolera).timeoutje istek vremena u milisekundama za čekanje na slanje.
Konstante¶