こんにちは、
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
回路図の関連部分も添付しました。
私の主な問題は、ファームウェアをフラッシュした後、 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が来ないのでしょうか?
ありがとうございます。
こんにちは、 @Anushka_SS さん、
むしろ evkmimxrt1064_sai例コードをベースにアプリケーションを作成することをお勧めします。このコードはRT1064とWM8960コーデックの統合を体現しています。とはいえ、 fsl_sgtl5000.c/.h ドライバーファイルも提供しており、プロジェクトにコンポーネントとしてインポートでき、 CODEC_WM8960_ENABLE をアン定義してCODEC_SGTL5000_ENABLE を定義することで使用可能なコーデックを単に変更するだけで有効になります。SGTL5000ドライバファイルには、このコーデックを正しく初期化し使用するための必要なルーチンが含まれています。
これがお役に立てば幸いです。また、他に何かご不明な点がありましたらお知らせください。
BR、
エドウィン。
ありがとう。すでにこれをやっています: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特有の点など)を教えてもらえますか?
カスタムボードには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出ない。停止。
私が測定している電圧は以下のとおりです。