4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SeeeduinoXIAO で I2S 出力する

Posted at

概要

SeeeduinoXIAOは公式ではI2S出力ができないことになっているが、SoCのデータシートを良くみるとI2S出力が可能である。

PinNoを緑、I2S部分を黄色で纏めると以下の通り。

image.png

image.png

コード修正

初期状態ではI2Sが無効化されているので、下記のように修正する必要がある。

C:/Users/(YourName)/Documents/ArduinoData/packages/Seeeduino/hardware/samd/1.7.9/variants/XIAO_m0/variant.h

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 で音出た。

image.png

その他

  • 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
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?