こんにちは、
NXP製のI2CからSPIへのコンバーター SC18IS606を使います。私たちはRaspberry Piを使用して、I2C経由でSC18IS606にデータを書き込み、読み取っています。デバイスSC18IS606はRaspberry Pi OSのターミナルに表示され、ターミナルで「i2cdetect -y 1」コマンドを実行すると正しいアドレスで検出されます。
簡単なテストとして、GPIO 0~2への書き込み操作(設定/クリア)を行い、ループ内で一定の遅延を挟みながらそれらを切り替えてみました。この部分は正常に動作しています。
しかし、SC18IS606から読み戻すと、0x00ではなく0x80が読み取られます。
その後、ジャンパー線を使ってMISOピンとMOSIピンを接続し、SPIループバックを作成しました。SPIにパターン0x00から0x07を送信しています。読み戻されたデータは0x80から0x87までです。
ループバックテストでSPIを読み戻すと、MSBは常に1になります。
Mouserから購入したSC18IS606チップを2個テストしたところ、同じ結果が得られました。
何が原因か心当たりはありますか?どうすれば直せますか?
こんにちは、ジョンピーター
良い一日!
1. 注文内容をご確認ください
SC18IS606のSPI構成レジスタには、ORDERビットが含まれています。
SC18IS606がLSB優先に設定されているのに、ソフトウェアが受信バイトをMSB優先と解釈すると、パターンがずれて見え、MSBが常に設定されているように見えることがあります。
F0h SPI インターフェース構成コマンドでどの値を書いているか確認してもらえますか?
2.バッファを正しく読み取っていますか?
SC18IS606は、コマンド実行後すぐにGPIOまたはSPIデータを返しません。順序は次のとおりです。
SPI操作の場合、受信したMISOデータは内部バッファに格納され、その後I²C読み出しトランザクションによって読み戻される必要があります。
バッファを読み取る際のプロトコルエラー(例えばアドレスバイトをデータとして扱う、または1ビットのオフセットを読み取るなど)が、正確な「+0x80」を生むことがあります。
この情報がお役に立てば幸いです。他に何かご不明な点がありましたら、お気軽にお問い合わせください。
良い一日をお過ごしください。幸運を祈ります。
Raspberry Pi上で実行したPythonコードと、ターミナルに表示された出力結果を添付しました。SC18IS606はMAX31865とつながっています。レジスタ読み出し時に、最上位ビット(7ビット目)がハイになっている生バイナリデータを確認しました。
例えば、RTDの最上位ビットの生データは0xC6です。Pythonコードの7ビット目をマスクすると、0x41が得られます。レジスタ読み出しのたびに7ビット目がハイになる理由は何でしょうか?
38.png38.png
39.png39.png
20260818_00h49m35s_grim_01.png20260818_00h49m35s_grim_01.png