1.経緯
USBオーディオデータをリアルタイムでDSP処理するアプリを検討中です
とりあえずUSB audio でデータを取込む部分をUSB Speaker として作ってみます
2.システム概要
1)ボード:WeAct Black Pill V2.0 STM32F411CEU6
Arm Cortex-M4, RTC RTCチップ実装済
100MHz 25MHz水晶実装済
128KB SRAM
512KB Flash
LQFP48
Usart x 3、i2C x 3、spi x 5、usbfs x 1
Adc x 1(10) 、i2s x 5、crc x 1、tim x 8
2)USB audio
USB USB 1.1 FS 12Mbps
データ 48kHz 16bit 2ch
同期 シンクロナス
DAC PWM 2000分割(10.97bit)モノラル(ステレオ対応可)
3)開発ツール
STM32CubeIDE(MX) Version: 1.12.0
IDE Version: 2.0.200.202301271415
MX Version: 6.8.0-RC4
USB audio Middlewareに追記
ST LINK MiNI ST LINK V2
MacBookAir M1 2020 macOS Ventura 13.5.2
USBハブ Anker PowerExpand 8-in-1 USB-C PD 10Gbps データ ハブ
イヤフォン SONY MDR-E838LP
■インピーダンス 16Ω
■再生周波数帯域 10-23,000Hz
■許容入力 50mW
■感度 104dB/mW
3.課題
STM32CubeMXのUSB audio Middlewareはかなり手を入れないと動かないらしいが改造を最小限にしたい
Middlewareのコードとネットで調べた情報を元に順を追ってコードを作る
1)ホスト(macOS)との接続
・macOS 情報が少ない
・Linux 上手く繋がるらしい
・Windows 不具合の報告が多い
2)データハンドリング
・再生を停止すると再開しない仕様になっている
再生再開のためのコード追記が必要
3)同期
・同期しない
同期コード追記が必要
4.お手本
STM32でDDC/DCC開発 INDEX
hirasakastm32ddcdcc.blogspot.com
har-in-air/STM32F411_USB_AUDIO_DAC
5.解説
・ボードは手元にあるDSP内蔵のSTM32F4が実装されたBlackPillを使用する
・DACは通常I2S外付のところデータ取込が目的のため動作確認のためのシンプルなPWMにした
・データはLch Rch両方デコードする
・同期はデバイス側のクロックをマスター側のクロックに追従させて再生するシンクロナス
デバイス側のクロックで再生するアイソクロナスのコード実装は宿題
次は回路について