MIPI I3CインターフェースとNXPの P3T1755DP/Q900Z 温度センサ(パート2)

前回のI3C記事では、このI3C入門シリーズで使用しているセットアップについて説明しました。そこでは Raspberry Pico 2SparkfunのLogic Analyzerを使用し、sigrok I3Cデコーダを用いてI3Cトランザクションを示しました。

このシリーズで使用する2番目のI3Cコマンドは以下のとおりです。

digikey_coffee_cup #> i3c_rstdaa                                                                    
OK(0) 

Sparkfunの Logic Analyzerは RSTDAA I3Cコマンドをキャプチャしました(これは、以前に割り当てられていた場合、バス内のすべてのI3Cアドレスを削除します)。

このスクリーンショットでは、I3Cバスにおいてオープンドレインモードからプッシュプルモードへの移行を確認できます。SCLライン上の細いパルスは非常に短いものであり、I3C規格においては従来のI2CプロトコルのデバイスをI3Cデバイスから分離するための手段として使用されます。これは、I2Cデバイスがこの目的のための内部フィルタを備えていることを前提にしているためです。また、送出されたブロードキャストアドレス0x7Eもバス上で確認できます。

次に使用するコマンドは、ライン上に存在するI2Cモードのデバイスを識別するためのI2Cアドレススキャンであり、この場合は以下となります。

digikey_coffee_cup #>i2c_scan
OK(0),0x48

これはバス上で従来のI2Cアドレススキャンを実行します。

NXPの P3T1755DP/Q900Z 温度センサ は0x48のI2Cスレーブアドレスを持っています。これは、前回のキャプチャの拡大図で確認できます。

次に I3C_scan コマンドを実行します。

digikey_coffee_cup #>i3c_scan
OK(0),0x00,0x48,0x7e

先ほど識別されたI2Cスレーブアドレス0x48が確認できます。この時点で、以下のI3C_ENTDAAコマンドを送信します。

digikey_coffee_cup #> i3c_entdaa 0x21
OK(0),0x02,0x36,0x15,0x2a,0x00,0x90,0x03,0x63

このコマンドは、I3Cターゲットの動的アドレス割り当てプロセスをコントローラにより開始し、アドレス0x21を割り当てます。ターゲットにすでにアドレスが割り当てられている場合、I3Cスレーブはこの処理に反応しません。I3Cアドレスがスレーブに割り当てられた後、以下のコマンドを使用して正しく割り当てられたことを確認できます。

digikey_coffee_cup #> i3c_scan                                                                                                                    
OK(0),0x21,0x7e 

これにより、minicomターミナルを介し Raspberry Pico 2 が、I3C動的アドレス0x21の割り当て成功を確認しました。(0x7Eはブロードキャストアドレスです。)

この時点で、NXの P3T1755DP/Q900Z 温度センサのI3CプロビジョナルIDフィールドを読み取ることができます。これは6バイトの読み取り専用(48ビット)ワードであり、以下の情報を含みます。

• メーカーごとに固有の15ビットのメーカー名(例えばNXP)
• デバイスがランダムIDか、構造化されたプロビジョナルIDかを示す1ビットのフラグ
• メーカーによって割り当てられる16ビットのデバイスID
• 4ビットのデバイスインスタンス情報(例えばバイナリ入力のアドレスピン)
• メーカーであるNXPによって割り当てられる12ビットのデバイスリビジョン

MIPIのI3CプロビジョナルIDの正確な構成は、NXPの P3T1755DP/Q900Z 温度センサのデータシート内の表5および表6に、詳細なデータ内容とともに示されています。

このI3CプロビジョナルIDを読み取るには、アドレス0x8D(表9 に示されているBus characterization register(BCR)アドレス)に対してSDR CCCの直接読み取りコマンドを実行します。

そして、アドレス0x21を持つI3CスレーブのBCRアドレス0x8Dから、以下のように6バイトを読み取ります。

digikey_coffee_cup #> i3c_sdr_ccc_direct_read 0x21 0x8d 6                                                                                         
OK(0),0x02,0x36,0x15,0x2a,0x00,0x90   

受信したI3Cの6バイトデータ0x02、0x36、0x15、0x2a、0x00、0x90 は、NXPの P3T1755DP/Q900Z 温度センサ仕様書における前述の表に示されたデバイスのI3CプロビジョナルID(48 ビット)と一致しており、 Raspberry Pico 2 からI3C経由でのI3Cトランザクションが正常に実行されたことを確認できます。

次回の記事では、 NXPの P3T1755DP/Q900Z 温度センサからI3Cを介して温度を読み取る方法を説明します。

どうぞ素晴らしい一日を!

この記事はスペイン語でこちらからご覧いただけます。

Este artículo está disponible en español aquí.




オリジナル・ソース(English)