Arduino และ Raspberry Pi

โคเดก HDA หลายช่องสัญญาณบน RP2040

อินเทอร์เฟซ HDA Link หรือ Azalia มักพบเฉพาะในชิปเซ็ตของพีซี ผู้เขียนบทความบน Habr ต้องการตรวจสอบว่าไมโครคอนโทรลเลอร์ RP2040 บน Raspberry Pi Pico จะทำหน้าที่เป็นโฮสต์ของอินเทอร์เฟซนี้ได้หรือไม่ ข้อดีชัดเจน: โคเดกเสียง HDA หลายช่องสัญญาณให้จำนวนช่องมากกว่า I²S อย่างมาก

โปรเจกต์นี้ใช้ RP2040 ที่มีบล็อก PIO และโคเดก Realtek ALC889 ที่ติดอยู่บนบอร์ด ซึ่งเป็นบอร์ดที่เหลือจากความพยายามก่อนหน้าที่ล้มเหลวด้วย STM32F103 และ Spartan-3 สัญญาณ BCLK ต้องคงที่ที่ 24 MHz จึงไม่สามารถสร้างด้วยซอฟต์แวร์ได้ อินเทอร์เฟซใช้สี่เส้นสัญญาณ ได้แก่ BCLK, SYNC, SDO และ SDI โดยหนึ่งเฟรม 1000 บิตให้ 48 kHz และที่ 96 และ 192 kHz จำนวนตัวอย่างต่อเฟรมจะเพิ่มขึ้น

การทำงานใช้สี่สเตต-แมชชีนของ PIO ได้แก่ เอาต์พุต SDO เอาต์พุต SYNC อินพุต SDI พร้อมการสร้าง BCLK และแมชชีนที่กำหนดแอดเดรสให้โคเดก ข้อมูลส่งผ่าน DMA ขณะที่คอร์ที่สองของ RP2040 จัดแพ็กตัวอย่างและคำสั่ง และแปลความการตอบกลับของโคเดก โปรเจกต์สาธิตสร้างคลื่นไซน์บน DAC สเตริโอห้าตัว โดยฮาร์โมนิกที่สามอยู่ราว −123 dB

โคเดกทำงานที่อัตราการสุ่มตัวอย่าง 192 kHz การโอเวอร์คล็อก RP2040 เป็น 32 MHz (256 kHz) ก็ทำงานได้ แต่โคเดกร้อนมาก บอร์ดกินไฟ 150 ถึง 270 mA ที่ 3.3 V นอกจากนี้ยังมีข้อจำกัด ฟิลเตอร์ในตัวทำงานเหมือนไฮพาสลำดับที่หนึ่งที่ความถี่คัตออฟราว 4 Hz และแบนด์วิดท์อินพุต HDA ไม่รองรับสามช่องสัญญาณสเตริโอ 24/192 พร้อมกัน

ผู้เขียนยังพบข้อผิดพลาดด้านการซิงโครไนซ์ของ RP2040 เมื่อ DMA, USB และการสุ่มตัวอย่างจาก XIP ทำงานพร้อมกัน สาเหตุถูกระบุโดยผู้เชี่ยวชาญของ Raspberry Pi สำหรับการประมวลผลที่ซับซ้อน เขาแนะนำ RP2350 ที่มีคำสั่ง DSP ผมชอบที่โปรเจกต์แสดงทั้งผลลัพธ์และจุดอ่อนอย่างตรงไปตรงมา

ที่มา: Habr

ความคิดเห็น 0

เป็นคนแรกที่แสดงความคิดเห็น ด้วยภาษาใดก็ได้

เข้าสู่ระบบเพื่อแสดงความคิดเห็น