class I2C – kaksijohtiminen sarjaprotokolla¶
I2C on kaksijohtiminen protokolla laitteiden väliseen tiedonsiirtoon. Fyysisellä tasolla se koostuu kahdesta linjasta, SCL (kello) ja SDA (data). OpenMV Cam ei tarjoa laudalla olevia ylösvetoja kummallekaan linjalle – ulkoiset ylösvedot vaaditaan sekä linjalle SCL että SDA, jotta väylä toimii.
I2C-objektit on liitetty tiettyyn väylään, ja ne voidaan alustaa konstruoinnin yhteydessä tai myöhemmin metodilla init().
Esimerkki:
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
I2C-objektin tulostaminen näyttää sen määrityksen.
Perusmetodit ovat send() ja 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
Vastaanottaaksesi paikan päällä luo ensin bytearray
data = bytearray(3) # create a buffer
i2c.recv(data) # receive 3 bytes, writing them into data
Voit määrittää aikakatkaisun (ms):
i2c.send(b"123", timeout=2000) # timeout after 2 seconds
Ohjaimen on määritettävä vastaanottajan osoite:
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
Ohjaimella on myös nämä metodit:
# 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)
Konstruktorit¶
- class pyb.I2C(bus: int | str, *args, **kwargs)¶
Luo I2C-objekti annetulle väylälle
bus(kokonaislukuna ilmaistava oheislaitteen indeksi, esim.2väylälleI2C2). Ilman lisäparametreja objekti luodaan mutta ei alusteta (se säilyttää aiemmat väyläasetukset, jos sellaisia on); jos lisäargumentteja annetaan, väylä alustetaan. Katso käytettävissä olevat parametrit kohdastainit().I2C(2)on kytketty samoihin liitinnastoihin jokaisessa OpenMV Cam -kamerassa, joka tarjoaapyb.I2C-luokan (M4 / M7 / H7 / H7 Plus / Pure Thermal):Signaali
Liitinnasta
Huomautukset
SCLP4SDAP5I2C(4)on lisäksi käytettävissä OpenMV Cam M7-, H7-, H7 Plus- ja Pure Thermal -kameroissa, joissaSCLon liitinnastassaP7jaSDAliitinnastassaP8.OpenMV Cam N6 ei tarjoa
pyb.I2C-luokkaa; käytä sen sijaanmachine.I2C-luokkaa.Metodit¶
- init(mode: int, *, addr: int = 0x12, baudrate: int = 400000, gencall: bool = False, dma: bool = False) None¶
Alusta I2C-väylä annetuilla parametreilla:
modeon oltava jokoI2C.CONTROLLERtaiI2C.PERIPHERAL.addron 7-bittinen osoite (järkevä vain oheislaitteelle).baudrateon SCL-kellotaajuus (järkevä vain ohjaimelle).gencallmäärittää, tuetaanko yleiskutsutilaa (general call).dmamäärittää, sallitaanko DMA:n käyttö I2C-siirroissa (huomaa, että DMA-siirroilla on tarkempi ajoitus, mutta ne eivät tällä hetkellä käsittele väylävirheitä oikein).
Todellinen kellotaajuus voi olla pyydettyä taajuutta pienempi. Tämä riippuu alustan laitteistosta. Todellinen taajuus voidaan selvittää tulostamalla I2C-objekti.
- is_ready(addr: int) bool¶
Tarkista, vastaako I2C-laite annettuun osoitteeseen. Pätee vain ohjaintilassa.
- mem_read(data: int | bytearray, addr: int, memaddr: int, *, timeout: int = 5000, addr_size: int = 8) bytes¶
Lue I2C-laitteen muistista:
datavoi olla kokonaisluku (luettavien tavujen määrä) tai puskuri, johon luetaanaddron I2C-laitteen osoitememaddron muistipaikka I2C-laitteen sisällätimeouton aikakatkaisu millisekunteina lukua odotettaessaaddr_sizevalitsee memaddr-arvon leveyden: 8 tai 16 bittiä
Palauttaa luetun datan. Tämä pätee vain ohjaintilassa.
- mem_write(data: int | bytes | bytearray, addr: int, memaddr: int, *, timeout: int = 5000, addr_size: int = 8) None¶
Kirjoita I2C-laitteen muistiin:
datavoi olla kokonaisluku tai puskuri, josta kirjoitetaan.addron I2C-laitteen osoite.memaddron muistipaikka I2C-laitteen sisällä.timeouton aikakatkaisu millisekunteina kirjoitusta odotettaessa.addr_sizevalitseememaddr-arvon leveyden: 8 tai 16 bittiä.
Pätee vain ohjaintilassa.
- recv(recv: int | bytearray, addr: int = 0x00, *, timeout: int = 5000) bytes¶
Vastaanota dataa väylältä:
recvvoi olla kokonaisluku, joka on vastaanotettavien tavujen määrä, tai muokattava puskuri, joka täytetään vastaanotetuilla tavuillaaddron osoite, josta vastaanotetaan (vaaditaan vain ohjaintilassa)timeouton aikakatkaisu millisekunteina vastaanottoa odotettaessa
Paluuarvo: jos
recvon kokonaisluku, palautetaan uusi puskuri vastaanotetuista tavuista, muutoin sama puskuri, joka annettiin parametrillerecv.
- send(send: int | bytes | bytearray, addr: int = 0x00, *, timeout: int = 5000) None¶
Lähetä dataa väylälle:
sendon lähetettävä data (lähetettävä kokonaisluku tai puskuriobjekti).addron osoite, johon lähetetään (vaaditaan vain ohjaintilassa).timeouton aikakatkaisu millisekunteina lähetystä odotettaessa.
Vakiot¶