当社では、以下の固定ハードウェア配線でRW612 FLEXCOMM3/I2S3を使用しています。
- GPIO24 = PCM6120 SDOUTからのI2Sデータ入力
- GPIO25 = PCM6120 BCLKへのI2S SCK出力
- GPIO26 = PCM6120 FSYNCへのI2S WS出力
コーデックはスレーブモードのPCM6120です。
RW612は、BCLK/WSを生成し、オーディオデータを受信するI2Sマスターとして設計されています。
確認した内容:
- GPIO25/GPIO26はプレーンGPIOモードで正しく駆動可能です
- クロックFLEXCOMM3 12.288 MHzのオーディオ PLLです
- PCM6120とのI2C通信が正常に動作している
- PCM6120レジスタ構成が受け入れられます
観察された行動:
1. kI2S_MasterSlaveNormalMasterでI2S RXとして構成されたFLEXCOMM3は、GPIO25/GPIO26でSCK/WSエッジを生成しません。
2. kI2S_MasterSlaveNormalMaster で I2S TX として構成された FLEXCOMM3 も動作しません。FIFOSTAT.TXNOTFULL=1 ですが、FIFOWR への書き込み後も TXLVL は 0 のままで、ピンに SCK/WS エッジが表示されません。
3. PCM6120はクロックの欠落を報告します(ASI_STS=0xFF、DEV_STS1=0x80)。
質問:
1.RW612 FLEXCOMM I2S RXがノーマルマスターモードでSCK/WSを外部ピンに駆動することが期待されますか?
2. 「マスタークロック生成+外部コーデックからデータ受信」というユースケースで単一のFLEXCOMMインスタンスがサポートされているのか、それともデュアルFLEXCOMMアーキテクチャ(TXマスター+RxスレーブとI2Sブリッジ)が必要か?
3.FLEXCOMM3 I2S TXマスターの場合、I2S_TxInit()、FIFOWR書き込み、およびMAINENABLE以外に、FIFO書き込みを受け入れるための追加の前提条件はありますか?
4. FLEXCOMM3のGPIO24/25/26(AONドメイン)におけるI2Sクロック出力に関して、既知の制限事項はありますか?
この話題について助けてください
こんにちは、 @duyhung さん。お元気でお過ごしでしょうか。
テストを行うためにFreeRTOSを使っているのか、それともZephyrを使っているのか、教えていただけますか?FRDM-RW612ボードを使用していますか?
また、どのバージョン(SDKかZephyr)を使っているか、また開発の基準として例を取っているかも教えてください。
さらに、RW612(UM11865)のリファレンス・マニュアルには28.2節にI2Sペリフェラルの基本構成ガイドが含まれていますが、この一般的な手順を踏んだか確認していただけますか?
こんにちは、 @RomanVR さん。
ご回答ありがとうございます。下記の説明をご覧ください。
1. RTOS
私たちは使用しています ベアメタルとFreeRTOSの両方でテストを実施しました。これらのテストにはZephyrは関与していません。すべての初期化およびI2S設定はNXP SDKsドライバで直接行います。
2. ボード
私たちは ない FRDM-RW612を使用します。私たちは カスタム開発ボード RW612ETA2Iをベースにしています。MCUは同じですが、ボードのレイアウトが異なります。
オーディオコーデック(PCM6120)は以下の固定ピンで FLEXCOMM3 / I2S3 に接続されています:
| I2Sデータ(PCM6120からのSD出力) | GPIO24 | 入力 |
| I2S SCK(BCLKからPCM6120へ) | GPIO25 | 出力 |
| I2S WS(FSYNCからPCM6120) | GPIO26 | 出力 |
| I2C SDA (PCM6120設定) | GPIO56 (FC14) | 双方向 |
| I2C SCL(PCM6120設定) | GPIO57 (FC14) | 双方向 |
| AUX_EN(PCM6120電源) | GPIO54 | 出力 |
3. SDKバージョン
私たちは SDK_2.x_RD-RW612-BGA、バージョン25.03.00 を使用しています。
4. 基本例
私たちは rdrw612bga_i2s_dma_record_playback 参考例として。この例では FLEXCOMM1(TXマスター)+ FLEXCOMM0(RXスレーブ)+ I2Sブリッジ。動作確認済みです。
しかし、ハードウェアの制約により、 シングルFLEXCOMM(FC3のみ) PCM6120へのI2Sリンク全体について。PCM6120はスレーブモードで動作する必要があります。なぜなら、BCLKのソースとなる外部クロックがないからです。FC3を次のように構成しようと試みました kI2S_MasterSlaveNormalMaster データを受信しながらSCK/WSを生成するようにする。
5. UM11865 セクション 28.2 – I2S 設定手順
セクション28.2 UM11865確認し、6つの構成すべてを確認しています
手順は以下の通りです:
ステップ1:Flexcommを有効にし、CLOCK_EnableClock+RESET + CLOCK_AttachClk
ステップ2:FIFOXの設定(FIFOCFG=0x35、ENABLETX=1、SIZE=8)
ステップ3:IO_MUX_SetPinMux(IO_MUX_FC3_I2S)でI2Sピンを設定し、AON MCI_IOMUX有効化
ステップ4:レート設定(CFG1 MSTSLVCFG=0b11=NormalMaster、DIV=3 → BCLK=3.072MHz)
ステップ6:FIFOCFGでDMAを有効にする
すべての手順に従ったにもかかわらず、以下のことが観察されました。
- GPIO25/GPIO26にSCK/WSエッジがない
- TX FIFOがデータを受け付けない: TXNOTFULL=1だが、FIFOWR書き込み後もTXLVLは0のまま
セクション28.2のステップ4には「コントローラの動作に関しては、クロックが
I2S レート」ですが、PERSEL=I2S_RECEIVE が
NormalMasterはパッドにSCK/WSを駆動する予定です。
もう少し詳しく教えていただけますか:
1.PERSEL=I2S_RECEIVE (0b101) は SCK/WS を出力として駆動できますか?
MSTSLVCFG=NormalMaster の場合?
2. PERSEL=I2S_TRANSMITを指定してFIFOWRに書き込みを行った後、TXLVLが0のままになるのはなぜですか?
FIFOWR書き込みを受け入れる前にMAINENABLEが必要ですか?
6.観察された問題点 – 具体的な質問
上記の設定がすべて完了したら、 GPIO25とGPIO26はゼロエッジを生成します。PCM6120 はクロックが欠落していることを報告します (ASI_STS = 0xFF、 DEV_STS1 = 0x80)。
さらに診断を実行しました。FC3を次のように構成しました。 I2S TXマスター (RXマスターの代わりに)そして、 FIFOWRへの書き込みはTXLVLをインクリメントしない — FIFOSTATは 0x30 (TXNOTFULL=1、TXLVL=0)私たちが書く単語の数に関係なく。
TXマスタプローブ後の関連レジスタの状態:
CFG1 = 0x17003C (MSTSLVCFG=3 = ノーマルマスター、DATALEN=24、MAINENABLE=0)
DIV = 3 (分周器=4、BCLK = 12.288MHz / 4 = 3.072MHz)
FIFOCFG = 0x35 (ENABLETX=1、TXI2SE0=1)
FIFOSTAT = 0x30 (書き込み後、TXNOTFULL=1、TXLVL=0)
MAINENABLE=1 の後:
STAT = 0x5 (BUSY=1、LR=1 — クロックロジックが内部で動作中)
GPIO25/GPIO26のSCK/WSエッジ: 0
NXPへの具体的な質問:
FLEXCOMM3 I2Sが kI2S_MasterSlaveNormalMaster (TXまたはRX)として設定されている場合、RW612上でSCK/WSがGPIO25/GPIO26(AONドメイン)に駆動され ない ことが期待される動作でしょうか?STATではペリフェラルが内部で動作していると示されていてもです。
あるいは、単一のFLEXCOMMトポロジー(1つのFCがクロックマスターとRXデータ受信機の両方として)はRW612 I2Sハードウェアで サポートされている のでしょうか?それともRW612は常に2つの別々のFlexCommインスタンス(1つのTXマスター+1つのI2Sブリッジ経由のRXスレーブ)を必要とするのでしょうか?
よろしくお願いします。
こんにちは、 @duyhung さん。セットアップの詳細情報を提供していただきありがとうございます。
参考マニュアル(RM00278)に基づき、I2Sインスタンスが通常のマスターモードで設定されている場合、SCKおよびWS信号は生成されるものの、データの送受信はしないように設定されており、これはCFG1[MSTSLVCFG]レジスタの31.1.RM00278 2節に詳述されています。I2Sドライバーでは、この構成は「I2S_TxInit(;「関数」は、使用中のFlexcommインスタンスと送信機インスタンスとしてのFIFOも設定します。
上記の情報に基づくと、共有信号を使用したダブルFlexcommトポロジー(既にテストした例で行われているように)が推奨されます。これは、 UM11865のセクション3.6.2.1.1の図9に示されている同様の例で実証されています。
RomanVR_0-1785886440838.png
また、I2SとDMA再生のサンプルコードをベースにしている場合、そのサンプルコードに加えた変更点について教えていただけますでしょうか?