はじめに
使うたびに細かいことを忘れてしまうI2Sについてメモ。雑な調査に基づくメモなので無保証、間違いの指摘は大歓迎。
仕様
原典
I2S bus specificationって事でNXPが今でも公開してる。けど、実際に世の中でどう運用されてるかまでわからないので、これを見て世の中のI2S全てと分かり合えると思わない方が良い。
信号名
とりあえず原典で使われてる信号名はあるんだけど、実際に現場で見る信号は様々なので、そのエイリアス表。
SCK: clock
- BCLK (Bit Clock)
WS: word select
- LRCLK (LR Clock)
- FS (Frame Sync)
- SYNC
SD: data
- SDATA
- SDIN
- SDOUT
- DACDAT
- ADCDAT
その他
- MCLK / SYSCLK: 厳密にはI2Sの仕様とは関係ないと思うんだけど、セットで出てくる事が多い。WSの256倍が多いとの記述もあるが、環境によってそれぞれ。送受信回路でフィルタや別のフォーマットへのエンコードなどを実装する際に必要となるN倍の同期クロックとして用意してるのかな?PLLとかあればSCKから作るんだろうけど、そういうのが難しいチップ向けの補助信号という理解。
周波数
WSの周波数がそのままサンプリング周波数になる。とれる周波数については特に規定されてないと思うが、通常の音楽環境の通り、44.1kHzと48kHzの定数倍が実際に使われている周波数だと思う。周波数についてはここを起点に考えるのが良い。
SCKの周波数は、WSの32倍または64倍。これは16bit幅のデータの場合には16×左右2ch分で32倍のデータが必要だから。他に24bit幅も利用されているが、この際には転送では32bit幅をとっている。よって32x2chで64倍。
方言
データパタンには3種類の方言があり、結局のところはWSに対してどのタイミングを起点としてデータを出すか、だけの違いになる。マイコンなどは実装によって全てのパタンが使えるわけではないが、名前の通りI2S Justifiedが標準語だと思って良い。
Left Justified
WSがHIGHに上がったのと同じサイクルに出たSDの信号がMSBで、HIGHの間に左チャンネルの上位から下位、右チャンネルの上位から下位と信号が流れる。24bitフォーマットの際は各チャンネルの信号後に8サイクルの空サイクルが流れる。つまり後ろにデータパディングが入る。
Right Justified
同じくWSがHIGHに上がったのと同じサイクルが起点。ただし24bitフォーマットの際は8サイクルの空サイクルが先頭に現れ、のちに24bitのデータが続く。つまり手前にデータパディングが入る。この際、エンディアンが変わるわけではなく、単純にアライメントの問題だけである事に注意。
I2S Justified
今までと反対でWSがLOWに下がるタイミングが起点だが、そのサイクルではなく次サイクルがMSBとなる。つまりWSの極性が反対な上にデータがさらに1サイクル遅れている形になる。
フォーマット
16bit/24bitともにsignedなので注意。MSBは符号ビットです。32bitの話は聞かないけど、Left/I2S Justifiedなら後ろのパディングに追加の下位bitをそのまま流し込めば双方互換性を維持したまま綺麗に拡張できる。