2415979_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2415979_ja-JP

2415979_ja-JP

i.MX RT1064カスタムボード – SGTL5000コーデックがI2Cで応答しない

こんにちは、


MIMXRT1064プロセッサとSGTL5000オーディオコーデックを使ってカスタムPCBを設計しました。


SGTL5000回路については、標準/リファレンスSGTL5000回路図に従いました。


RT1064とSGTL5000間の接続は以下の通りです。


  • LPI2C1_SCL → GPIO_AD_B1_00

  • LPI2C1_SDA → GPIO_AD_B1_01

  • SAI1_MCLK → GPIO_AD_B1_09

  • SAI1_RXD → GPIO_AD_B1_12

  • SAI1_TXD → GPIO_AD_B1_13

  • SAI1_RX_BCLK → GPIO_AD_B1_11

  • SAI1_RX_LRCLK → GPIO_AD_B1_10


回路図の関連部分も添付しました。


Anushka_SS_0-1790243138656.png



私の主な問題は、ファームウェアをフラッシュした後、 SGTL5000からI2C ACKを受信しないことです。


私は以下の電圧を測定しました。


  • SCL = 約3.3V

  • SDA = 約3.3V

  • MCLK = 約1.6V


デバッグのために、I2Cピンを一時的にGPIOに変更し、9つのクロックパルスを生成し、ビットバンギングによるI2Cアドレススキャンを実行し、その後ピンをLPI2C1に戻す関数を作成しました。


static void i2c_hw_debug(void)
ヤージュ
gpio_pin_config_t in =
ヤージュ
kGPIO_デジタル入力、
0、
kGPIO_NoIntmode
};


IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_00_GPIO1_IO16, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_01_GPIO1_IO17, 0U);


IOMUXC_SetPinConfig(
IOMUXC_GPIO_AD_B1_00_GPIO1_IO16、
0x00B0U);


IOMUXC_SetPinConfig(
IOMUXC_GPIO_AD_B1_01_GPIO1_IO17、
0x00B0U);


gpio_pin_config_t out_init =
ヤージュ
kGPIO_デジタル出力、
1、
kGPIO_NoIntmode
};


GPIO_PinInit(GPIO1, 16, &out_init);
GPIO_PinInit(GPIO1, 17, &in);


for (int i = 0; i < 9; i++)
ヤージュ
GPIO_PinWrite(GPIO1, 16, 0U);
SDK_DelayAtLeastUs(10U, SystemCoreClock);


GPIO_PinWrite(GPIO1, 16, 1U);
SDK_DelayAtLeastUs(10U, SystemCoreClock);
}


PRINTF("I2Cアドレスをスキャンしています...\r\n");


for (uint8_t addr = 0x03; addr <= 0x77; addr++)
ヤージュ
if (bb_probe(16, 17, addr))
ヤージュ
PRINTF("ACKが0x%02Xで見つかりました\r\n", addr);
}
}


IOMUXC_SetPinMux(
IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL、
1U);


IOMUXC_SetPinMux(
IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA、
1U);
}

MIMXRT1064でSGTL5000コーデックを初期化するにはどうすればよいのでしょうか?また、ハードウェアの接続や設定がすべて正しいのに、なぜコーデックからACKが来ないのでしょうか?


ありがとうございます。

Re: i.MX RT1064 Custom Board – SGTL5000 Codec Not Responding Over I2C

こんにちは、 @Anushka_SS さん、

むしろ evkmimxrt1064_sai例コードをベースにアプリケーションを作成することをお勧めします。このコードはRT1064とWM8960コーデックの統合を体現しています。とはいえ、 fsl_sgtl5000.c/.h ドライバーファイルも提供しており、プロジェクトにコンポーネントとしてインポートでき、 CODEC_WM8960_ENABLE をアン定義してCODEC_SGTL5000_ENABLE を定義することで使用可能なコーデックを単に変更するだけで有効になります。SGTL5000ドライバファイルには、このコーデックを正しく初期化し使用するための必要なルーチンが含まれています。

これがお役に立てば幸いです。また、他に何かご不明な点がありましたらお知らせください。

BR、
エドウィン。

Re: i.MX RT1064 Custom Board – SGTL5000 Codec Not Responding Over I2C

ありがとう。すでにこれをやっています:SDKsのfsl_sgtl5000ドライバを使った新しいプロジェクトをCODEC_SGTL5000_ENABLE。問題はドライバが初期化する前に発生します:SGTL5000 NAKはアドレス(0x0Aおよび0x2A、LPI2Cステータス902)を割り当てます。実行時に検証された結果:オーディオ PLL = 786.432 MHz、SAI1 MCLK = 12.288 MHz(CCMレジスタから読み戻し)、LPI2Cクロック = 10 MHz。私はLPI2C1にGPIO_AD_B1_00/01を、MCLKにGPIO_AD_B1_09を使用しています。SGTL5000モジュールはジャンパーワイヤーでカスタムRT1064ボードに接続しています。ハードウェア面で他にチェックすべきこと(パッド設定、MCLK信号強度、RT1064特有の点など)を教えてもらえますか?

Re: i.MX RT1064 Custom Board – SGTL5000 Codec Not Responding Over I2C

カスタムボードにはRT1064とSGTL5000コーデックの両方を入れています。各チップを個別にテストしました。SGTL5000はTeensy 4.1搭載、RT1064は外部PJRC SGTL5000オーディオシールド搭載です。どちらも単体では問題なく動作しますが、ピンをはんだ付けして接続すると動作せず、次のような出力が出ます:

=== SGTL5000 育て上げテスト ===
I2Cスキャン(Teensyスタイル)...
スキャン完了:0台のデバイス
オーディオPLL = 786432000 Hz
SAI1 mux=2 prediv=3 div=15 -> MCLK = 12288000 Hz(12288000 を期待)
LPI2Cクロック=10000000Hz(100000000を期待)
――やってみて1――
CHIP_ID @0x A: status=902 id=0x 0 0
CHIP_ID @0x2A: status=902 id=0x 0 0
-- 2を試して--
CHIP_ID @0x A: status=902 id=0x 0 0
CHIP_ID @0x2A: status=902 id=0x 0 0
-- 3回試して --
CHIP_ID @0x A: status=902 id=0x 0 0
CHIP_ID @0x2A: status=902 id=0x 0 0
SGTL5000出ない。停止。

私が測定している電圧は以下のとおりです。

  • SCL: 3.2V
  • SDA: 3.2V
  • MCLK: 1.5~1.6V



Tags (1)
No ratings
Version history
Last update:
yesterday
Updated by: