ダミーデータを使用する方法の場合には、上記フレームの先頭に、送受信切り替え時の対策用のダミーデータDMY(0xFF)を追加するだけです。
 |
| 図2. ダミーデータ付通信フレーム |
ここで、送受信切り替え時に何が起きるのかをもう少し詳しく説明したいと思います。
送受信切り替え時の不定状態になると、受信をしていないのにCPUには1ビット(0)を受信したと通知されることがあります。この1ビットをCPUは、調歩同期通信のスタートビットとして解釈してしまい、その後のデータ8ビットとストップビットを検出し、1バイトデータを受信したと検出してしまいます。
この時本当にデータを受信しておらず、ただスタートビットだけを検出してしまった場合であれば、それはただのゴミデータとなるのですが、実際にデータが送られている場合には、先頭のSTXとぶつかることになります。
そうなると、CPUがデータの開始をずれて認識してしまうので、データが化けてしまったり、フレーミングエラーとなってしまいます。
つまり、送信側は正常な1フレームのデータを送信したつもりでも、受信側ではSTXを受信できていないため、続くデータもすべて破棄してしまう動きになります。
よって、フレームの先頭にダミーデータ(1バイト以上)を挿入することによって、不要なスタートビットによるデータを破棄し、その後のSTXで本当のフレームデータの受信を始めるというわけです。
このことから、先頭の不要データを破棄させるダミーデータと、本当のフレームの先頭を表すSTXが最低限必要だということが分かると思います。
また、このダミーデータはEthernetフレームの先頭にある、遅延によるデータ消失を防ぐプリアンブルと同じような意味として使っています。
尚、例ではダミーデータは0xFFとし、パリティチェックはなしとしていますが、これにも理由があります。
まずダミーデータを0xFFとすると、不要なスタートビットを検出したとしてもデータをストップビットとして検出させることができ、フレーミングエラーをキャンセルさせることができるからです。
次にパリティチェックは、ありにしてしまうと、パリティビットによってストップビットが検出できずフレーミングエラーになる可能性があります。そのため、パリティチェックはなしにしていますが、どうしてもパリティチェックを使いたい場合には、奇数パリティにすればパリティビットが必ず1になり、ストップビットとして検出することになるので、フレーミングエラーをキャンセルすることができます。