luokka I2S – Inter-IC Sound -väyläprotokolla¶
I2S -luokka ohjaa Inter-IC Sound (I2S) -väylää ohjaintilassa – MCU tuottaa bittikellon (SCK) ja sananvalintakellon (WS) sekä vaihtaa näytedataa SD -linjalla. Ajuri tukee jatkuvaa DMA-siirtoa taustalla, joten Python-puolen täytyy vain pitää sisäinen näytepuskuri täytettynä. Oheislaite- ja pelkän vastaanottimen tiloja ei tueta.
Saatavilla STM32-pohjaisissa OpenMV-kameroissa, joissa on kytketty I2S-oheislaite, sekä OpenMV Cam RT1062:ssa. Ei käytettävissä OpenMV Cam AE3:ssa (alif-portti).
I2S(2) STM32-pohjaisissa OpenMV-kameroissa jakaa nastansa SPI(2) -väylän kanssa – bittikello nastassa P2 (SCK), sananvalinta nastassa P3 (NSS), ja sarjadatalinja noudattaa SPI:n datansuuntakäytäntöä: TX käyttää nastaa P0 (MOSI), RX käyttää nastaa P1 (MISO).
Esimerkki – ulostulo (TX). Muodosta TX-väylä ohjaamaan ulkoista ääni-DAC:ia 44,1 kHz:n, 16-bittisillä mononäytteillä ja 16384 tavun (16 KiB) DMA-tukipuskurilla:
from machine import I2S, Pin
audio_out = I2S(
2,
sck=Pin("P2"), ws=Pin("P3"), sd=Pin("P0"),
mode=I2S.TX,
bits=16,
format=I2S.MONO,
rate=44100,
ibuf=16384,
)
Esimerkki – sisääntulo (RX). Muodosta RX-väylä, joka kaappaa mikrofonista 22,05 kHz:n, 32-bittisellä stereolla (vasen + oikea lomitettuna) ja 16384 tavun (16 KiB) DMA-tukipuskurilla:
from machine import I2S, Pin
audio_in = I2S(
2,
sck=Pin("P2"), ws=Pin("P3"), sd=Pin("P1"),
mode=I2S.RX,
bits=32,
format=I2S.STEREO,
rate=22050,
ibuf=16384,
)
Siirtometodeja voidaan käyttää kolmella tavalla:
Estävä – write() ja readinto() palaavat vasta, kun operaatio on valmis:
num_written = audio_out.write(buf) # blocks until buf is drained
num_read = audio_in.readinto(buf) # blocks until buf is filled
Estämätön – asenna takaisinkutsu metodilla irq(), jolloin siirtometodit palaavat välittömästi. Takaisinkutsu suoritetaan MicroPython-ajastimesta, kun DMA tyhjentää TX-puskurin tai täyttää RX-puskurin:
audio_out.irq(i2s_callback)
num_written = audio_out.write(buf) # returns immediately
audio_in.irq(i2s_callback)
num_read = audio_in.readinto(buf) # returns immediately
asyncio – I2S on virta (stream) ja se voidaan kääriä asyncio.StreamReader / asyncio.StreamWriter -olioihin:
swriter = asyncio.StreamWriter(audio_out)
swriter.write(buf)
await swriter.drain()
sreader = asyncio.StreamReader(audio_in)
num_read = await sreader.readinto(buf)
Konstruktori¶
- class machine.I2S(id: int, *, sck: Pin, ws: Pin, sd: Pin, mck: Pin | None = None, mode: int, bits: int, format: int, rate: int, ibuf: int)¶
Muodosta annetun id:n mukainen I2S-olio:
idyksilöi tietyn I2S-väylän; se on kortti- ja porttikohtainen
Vain avainsanoina annettavat parametrit, joita tuetaan kaikissa porteissa:
sckon nasta-olio sarjakellolinjallewson nasta-olio sananvalintalinjallesdon nasta-olio sarjadatalinjallemckon nasta-olio pääkellolinjalle; pääkellon taajuus on näytteenottotaajuus * 256modemäärittää vastaanoton tai lähetyksenbitsmäärittää näytteen koon (bittiä), 16 tai 32formatmäärittää kanavamuodon, STEREO tai MONOratemäärittää äänen näytteenottotaajuuden (Hz); tämä onws-signaalin taajuusibufmäärittää sisäisen puskurin pituuden (tavua)
Kaikissa porteissa DMA toimii jatkuvasti taustalla ja antaa käyttäjäsovellusten suorittaa muita operaatioita samalla, kun näytedataa siirretään sisäisen puskurin ja I2S-oheislaiteyksikön välillä. Sisäisen puskurin koon kasvattaminen voi pidentää aikaa, jonka käyttäjäsovellukset voivat suorittaa muita kuin I2S-operaatioita ennen alivuotoa (esim.
write-metodi) tai ylivuotoa (esim.readinto-metodi).Metodit¶
- init(*, sck: Pin, ws: Pin, sd: Pin, mck: Pin | None = None, mode: int, bits: int, format: int, rate: int, ibuf: int) None¶
katso argumenttien kuvaukset konstruktorista
- readinto(buf: bytearray) int¶
Lue ääninäytteet puskuriin, joka on määritetty argumentilla
buf.buf-puskurin on tuettava puskuriprotokollaa, kuten bytearray tai array. ”buf” -tavujärjestys on little-endian. Stereomuodossa vasemman kanavan näyte edeltää oikean kanavan näytettä. Monomuodossa käytetään vasemman kanavan näytedataa. Palauttaa luettujen tavujen määrän
- write(buf: bytes) int¶
Kirjoita
buf-puskurin sisältämät ääninäytteet.buf-puskurin on tuettava puskuriprotokollaa, kuten bytearray tai array. ”buf” -tavujärjestys on little-endian. Stereomuodossa vasemman kanavan näyte edeltää oikean kanavan näytettä. Monomuodossa näytedata kirjoitetaan sekä oikeaan että vasempaan kanavaan. Palauttaa kirjoitettujen tavujen määrän
- irq(handler: Callable[[I2S], None]) None¶
Aseta takaisinkutsu.
handler-funktiota kutsutaan, kunbuftyhjenee (write-metodi) tai täyttyy (readinto-metodi). Takaisinkutsun asettaminen muuttaawrite- jareadinto-metodit estämättömiksi.handler-funktiota kutsutaan MicroPython-ajastimen kontekstissa.
- static shift(*, buf: bytearray, bits: int, shift: int) None¶
buf-puskurin kaikkien näytteiden bittisiirto.bitsmäärittää näytteen koon bitteinä.shiftmäärittää, montako bittiä kutakin näytettä siirretään. Positiivinen vasemmalle siirtoon, negatiivinen oikealle siirtoon. Käytetään tyypillisesti äänenvoimakkuuden säätöön. Jokainen bittisiirto muuttaa näytteen voimakkuutta 6 dB.
Vakiot¶