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

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

    좋은 웹페이지 즐겨찾기