Darkside(https対応しました)

2021年10月6日(水) 21:29

i2c が使えない

 無線送信は画質を落とさないとデーターレートが高くなり過ぎてしまうが、内部同時動画記録なら画質を落とさなくても行ける。せっかくだから960×540の段階で動画保存しておこう。
 そんなことを考えて試したら、クローズ時に Segmentation fault が発生。動画ファイルは記録されているが、いかなるソフトを使っても再生できない。撮影元での高画質動画保存機能は魅力的で非常に実装したいが、それでも必須機能ではない。とにかくトラブルが掃いて捨てるほど発生しているので、うんざりだ。実装にこだわらず、実装を行わず、予定通り傾斜センサーへと進むことにする。

 傾斜センサーは初期化が必要だが、dsPIC の方で先に初期化が完了するはずなので Jetson Nano からは初期化しない。
 センサーの動作確認したときのプログラムを取り出し、コンパイルを試す。何のエラーも無く、完了した。ならばと、実行する。

Write i2c internal address error: Connection timed out

 何かエラーが出て、値を取得できない。i2cdetect -y 1 してみると、取得にやたら時間が掛かる。1アドレスの取得を試し、タイムアウトで失敗。それを繰り返すせいでタイムアウト×n倍の時間を要していると思われる。
 最もありえそうなパターンは、SDA と SCL の逆接続である。しかし、コネクターを逆に挿し直すのは容易じゃない。カメラのケーブルもそうだが、Sタンク車体からいったん Jetson Nano を取り外さないと作業空間不足で何もできないのだ。

 バチっと小さな音が鳴り、少しばかり焦げ臭くなる。うわっ何が短絡した!?
 Jetson Nano のACアダプターは抜いてあるし、Sタンクの電源も切っている。だが、Sタンクのバッテリーは接続したままだった。金属装甲に囲まれた環境は定位置に固定すれば安心だが、外すときは危険だらけである。今のでどこか壊した可能性がある。

 見た目はどこも壊れていないので、取り敢えずSタンクの自動水平キープ機能を試す。しっかり効いている。つまり、姿勢制御やってる dsPIC は、傾斜センサーを間違いなく読めている。Jetson Nano のI2Cはバスの途中に挿入されているので、dsPIC が読めているということは Jetson Nano にもマトモな信号は流れるはず。もはや Jetson Nano のI2Cバス故障が疑われるが、センサーが認識できないだけでI2Cバス自体は存在が認識されている。ソフト上では。
 もしかすると、SPIを使おうといじったときに変な変更を加えてしまったかもしれない。Jetson-IO を実行すると、一発で判明。

 何と、3番ピンと5番ピンは i2c1 だと思っていたら実は i2c2 だった!
 これは完全に不意打ちだ。2年前の Jetson Nano 初期リビジョンでは i2c1 であり、その前提でソフトは作られている。それが i2c2 に変わっていたのでは、動作する訳がない。
 試しに i2cdetect -y 2 してみると、一瞬で取得完了。ただし、周辺機器は 0x50 と 0x57 にしか発見できない。傾斜センサーは 0x1d に居るはずだが、何もない。0x3a の方に認識されるのかもしれないが、そっちも何もない。

 センサー読み取りプログラムを実行すると、タイムアウトしないがエラーが出た。文言が、少し変わっただけだった。

Write i2c internal address error: Remote I/O error

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4