2139125_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2139125_ja-JP

2139125_ja-JP

LPC55S36 I3Cマスターは、読み取り長がスレーブデータサイズを超えるとハングします。

I3C 通信用に 2 つのLPC5536-EVKボードをコネクテッドし、1 つを I3C マスターとして、もう 1 つを I3C スレーブとして構成しました。マスターの指定された読み取り長がスレーブによって提供されたデータの量を超える場合、マスターは読み取り関数I3C_MasterTransferBlockingで停止します。波形に基づくと、信号は正しいように見える、SO問題はマスター側にあると考えています。


私が提供した例では、スレーブのデータは [0x01, 0x02] で、長さは 2 バイトだけです。ただし、マスターは読み取り長を 3 に指定します。したがって、2 番目のバイトの終わりに、スレーブは T ビットを 0 として返して、メッセージの終了を示します。


テスト手順:

(1)スレーブボードをリセットする

(2)マスターボードをリセットする


T ビットの定義については、MIPI I3C 基本仕様 v1.1.1 を参照してください。

セクション5.1.2.3.4、SDRターゲットの9番目のビットはデータの終わりとして返された(読み取られた)データです

I2C では、ターゲットからの読み取りではコントローラのみが読み取りを終了するため、ターゲットは返すデータの量を制御できないという問題があります。対照的に、I3C SDR では、ターゲットが返すデータ ワードの数を制御しますが、必要に応じて I3C コントローラが読み取りを途中で中止することもできます。

...

bell_huang_0-1753257005599.pngbell_huang_0-1753257005599.png

bell_huang_1-1753257030765.pngbell_huang_1-1753257030765.png



Re: LPC55S36 I3C Master Hangs When Read Length Exceeds Slave Data Size

ユーザーは I3C_MasterTransferNonBlocking によって実際に転送されたバイト数を判別することはできませんが、私のアプリケーションには十分なようです。

Re: LPC55S36 I3C Master Hangs When Read Length Exceeds Slave Data Size

I3C_MasterTransferNonBlockingに切り替えてみました。ハングアップすることはありませんが、スレーブが実際に提供したバイト数をユーザーが知る方法はありません。私が共有した例では、転送数 = 2 などの情報を返す必要があります。

lpcxpresso55s36_i3c_interrupt_b2b_transfer_master の例を使用したテストでは、dataSize を 50 に変更したにもかかわらず、コードはその後 32 バイトの固定値を出力します。これは、スレーブが指定した転送数と一致します。

実際のアプリケーションでは、保留中の読み取り通知を伴う IBIに関する別の投稿で述べたCASEなど、IBI が発生してプライベート読み取りが実行された後、スレーブの転送カウントは予測不可能であり、変化するCANがあります。マスターが大きなバッファを使用して読み取り転送関数を呼び出す場合、転送関数は実際に転送されたカウントを返す必要があります。

Re: LPC55S36 I3C Master Hangs When Read Length Exceeds Slave Data Size

こんにちは@bell_huang

テストしてみました。

おっしゃる通り、

そして、この I3C_MasterReceive 関数をチェックしました。

/* Check RX data */
        if ((0UL != rxSize) && (0UL != (base->MDATACTRL & I3C_MDATACTRL_RXCOUNT_MASK)))
        {
            *buf++ = (uint8_t)(base->MRDATAB & I3C_MRDATAB_VALUE_MASK);
            rxSize--;
            if ((flags & (uint32_t)kI3C_TransferDisableRxTermFlag) == 0UL)
            {
                if ((!isRxAutoTerm) && (rxSize == 1U))
                {
                    base->MCTRL |= I3C_MCTRL_RDTERM(1U);
                }
            }
        }

データサイズに応じてデータを読み取ります。

そして、i3c 割り込みデモをテストしたところ、この機能がサポートされていることがわかりました。

Harry_Zhang_0-1753346197214.pngHarry_Zhang_0-1753346197214.png

dataSizeを50に設定しました。

Harry_Zhang_1-1753346281166.pngHarry_Zhang_1-1753346281166.png

そして決してハングアップしません。

お試しになることができます。

BR

ハリー

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-20-2025 04:34 PM
更新者: