Cara membuat bicara Omega 2 atau legenda I2S

Apa masalahnya dengan I2S, katamu? Hubungkan kabel ke pin yang diinginkan dan semuanya berfungsi.

Komputer mini Omega2 Saya juga berpikir begitu, tetapi dengan komputer mini Omega2 ternyata tidak sesederhana itu. Jadi saya memutuskan untuk menulis artikel ini.

Mari kita mulai dengan apa yang saya raih pada akhirnya. Saya menghubungkan chip TDA1543 (stereo I2S DAC dengan resolusi amplitudo 16 bit) ke komputer mikro Omega 2. Suaranya bagus, saya menikmati mendengarkan stasiun radio Internet (harus ada lelucon tentang suara tabung audiophile dan hangat). Namun, saya masih tidak mengerti alasan overloading audio, tetapi hanya belajar untuk memotongnya dengan metode kruk. Dan saya sangat ingin mendengar ide Anda tentang masalah ini.

Mungkin seseorang tidak tahu apa itu Omega2. Ini adalah komputer mini di mana Linux didasarkan pada LEDE, yang pada dasarnya adalah cabang dari OpenWRT. Prosesor MT7688, 64 MB RAM dan 16 MB Flash. Secara umum, Anda dapat membaca lebih lanjut di Wikipedia , di sini dan di sini .

Penting juga untuk dicatat bahwa semua tindakan dilakukan pada firmware asli versi 0.2.0

Dan sekarang, mari kita bicara sedikit tentang rasa sakit ketika saya sampai pada ini.
Pertama-tama, semuanya transparan, kami menghubungkan semua lini I2S TDA'shki dan Omega. Ini adalah jalur clock CLK, jalur sinkronisasi saluran WS, jalur data DATA, dan ground GND masing-masing. Plus, kami menambahkan beberapa resistor dan kapasitor, tetapi yang utama adalah tala resistor pada kaki ke-7 dari TDA1543. Offset nol harus diterapkan pada kaki ini, untuk ini saya pertama kali tertidur. Faktanya adalah bahwa chip TDA1543, unik untuk waktunya, berjalan pada kekuatan unipolar. Nah, sinyal suara adalah osilasi berkenaan dengan 0 turun dan naik, jadi Anda perlu menggeser nol ini ke tengah rentang tegangan suplai dan mendapatkan osilasi relatif ke titik ini. Semuanya ditulis dalam datasheet, tetapi awalnya saya membuat rangkaian dengan resistor konvensional (dari internet Anda) dan menerima distorsi yang tidak saya mengerti untuk waktu yang lama. Pasang resistor variabel dan dapatkan bias nol jika tidak ada sinyal di input (mode siaga) 1.3-1.5 V (dengan catu daya 3.3 V). Ternyata skema berikut.

TDA1543 ke Diagram Koneksi Omega2

Selanjutnya, mengikuti langkah-langkah dari situs resmi bawang merah, kami diperbarui untuk mengembangkan versi firmware, yang menambahkan dukungan untuk I2S (saya ingin menulis kurang dari satu tahun, tetapi tidak ada ... berlalu). Kami memperbarui dan menginstal paket yang diperlukan untuk suara:

opkg update opkg install alsa-utils mpg123 

Alihkan GPIO ke mode I2S dengan perintah:

 omega2-ctrl gpiomux set i2s i2s 

Kami menyalin file tes wav, saya menggunakan Suzanne Vega klasik - Tom's Diner. Dan coba mainkan menggunakan aplay:

 aplay za_sebya_i_za_sashky.wav 

Dan kami mendengar distorsi. Hanya banyak hard overload. Sedemikian rupa sehingga Anda mungkin tampak seperti kembali pada tahun 2007. Tapi motif kejutan dari lagu tersebut dapat ditelusuri di dalamnya, jadi sesuatu bekerja di sana, bukan?

Saya mencoba untuk mengecilkan volume di mixer alsa - tidak berhasil, karena driver diasah oleh chip MAX98090, yang dikendalikan oleh I2C dan karenanya semua pengaturan hanya dikirim ke I2C, dan data I2S itu sendiri tidak berubah.

Oke, buka datasheet pada MAX98090. Dan kita mulai terang. Microcircuit mendukung banyak format data input: I2S / LJ / RJ / TDM dan dapat mencerna sedikit banyak. Dan prosesor MT7688 itu sendiri juga bisa lebih besar dan lebih cepat dari TDDA. Mungkin masalah data di I2S?

Saya secara bertahap bermain-main dengan osiloskop.

Bit 16 bit? Ya Saya menggantung garis WS pada satu saluran di saluran lain, garis CLK. Dan saya yakin dengan panjang gelombang WS - 16.

Frekuensi operasi yang salah? Tidak. Frekuensi semuanya sesuai dengan pekerja. WS - 44100 Hz, CLK - 1411200 Hz.

Memformat nomor tipe dalam data? Format karakter yang benar digunakan (ya, saya pikir unsigned diperlukan). Dia memeriksa dengan membuat sinus buatan dan memindahkannya ke atas dan ke bawah relatif ke 0 dalam keberanian dan mengubah amplitudo. Tidak ada perubahan kualitatif.
Apakah ada I2S? kemungkinan besar ya. Pertama, karena kemudian semuanya bekerja untuk saya (baik, atau menurut saya seperti itu), dan kedua, saya mencoba memeriksa dengan osiloskop, walaupun tanpa penganalisa logika ini tentu saja sulit. Mungkin bermanfaat untuk melakukan tes yang lebih akurat dan membawa Beaglebone Anda ke sini.

Tampaknya semuanya benar, dan untuk orang-orang dari forum bawang semuanya bekerja, tetapi kebenarannya ada pada chip lain: MAX98357A dan PCM5102. Secara umum, saya menyerah ide untuk bermain wav'ki dan mendapatkan mpg123 untuk memainkan mp3. Saya memotongnya dengan flag -C dan mulai menurunkan volume. Dan di sini saya duduk. Saat mengatur level volume di program mpg123 menjadi sekitar 1 persen, saya mendapatkan suara yang bagus. Chip berayun ke amplitudo penuh. Saya memulai radio dengan flag -f 128:

 mpg123 -f 128 http://us2.internet-radio.com:8443/ 

Dan suara-suara blues Amerika yang santai bertemu dengan saya. Omong-omong, tautan ke radio mungkin tidak berfungsi, ambil dari sini .

gambar Saya memulai sinyal gigi gergaji dan secara bertahap meningkatkan amplitudo. Akibatnya, saya melihat bahwa distorsi adalah lompatan kacau dari 0 ke tegangan suplai dan semakin tinggi levelnya, semakin banyak lompatan ini. Butuh beberapa minggu untuk membuat Omega berbicara. Saya sangat lelah dan karena itu, pada saat ini saya memutuskan untuk berhenti - itu berhasil!

Namun, saya mengerti bahwa ini tidak mungkin, jadi saya akan senang mendengar ide dan saran Anda. Nah, bagi mereka yang mencoba membuat omega berbicara dengan kesakitan, saya harap saya membantu Anda!

Terima kasih semuanya!

Source: https://habr.com/ru/post/id413623/


All Articles