平成27年 8月10日
汎用の高速シリアル通信機能(5) 通信の基本的手続き(4)
通信の基本的な手続きについての検討はほぼ終わりました。
文書の説明だけでは分かり難いのでタイムチャートにして再度説明します。下記はエラーの無いときの通信状態です(○が送信開始、●が送信終了)。

(1)マスタからスレーブへ送信するための通信切り替え時間
この待ち時間はプログラムによるポーリングで行います。待ち時間は後で説明するAのスレーブからマスタへの送信待ち時間と同じ設定時間ですがポーリングによる変動があるため、実際の待ち時間は少なくとも通信切り替え時間以上の待ち時間となります。また、マスタ側の受信バッファはここで全ての受信データを処理した後にクリアします。
(2)スレーブからマスタへ返信するための通信切り替え時間
こちらは専用タイマによる割り込み処理を行います。このため待ち時間は比較的正確に維持されます。
スレーブ側の受信バッファは受信データを解析処理した後でこの時間内にクリアされます。
(3)マスタからスレーブへの送信
内容は下記の通りになります。
[ブロック送信コマンド][全送信文字数]<スレーブ1への送信> ・・・・<スレーブNへの送信>[CRC(2バイト)][Break]
<スレーブNへの送信>は下記を示しています。
[スレーブアドレス][本スレーブアドレスに対する送信文字数]<コマンド1>・・・・<コマンドN>
<コマンドN>は下記を示しています。
[コマンドコード]{各コマンド毎に定義されたオプション}
(4)スレーブからマスタへの返信
スレーブからの返信は下記のようになります。
[返信用スレーブアドレス][返信文字数]<コマンド1>・・・・<コマンドN>[CRC(2バイト)][Break]
返信用スレーブアドレスとは、自分のアドレスに0x80を加算したもので、送信元がマスタかスレーブかを識別できるようにしてあります。
複数のスレーブが順序に従って返信を返すためには、マスタとスレーブのどちらが送信したデータかを識別できる必要があり、このようにしてあります。
コマンドの書式についてはマスタからスレーブへの送信と同じです。
後は、通信エラーからの回復時の処理手順を図示する必要がありますが、日を改めます。