Raspberry Pi Picoを使ったシリアル通信まとめ
(このページは工事中です)
このページは
Raspberry Pi Picoを使ってみようと思い立って調べた記録。
Picoのピンアサイン
https://www.raspberrypi.com/documentation/microcontrollers/images/pico-2-r4-pinout.svg
一つのピンにそれぞれの通信方式のピンが割り当てられているが、どのように切り替え(使い分け)られるのかは謎(後で調べる)。
UART
信号線は2本。TX又はTXD(Transmit Data)とRX又はRXD(Receive Data)。
2台のデバイスを信号線でつないで通信する。一方のデバイスのTXを他方のデバイスのRXに、一方のデバイスのRXを他方のデバイスの TXにつなぐ(クロス結線)。
フロー制御に使うRTSとCTSという追加信号線2本はオプション(Picoにはない)。
マスター・スレーブの区別はないので接続されたどちらのデバイスからでも通信を開始できる。
通信速度を制御するクロック信号線がないので、両端のデバイスの設定により次の項目を同一にしておく必要がある。
ボーレート(制御ビットを含む通信速度)
パリティの有無と種類、長さ
1回の通信で送る・受けるデータのビット数
フロー制御の有無
通信方式は調歩同期という名の非同期式。
スタートビットは1ビット長のLow(0レベル)信号
ストップビットは1又は1.5又は2ビット長のHigh(1レベル)信号
データビットは上記で設定したビット数長のLow又はHigh信号の連続
パリティビットは(有りに設定した場合は)上記で設定した長さのLow又はHigh信号の連続
通信がない時はストップビット(High信号)を連続して送出しておく
I2C
信号線は2本。データ用信号線SDA(Send DAta)とクロック用信号線SCL(Send CLock)。
信号線には、1台のマスターデバイスと、複数台(1台以上)のスレーブデバイスをつなぐことができる。各デバイスのSDA同士、SCL同士を接続する。
各信号線にはプルアップ抵抗を接続する必要がある。これにより通信がない時は信号線はHigh(1レベル)信号に保たれる。
通信方式はクロック信号を使用するため同期式と呼ばれる。
マスターデバイスはクロック信号の生成、通信の開始、通信の終了を行なう。
通信の開始後にマスターが指定するスレーブアドレスによって通信対象となるスレーブデバイスが決まる。スレーブデバイスは自らのスレーブアドレスが指定された通信においてのみ応答しなければならない。
SCLはHigh信号とLow信号を一定間隔で繰り返す。SCLがHigh信号の時のSDAの信号(High又はLow)がデータと見なされる。データ送受信中においては、SCLがHigh信号になっている間にSDA信号を変化させることは禁止されている。
通信は次の順序で行われる。
マスターが通信の開始を送信
マスターがスレーブアドレス(7ビット又は10ビット)を送信
マスターが通信の方向を送信
スレーブが受信成功を送信
マスター又はスレーブがデータ(8ビット)を送信
スレーブ又はマスターが受信成功を送信
データの送信を繰り返すか、あるいはマスター通信の終了を送信
通信の開始はSTART Condition(SCLがHighの間にSDAをHighからLowへと変化させる)によって示される。
通信の終了はSTART Condition(SCLがHighの間にSDAをLowからHighへと変化させる)によって示される。
通信の方向はR/W(Lowの時マスターが送信側、Highの時スレーブが送信側)によって示される。
受信成功は受信側がACK(Low信号)を送ることによって示す。受信失敗の時は受信側は時は何も送らない(これをNACKと称する)。
スレーブアドレスやデータはMSB(Most Significant Bit)を最初に送理、最後にLSB(Least Significant Bit)を送る。
スレーブは、処理が間に合わない時、ビジー信号(SCLを強制的にLow)を送出することによってマスターからの送信を遅延させることができる(これをクロックストレッチと称する)。
スレーブアドレスが10ビットの時はスレーブアドレスはUpperバイトとLowerバイトに分けて送る(参考ページの2番目を参照)。
SPI
信号線は4本。スレーブデバイスが1個の場合は3線も可能。
(2024-11-16)