Parametri Audio CODEC a Wolfson WM8731 koje je potrebno konfigurisati i I2C transakcije za parametrizaciju - etf-unibl/sava-drina GitHub Wiki

Opis pinova Audio CODEC-a Wolfson WM8731 (biće pominjani u nastavku teksta):

Image

Parametri CODEC-a koje je potrebno konfigurisati za potrebe projekta

1. Sampling Control - Režim(mode) rada i frekvencija odmjeravanja:

Audio CODEC WM8731 nudi korisniku mogućnost odmjeravanja ADC-a i DAC-a različitim brzinama pod softverskom kontrolom u normalnom i USB režimu. U normalnom režimu, korisnik kontroliše brzinu odmjeravanja koristeći odgovarajuću MCLK ili crystal frekvenciju i podešavanje registra kontrole brzine uzorkovanja. WM8731 može da podrži brzine uzorkovanja od 8ks/s do 96ks/s. U USB režimu, korisnik mora da koristi fiksnu MLCK ili crystal frekvenciju od 12MHz da generiše brzinu uzorkovanja od 8ks/s do 96ks/s. Zove se USB režim pošto je uobičajeni takt USB (Universal Serial Bus) na 12MHz i WM8731 se može direktno koristiti u takvim sistemima.

2. Digital Audio Interface Format - Master/Slave uređaj, Digital Audio Interface Mode, broj bita ulaznih audio podataka

WM8731 se može konfigurisati kao master ili slave uređaj. Kao master uređaj, WM8731 kontroliše sekvenciranje podataka i taktova na digitalnom audio interfejsu. Kao slave uređaj, WM8731 odgovara podacima na taktove koje prima preko digitalnog audio interfejsa.

Image

Image

WM8731 može da radi u jednom od 4 ponuđena režima audio interfejsa (Digital Audio Interface Mode). To su:
Right justified - režim u kojem je LSB dostupan na rastućoj ivici BCLK-a koji prethodi DACLRC ili ADCLRC tranziciji, ali se MSB i dalje prenosi prvi.

Image

Left justified - režim u kojem je MSB dostupan na prvoj rastućoj ivici BCLK-a nakon ADCLR ili DACLRC tranzicije.

Image

I2S - režim u kojem je MSB dostupan na 2. rastućoj ivici BCLK-a nakon DACLRC ili ADCLRC tranzicije.

Image

DSP - u ovom režimu MSB lijevog kanala je dostupan na 1. ili 2. rastućoj ivici BCLK-a (koja se može izabrati pomoću LRP-a) nakon rastuće ivice LRC-a. Podaci desnog kanala odmah slijede podatke lijevog kanala. U zavisnosti od dužine riječi, BCLK frekvencije i brzine uzorkovanja, može biti neiskorišćenih BCLK ciklusa između LSB podataka desnog kanala i sledećeg uzorka.

Image

Sva četiri ova režima su MSB first i rade sa podacima od 16 do 32 bita.

Napomena: Imati na umu da 32-bitni podaci nisu podržani u pravom poravnatom režimu.

Broj bita ulaznih audio podataka je takođe konfigurabilan i može biti: 16, 20, 24 ili 32 bita.

3. Power Down Modes

WM8731 sadrži režime očuvanja energije u kojima se različiti blokovi kola mogu bezbjedno isključiti kako bi se sačuvala energija. Ovo se softverski programira kao što je prikazano u tabeli ispod:

Image

4. Audio Signal Path Control - Digital Audio Path Control i Analogue Audio Path Control

Podrazumijeva podešavanje ulaznih (Line In, Mic In) i izlaznih linija(Line Out) CODEC-a, kao što su omogućenje/onemogućenje DAC na Line Out - LINEOUT ili omogućenje/onemogućenje ADC na Mic In - MICIN ili na Line In - LLINEIN i RLINEIN itd.

5. Headphone amplifier - podešavanje jačine zvuka slušalica

WM8731 ima stereo izlaz za slušalice dostupan na LHPOUT i RHPOUT. Izlaz je dizajniran posebno za slušalice od 16 ili 32 oma sa maksimalnom efikasnošću i malom potrošnjom energije. Izlaz za slušalice uključuje visokokvalitetno podešavanje nivoa jačine zvuka i funkciju isključivanja zvuka.

6. Aktiviranje DSP and Digital Audio Interface-a

Da bi se spriječili problemi u komunikaciji preko digitalnog audio interfejsa, audio interfejs je onemogućen (tristate sa slabim 100k pulldown otpornikom). Jednom kada se isprogramiraju audio interfejs i kontrola odabiranja, on se aktivira postavljanjem bita ACTIVE upisom u odgovarajući registar.

I2C transakcije za parametrizaciju CODEC-a

Da bi se izvršila parametrizacija CODEC-a potrebno je upisati odgovarajuće vrijednosti (željene vrijednosti parametara) u registre koji predstavljaju odgovarajući parametar ili više njih.

Softverska implementacija ovog upisa se može izvesti korišćenjem 3-žičnog (SPI-kompatibilnog) ili 2-žičnog MPU interfejsa. Izbor formata interfejsa se postiže podešavanjem stanja odgovarajućeg pina. U 3-žičnom režimu, SDIN se koristi za prenos podataka, SCLK se koristi za takt signal, a CSB se koristi za zaključavanje programskih podataka. U 2-žičnom režimu, SDIN se koristi za serijske podatke, a SCLK se koristi za serijski takt. U 2-žičnom režimu, stanje CSB pina omogućava korisniku da izabere jednu od dvije adrese.

Mi ćemo koristiti 2-žični režim i time izvršiti upis odgovarajućih vrijednosti u registre COCEC-a preko I2C protokola - I2C transakcije.

U slučaju 2-žičnog MPU serijskog interfejsa, WM8731 može da radi samo kao slave uređaj. WM8731 ima jednu od dvije slave adrese koje se biraju podešavanjem stanja pina 15(CSB) kao što je prikazano na slici ispod.

Image

Da bi kontrolisao WM8731 na 2-žičnoj magistrali, glavni (master) kontrolni uređaj(u našem slučaju FPGA) mora da započne prenos podataka uspostavljanjem start condition-a, definisanog tranzicijom sa visokog na niski logički nivo na SDIN-u, dok SCLK ostaje visok. Ovo ukazuje da će uslijediti prenos adrese, a zatim i podataka. Svi periferni uređaji na 2-žičnoj magistrali reaguju na start condition i pomijeraju se u sledećih osam bita (7-bitna adresa + R/W bit). Šalje se prvo MSB. 7-bitna adresa se sastoji od 6-bitne osnovne adrese + jednog programabilnog bita za izbor jedne od dvije dostupne adrese za ovaj uređaj (kao što je prikazano u tabeli na prethodnoj slici). Ako je primljena tačna adresa i R/W bit je '0', što ukazuje na upis, onda će WM8731 odgovoriti tako što će povući SDIN na nizak nivo na sledećem taktu impulsu(ACK). WM8731 je uređaj samo za pisanje i reagovaće samo na R/w bit koji ukazuje na upisivanje. Ako adresa nije prepoznata, uređaj će se vratiti u stanje mirovanja i sačekati novi startni uslov i važeću adresu.

Jednom kada WM8731 potvrdi tačnu adresu, kontroler će poslati osam bita podataka (biti B15-B8). WM8731 će tada potvrditi poslate podatke tako što će povući SDIN na nizak nivo za jedan takt impuls. Kontroler će zatim poslati preostalih osam bita podataka (biti B7-B0) i WM8731 će zatim ponovo potvrditi postavljanjem SDIN na nizak nivo. Stop condition je definisan kada postoji tranzicija sa niskog na visok nivo na SDIN-u dok je SCLK visok. Ako se u bilo kojem trenutku prenosa podataka detektuje start condition ili stop condition koji nije u nizu, tada će uređaj preći u stanje mirovanja (idle). Nakon što primi kompletnu adresu i niz podataka, WM8731 se vraća u stanje mirovanja i čeka drugi uslov za početak. Svako upisivanje u registar zahtijeva kompletan niz: start condition, adresa uređaja i R/W bit nakon čega sledi 16 bita - adresa registra i biti podataka.

Prije nego što pređemo na same I2C transakcije, pogledaćemo adrese i kratak opis registara Audio CODEC-a WM8731 date na sljedećim slikama.

Image

Image

Image

Image

Image

Image

Image

Image

Image

U nastavku slijedi niz I2C transakcija kojima smo izvršili konfigurisanje nekih osnovnih parametara CODEC-a u VHDL jeziku, pri čemu je ulogu master uređaja imala FPGA komponenta, a slave uređaj je, naravno, Audio CODEC WM8731.

Neke od I2C transakcija (izdvojen kod upisa odgovarajućih vrijednosti parametara u registre sa odgovarajućom adresom) za parametrizaciju CODEC-a su:

WM_i2c_data(15 downto 9) <= "0001000"; WM_i2c_data(8 downto 0) <= "000001101";

Prethodna transakcija definiše upis vrijednosti "000001101" u registar Audio Codec-a čija je adresa "0001000" (Sampling Control registar). Na ovaj način smo definisali da je režim rada USB mode(bit USB/NORMAL = '1'), frekvencija odmjeravanja (i za ADC i za DAC) je 8kHz - frekvencija govornog signala (biti SR[3:0] = "0011"), bit BOSR = '0' => Base Over-Sampling Rate = 250fs.

WM_i2c_data(15 downto 9) <= "0000111"; WM_i2c_data(8 downto 0) <= "000001010";

Prethodna transakcija definiše upis vrijednosti "000001010" u registar Audio Codec-a čija je adresa "0000111" (Digital Audio Interface Format registar). Na ovaj način smo definisali da je Audio Data Format I2S (biti FORMAT[1:0] = "10" i to je ujedno i podrazumijevana vrijednost ovih bita => podrazumijevani format audio podataka je I2S), da je broj bita ulaznih audio podataka 24 bita (biti IWL[1:0] = "10" i to je ujedno i podrazumijevana vrijednost ovih bita => podrazumijevani broj bita ulaznog audio signala je 24 bita).

WM_i2c_data(15 downto 9) <= "0000110"; WM_i2c_data(8 downto 0) <= "000001111";

Prethodna transakcija definiše upis vrijednosti "000001111" u registar Audio Codec-a čija je adresa "0000110" (Power Down Control registar). Na ovaj način smo omogućili Line Input Power Down (bit LINEINPD = '1'), Microphone Input an Bias Power Down (bit MICPD = '1'), ADC Power Down (bit ADCPD = '1') i DAC Power Down (bit DACPD = '1').

WM_i2c_data(15 downto 9)<="0000010"; WM_i2c_data(8 downto 0)<="101111001";

Prethodna transakcija definiše upis vrijednosti "101111001" u registar Audio Codec-a čija je adresa "0000010" (Left Headphone Out registar) i na taj način smo definisali jačinu lijevog kanala slušalica.

WM_i2c_data(15 downto 9) <= "0000100"; WM_i2c_data(8 downto 0) <= "000010000";

Prethodna transakcija definiše upis vrijednosti "000010000" u registar Audio Codec-a čija je adresa "0000100" (Analogue Audio Path Control registar) i na taj način smo onemogućili Mic Input Mute to ADC (bit MUTEMIC = '0') i omogućili DAC na LINOUT (bit DACSEL = '1').

WM_i2c_data(15 downto 9) <= "0000101"; WM_i2c_data(8 downto 0) <= "000000000";

Prethodna transakcija definiše upis vrijednosti "000000000" u registar Audio Codec-a čija je adresa "0000101" (Digital Audio Path Control registar) i na taj način smo omogućili DAC Soft Mute Control (bit DACMU = '1').

WM_i2c_data(15 downto 9) <= "0001001"; WM_i2c_data(8 downto 0) <= "111111111";

Prethodna transakcija definiše upis vrijednosti "111111111" u registar Audio Codec-a čija je adresa "0001001" (Active Control registar) i na taj način smo aktivirali interfejs (bit ACTIVE = '1').

I2C transakcija WM_i2c_data(15 downto 9) <= "0001111"; WM_i2c_data(8 downto 0) <= "000000000";

resetuje uređaj. To se postiže upisom vrijednosti "000000000" u registar Audio Codec-a čija je adresa "0001111" (Reset Register registar).

Napomena: Prethodno navedene I2C transakcije predstavljaju ilustraciju podešavanja najvažnijih parametara Audio CODEC-a i u budućnosti će biti prilagođavane konkretnim potrebama projekta.

Povezivanje RPI za konfiguraciju CODEC-a

Kao što je prethodno rečeno, za konfiguraciju CODEC-a se koristi I2C protokol te je potrebno na ispravan način povezati linije za prenos podataka (SDA) i takt signal (SCL) sa RPI platformom. WM8731 se kontroliše preko serijske I2C magistrale, tj povezan je na HPS ili Cyclone V SoC FPGA preko I2C multipleksora. Veza od audio kola za FPGA prikazana je na slici, a pridružena dodjela pinova na FPGA je naveden u tabeli ispod.

Screenshot (15)

Screenshot (19)

DE1-SoC ploča implementira I2C multiplekser za HPS za pristup I2C magistrali. Slika prikazuje vezu I2C multipleksora sa FPGA i HPS. HPS može pristupiti audio CODEC-u i TV dekoderu ako i samo ako je signal HPS_I2C_CONTROL postavljen na stanje 1. Dodjela pinova I2C magistrale je navedena u tabeli.

Screenshot (16)

Screenshot (17)

Iz tabele vidimo da je potrebno spojiti SCL liniju RPI na pin J12, a SDA na K12.