![](https://jhalfmoon.com/dbc/wp-content/uploads/2018/11/JH-2-150x150.png)
今回は、トホホな疑問というより、トホホな失敗であります。久しぶりにやらかしました。いろいろ調べた上で最終的に分かったのは、信号線に自分で貼り付けたラベルが間違っていた、ということ。過去の自分に騙されて、TX/RXを逆刺ししておりました。出力同士のショート! 端子が壊れないでよかった。
※「トホホな疑問」投稿順Indexはこちら
冒頭のアイキャッチ画像に「トホホな」信号波形を貼り付けました。UARTの波形です。明らかにオカシイのは、LOW側が1.4V付近までしか落ちていないこと。波形を見れば一目瞭然、変なことが分かります。ま、しかし、今回は波形を見るまで延々とソフトの設定などを確かめていて墓穴を掘りました。
今回「やろうとしていた」のは、Raspberry Pi 4 model BのUARTとRaspberry Pi Pico のUARTを接続しての実験です。この2台の間では大分前にUART接続して動かしてみたことがあり、UART接続そのものでトラぶるとは思ってもいなかったのです。だいたいその時に後で配線間違えないように「ラベル」を書いて信号線に貼り付けてあったし。。。
「動作OKだった配線を外してあった」ところに伏線がありましたな。一度動作したら配線はそのままにしておけば良いのですが、いろいろ操作しているラズパイPico、USBに加えてデバッガの配線等もあり、邪魔なので当座使わないUARTの配線ははずしておこう、としたわけです。「ラベル」貼ってあるしね。
さて今回、UART接続を復活させるべく「ラベル」通りに再接続しました。Raspberry Pi 4からRaspberry Pi Picoへ向かって文字を送信してみると、化けるのです。普通にアスキーキャラクタを送っているのに何か妙なキャラクタが現れてきます。
ほとんど何も考えず、まず疑ったのはボーレートです。ボーレートが違うとよくこういうのはあるよね、と。Raspberry Pi Pico側の設定とRaspberry 4側の設定が違うのだろうと。でもボーレート間違えてなさそうなのだよな。ケーブル結構長いです。もしかしてボーレート速すぎる?この間は115200で動いていたんだけれどな。とりあえず両方を「確実そうな」9600ボーに再設定してもみました。ダメです。
むむ、ボーレートでなく、ビット幅とかストップビットの設定か?そうとも思えないケド。。。といいつつ、下手な鉄砲で「その辺」再設定してみます。ますますダメ。フロー制御でもないし。
エイヤーと、ラズパイPicoのUARTを0から1へ変更してみました。このとき信号線を接続しなおしたので、例のラベルに頼らず再確認しておればよかったのですが、まだ盲目的に信じてます。UART0と同じように接続してしまいました。またもや同じ問題が。
「ソフトの設定」問題とみて結構な時間を費やしたあげく、遂にオシロあてることにしました。冒頭のアイキャッチ画像を御覧じろ。ロウが真ん中辺の電位にとどまっております。反省を込めて現象をまとめると以下です。
-
- ラズパイPicoのTXをRaspberry Pi 4のTXに接続していた。
- 出力同士が衝突。
- ラズパイPicoもラズパイ4も、UARTのTXなので何もデータが無いときはHigh.
- ラズパイ4側は動作させなかったのでズッとHigh
- ラズパイPico側でデータを送ると、HighはHighだが、Lowに引く時はラズパイ4の出力のHighと引っ張り合いになり、ちょうど真ん中辺、1.4V付近になっていた。
- ラズパイPicoのRXをRaspberry Pi 4のRXに接続していた。
- どちらも入力なのでHiZ.
- そのままではどちらにもデータは送られてこない筈だが、TXとRXの線は50cmくらい並行に並んで走っていた。誰もドライブしていない影響されやすいRX線は、おとなりのTX線が動作する度にそちらの信号を拾っていた。
- このため、TXにデータが載ったタイミングでRX側にも値が観測されていた(でもノイズなので正しい値ではない)
- タイミング的には良い感じなので、何か文字を受け取っているかのように見えて騙された。
結局のところ、自分が貼ったラベルの間違え。正しく信号線を繋げば全然問題なく動作しました。トホホ。。。