概要
ラズベリーパイ(Raspberry Pi 3 Model B)とのシリアル通信ができるようになるまでに
苦戦した話です。
PCとラズパイを接続してラズパイの電源を入れると、
PCのシリアルコンソールでシリアル出力が確認できるようなソフトウェア(U-Boot)を
準備したのですが、
出力を確認できるまでに時間がかかり、
いろいろと原因を考えさせられました。
今回の原因は単純なものでして、
ラズパイへのシリアルケーブルの接続が間違っていたことでした。
具体的には、
赤ソケット(3.3V電源出力)をラズパイ上の3.3V出力ピンに接続してしまっていたことでした。
後から考えると間違えようがないことでも、
そのときは不思議とその間違えに気づかないものですよね。
シリアル出力確認できない問題の解決策詳細
背景と問題
ラズパイでU-Bootを動かしてそこから任意のOSを起動したりと、
いろいろと試そうとしていました。
その準備としてこれまでに、
ラズパイとシリアル通信を行うためのドライバをPCにインストールしました。
インストール後にも動作不良があったため、その問題を解決しました。
詳細は下記ページを参考にしてください。
ラズパイの一般的なブートローダは対話式のものではなく、
事前に決めたOSを起動するタイプのものなので、
いろいろと試そうと思っていた今回には向いていませんでした。
そのため今回はブートローダとしてU-Bootを使おうと思っていたんです。
U-Bootを動かして、
シリアルコンソールで対話を行うための準備は下記の通り。
- ハードウェア
ラズパイを用意する - ソフトウェア
SDカードに実行ファイルや設定ファイルを格納し、SDカードをラズパイにセットする - 接続
ラズパイと、シリアル通信を行うPCをシリアルケーブルで接続する
PCでシリアルコンソールを起動しラズパイへのシリアル接続を確立する
電源を投入するとラズパイはシリアル出力を行い、
それをPCのシリアルコンソールで確認する、
ということが最初の確認ポイントになるのですが、
予定は裏切られてまずここがうまく来ませんでした。
以前にもU-Bootを動かしたことがあったので、ここには苦戦しないと思っていたのですが。
試したことと解決策
要因として考えられることはいくつかあると思います。
- ハードウェア
ラズパイが壊れている
新品が壊れていることはめったにないと思いますが、
今回使ったのはお古だったので少しの可能性はあると思いました。 - ソフトウェア
シリアル出力をするソフトウェアが入っていない
そもそも自分が思っているソフトウェアが実行されていなかったり、
実行されているけどシリアル出力に命令が進んでいない可能性がある可能性があると思いました。 - 接続
シリアルケーブルの接続が正しくない
シリアル通信の確立ができていない
最後に書いた、シリアル通信の確立ができていないかどうかについては、
確立できていない場合には
シリアルコンソール(今回はTera Termを使用)がメッセージを出してくるので
原因が分かりやすいのですが、
それ以外は「シリアル出力出ない」というだけで、
原因究明が厳しいんですよね。
どうしても原因がわからなければ、
U-Bootを修正してラズパイ上のLEDを光らせてみようかな、とか考えていました。
1秒間隔で点滅させるプログラムを試したり、2秒間隔で点滅させるプログラムを試してみて、
その通りに動いていないようであれば、
そもそも自分が思っているプログラムが動いていないということなので、
ソフトウェアを見直すことで究明を進めていけそうです。
逆に、その通りに動いているようであれば、
「用意したプログラムが動いている」ということは言えそうです。
その場合はシリアルドライバ周りが正しいかとか、ハードが正しいか、
という方向で究明を進めていけそうです。
ここまで前置きが長くなりました。
最終的には、ラズパイへのシリアルケーブルの接続が間違っていたわけなのですが、
そもそもラズパイへのシリアルケーブルの接続は下の付属カードを見て、
黒ソケットをピン6に、
白ソケットをピン8に、
緑ソケットをピン10に、
赤ソケットをピン1に接続していたのですが、
これが間違えだったのです。
一度正解を知るとなぜ気づけなかったのかわかりません。
うっかりとはそういうものですね。
正しくは、
赤ソケットは解放(どのピンにも接続しない)です。
赤ソケットのところに書いてある+3.3Vとは、
「+3.3Vの出力電圧のあるソケットです」という意味でしょう。
ラズパイに取り付けたCPU冷却用のファンへの電源供給に使ったりするらしいです。
下の写真はシリアル出力が確認できたときのピンヘッダの写真です。(ちょっとボケてますが。)
これでラズパイに電源投入すると、
下のようにシリアル出力がされてきました。
なお、シリアルコンソールはTera Termを使っていて、ボーレートは115200です。
Bus usb@7e980000:までババッと出力されて数秒停止して、
(最初、”U”が出るべきところが変な漢字が出てしまってますが今は気にしない)
一瞬の間に何かの出力と画面クリアが何度か繰り返されて真っ暗(クリアされた状態)になり、
そのあとにEnterを押すと、
下のようにU-Bootのプロンプトが出てきました。
なんか一文字目のUの出力がおかしいですが、
ひとまずU-Bootのプロンプトまでたどり着けましたし、
何よりシリアル出力を確認できた瞬間はこれまでの苦労の分だけ感動するものです。
おわりに
今回はラズパイとのシリアル通信に苦戦した話をしました。
ここはすんなりと行く予定でしたが、
思わぬところで苦戦したので記事にしてみました。
原因はうっかりミスでしたが、何かのお役に立てば幸いです。
今回使用した、ラズパイ向けのU-Bootの構築についても今後解説したいと思います。
最後にお知らせです。
ラズベリーパイ(Raspberry Pi)をリモート経由でご利用いただける、
仮想ラズパイサービスをご提供しています。
ご興味持たれた方はこちらもご覧ください。
コメント