آردوینو و رزبری‌پای

کدک HDA چندکاناله روی RP2040

رابط HDA Link که به آن Azalia هم می‌گویند معمولاً فقط در چیپست‌های کامپیوترهای شخصی دیده می‌شود. نویسنده یک مقاله در Habr می‌خواست بررسی کند که آیا میکروکنترلر RP2040 روی Raspberry Pi Pico می‌تواند میزبان این رابط باشد. مزیت آن روشن است: کدک‌های صوتی HDA چندکاناله تعداد کانال‌های بسیار بیشتری نسبت به I²S دارند.

پروژه بر پایه یک RP2040 با بلوک‌های PIO و کدک Realtek ALC889 روی برد ساخته شده است؛ برد از تلاش قبلی ناموفق با STM32F103 و Spartan-3 باقی مانده است. سیگنال BCLK باید در ۲۴ مگاهرتز پایدار باشد، پس نمی‌توان آن را با نرم‌افزار تولید کرد. این رابط از چهار خط استفاده می‌کند: BCLK، SYNC، SDO و SDI. یک فریم ۱۰۰۰ بیتی به ۴۸ کیلوهرتز می‌رسد و برای ۹۶ و ۱۹۲ کیلوهرتز تعداد نمونه‌ها در هر فریم افزایش می‌یابد.

پیاده‌سازی از چهار ماشین حالت PIO بهره می‌برد: خروجی SDO، خروجی SYNC، ورودی SDI همراه با تولید BCLK، و ماشینی که به کدک آدرس می‌دهد. داده‌ها از طریق DMA منتقل می‌شوند و هسته دوم RP2040 نمونه‌ها و فرمان‌ها را بسته‌بندی و پاسخ‌های کدک را تحلیل می‌کند. پروژه نمایشی سینوس‌ها را روی پنج DAC استریو تولید می‌کند و هارمونیک سوم حدود −۱۲۳ دسیبل است.

کدک در نرخ نمونه‌برداری ۱۹۲ کیلوهرتز کار کرد. اورکلاک کردن RP2040 تا ۳۲ مگاهرتز (۲۵۶ کیلوهرتز) هم جواب داد، اما کدک به شدت گرم شد. برد در ۳٫۳ ولت بین ۱۵۰ تا ۲۷۰ میلی‌آمپر مصرف می‌کند. محدودیت‌هایی هم وجود دارد: فیلترهای داخلی مانند یک فیلتر بالاگذر مرتبه اول با فرکانس قطع حدود ۴ هرتز عمل می‌کنند و پهنای باند ورودی HDA اجازه نمی‌دهد سه کانال استریوی ۲۴/۱۹۲ همزمان کار کنند.

نویسنده همچنین خطای همگام‌سازی در RP2040 را پیدا کرد که وقتی DMA، USB و نمونه‌برداری XIP با هم کار می‌کنند رخ می‌دهد؛ علت آن را متخصصان Raspberry Pi مشخص کردند. برای پردازش پیچیده، RP2350 با دستورات DSP را توصیه می‌کند. از این‌که پروژه صادقانه هم نتایج و هم نقاط ضعف را نشان می‌دهد خوشم آمد.

منبع: Habr

دیدگاه‌ها 0

اولین دیدگاه را به هر زبانی بنویس.

برای دیدگاه نوشتن وارد شو