組込み現場の実践紹介:SPI通信とI2C通信のトラブルシュート

組込みの現場の実践を紹介しますという動画を上げて、その時にSPIの通信でミリ波とSDカードを繋げたら上手くいかないということを説明したんですが、その動画間違えてまた同じものをもう一個手配して考えてみますが、別の基板でも同じ現象が起きたので、ミリ波のボード自体の問題ということがわかりました。

スポンサーリンク

マイコンとSPI通信の設定

はい、よく調べて、PSOCというマイコンを使っているんですけど、データを送るピン、データを受けとるピン、どのSPIの端子につなぐか言うのを設定するピンがあって、これがマイコンでミリ波問題するための通信同じ通信線があって、どのモジュールを使っているかというピンが刺さるって感じで、ミリ波とSDがあって、実際の配線としてはMOSIという端子はそれぞれのMOSIにつなぎます。こっちのデータをこっちから受け取る方のピンはこうやってつなぎます。

チップ選択っていうのがその信号をハイにするのかローにするのか色々設定があるんですけど、それぞれ接続してやって、例えばずっとハイの状態でローに落ちたら、この信号の出力を落としたら、例えばこのCS1の信号が元々ハイだったのをローに落としたら、それを受け取ったこのミリ波側がこれから受信を開始します、送信しますとか言うモードに切り替わると言うのがあるんですね。

MOSI/MISOの動作

メインアウトスレーブインという方で、メインのPSOCからスレーブミリ波とかSDに対して信号なんとかMOSIの方はちゃんになってて、MISOメインインスレーブアウトだからこっちからこっちっていう方がうまくいかないって話で、何でかっていうとそのSDカードは本来そのMISOみたい固形になってほしいのがえっとなんかこんな感じになっちゃってて0の3.3V、同様その電位のあれになってて、どうせこれになったらっていうと、このミリ波側のMISOがこっちが常にハイローとか言って繰り返したいのにローに落とされてると、こっちのハイとぶつかって、ここでぶつかって、本当は落ちたいのに落ちずに、こっちのミリ波側のハイが出力されたピンの影響を受けてダラダラってまた上がってるっていう感じだったんですよね。

このSDがハイを出すときはハイとハイでハイが出るのでこんな感じで、ローに落ちたらまたそこをオーナー端になるっていう動きだった。浮かせとくという処理にさせるのが一般的なんですけど、使わない時もハイを出力しているということは別の最近のようなSDカードをつけてSPIの接続をしたとき、絶対このミリ波のMISOの範囲の出力にないでいるモジュール電が位を引っ張られる形になるので、何を並べてもこんな感じになっちゃいますよね。モジュールだったということが分かりました。

問題解決までの経緯

もうこれ本当をここまで突き止めるのに、もう2週間くらい、丸2週間かかったような気がしました。

I2C通信への切り替え

I2Cの通信線を使ってI2CとSPIの変換みたいなのがあるのでそれを忘れてこの間はSPIでSDが接続されるという形で構成するということにしました。

でざっと今動きを見てるんですが今手元に適当によくM5スタックに使える環境センサーです。ソースコードとしてはざっととI2CはSPIとは違って、SPIの場合はチップ選択のピンをハイにするかローにするかで、どのモジュールと通信するか決めるというやり方なんですが、I2Cはそれぞれ固有のアドレスを持っていますよね。

I2C通信のテスト

このテストコマンドっていうのを送りますっていうのがここにつらつらとソースコードが書いてあって、そのテストコマンドっていうのは0xF3と0x2DというこれはそのSHT30のステータスレジスタを取得すると言いますコマンドを送ってこれで送信してみると、こんな感じで、上がクロックで下がデータです。

オシロはかなり便利で、送付されたデータをデコードすることができて、これは16進数で0x44できてるよね、この後はF3の2Dが最近言っているようを示してて、実際私はそのスレーブアドレスセンサー側のスレーバーアドレスは0x44で、送るのはF3と2Dを送信という設定しているので、実際これで送られてきたと。

時間幅がちょっとアレなので切れちゃってますけど、これでどちらのアドレスに何というデータを送ってやったら、今度受け取った方の応答を返しますよね。これは実際のステータスレジスターの中身を介していて、80なので1000、0000という二進数表現ですが、それぞれのビットが何を表しているのかがマニュアルに書いてあって、80だとこれはそうだみたいなのがわかるという感じですね。処理を続けるとか言うのを書いてるっていう感じですね。

まとめ

はい、それで言ってみたかったんだけど前に説明したSPIでミリ波がおかしいのはミリ波が壊れてるから言ってたんですけど、実際は壊れてなくてミリ波の使用のおかげでいつか通信ピンがハイ出力で固定されてるなんてのを思いもせずに2週間くらいやっと突き止めて、別の手段を今作ってますよというところで、こんな苦労もありますよということで、紹介させていただきました。

どうもありがとうございました。

error: コンテンツ保護のため右クリック使用禁止