SeeeduinoXIAO で I2S 出力する
概要
SeeeduinoXIAOは公式ではI2S出力ができないことになっているが、SoCのデータシートを良くみるとI2S出力が可能である。
PinNoを緑、I2S部分を黄色で纏めると以下の通り。
コード修正
初期状態ではI2Sが無効化されているので、下記のように修正する必要がある。
C:/Users/(YourName)/Documents/ArduinoData/packages/Seeeduino/hardware/samd/1.7.9/variants/XIAO_m0/variant.h
// I2S Interfaces
// --------------
#define I2S_INTERFACES_COUNT 2
#define I2S_DEVICE 0
#define I2S_CLOCK_GENERATOR 3
#define PIN_I2S_SD (8u) // PA07:I2S/SD[0]
#define PIN_I2S_SCK (2u) // PA10:I2S/SCK[0]
#define PIN_I2S_FS (3u) // PA11:I2S/FS[0]
サンプルコードの実行
I2Sの出力サンプルが提供されているので、実行。
C:/Users/(YourName)/Documents/ArduinoData/packages/Seeeduino/hardware/samd/1.7.9/libraries/I2S/examples/SimpleTone
実行結果
PCM5102a で音出た。
その他
- I2S-MCLKもコード弄れば出せる。
- PLLが載っていないので、各周波数は 48MHz の整数分周でしか出せない。
周波数毎に誤差をまとめると、以下の通り。
44.1kHzと48kHzの16bitならば十分使える領域。
SamplingFreq | BitDepth | 分周率 | 実周波数 | エラーレート |
---|---|---|---|---|
44100 | 16 | 34 | 44118 | 0.000400 |
44100 | 32 | 17 | 44118 | 0.000400 |
88200 | 16 | 17 | 88235 | 0.000400 |
88200 | 32 | 9 | 83333 | -0.055178 |
48000 | 16 | 31 | 48387 | 0.008065 |
48000 | 32 | 16 | 46875 | -0.023438 |
96000 | 16 | 16 | 93750 | -0.023438 |
96000 | 32 | 8 | 93750 | -0.023438 |
Author And Source
この問題について(SeeeduinoXIAO で I2S 出力する), 我々は、より多くの情報をここで見つけました https://qiita.com/blue-7/items/52295ab526348945c07b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .