STM32H7のDuplex I2SはSPIペリフェラル1ポートのみでI2Sの送受信が出来ます。このペリフェラルには落とし穴があることを野田さんが指摘しています。
要約すると、STM32H7のDuplex I2Sはマスター時とスレーブ時で信号方向が変わります。
モード | SDI | SDO |
マスター | 受信 | 送信 |
スレーブ | 送信 | 受信 |
なんでIから送信するのよ。まぁ、STらしいっちゃらしい雑な名前です。MISO/MOSIとSPIの名前をそのまま使えば、少なくとも間違うことはないのに。つうか、送受信を固定するのをサボって、ダイの面積をどれほど節約できるのいうのやら。
さて、確認しましたが、STM32F4/F7/G4その他で使用しているSimplex I2Sにはこの問題はありません。
不幸中の幸いというか、先日投稿した「CubeIDEで生成したコードが、初期化中にassertionに失敗する」問題を見つけた時に嫌な予感がしたので、紫ライブラリについてはDuplex I2S対応を見送っています。おかげで無駄な時間を費やさずにすみました。とは言え、テストボードは作りなおしですね。次は出図する前にブレッドボードでDuplex I2Sの機能を検査します。
テストボードはSAI/Simplex I2Sでの動作については問題ないことを確認しています。
追記:
追記2:この問題はコミュニティに報告済みです。