4

マイクロプロセッサが単線で非同期シリアル通信を介して外部デバイスと通信するためのコードを書いています。

Low/High (いずれかの方法) からのワイヤ上の遷移を認識できるため、ビット境界を見つけることができます。デバイスが使用しているボー レートがわかっている場合は、クロック オフ ビットを開始できるので、デバイスからのビット ストリームを読み取ることができます。

私が概念的に苦労しているのは、開始ビットを認識することです-バイトフレームの開始を見つけることです(8ビット、パリティなし、1開始ビット、1停止ビットを取得していると仮定します)。各フレームがスタート ビットで始まり、ストップ ビットで終わることは理解していますが、スタート ビットとストップ ビットは他のビットと同じように見えることを理解しています。彼らの立場)。

スタート ビットを識別する唯一の方法は、それが持続的なアイドル期間の後の最初のハイ ビットになるということです。ラインはアイドル状態で、次の上位ビットは開始ビットになります。これで問題ありませんが、ビットストリームの途中でデバイスのリッスンを開始し、ワイヤ上に 9 ビット以上のアイドル時間がない場合はどうなりますか? ビットをクロックオフしていますが、どのビットが開始ビットであるかを認識して、バイトを読み取れるようにするにはどうすればよいですか? 私がビットをクロックオフしている場合、フレーム間のものはビットの整数倍にしかならないため(たとえば、ストップ「ビット」は1.5ビットにすることはできません)、すべてがビットのように見えます。

私が理にかなっているといいのですが...助けてくれてありがとう。

4

2 に答える 2

3

開始ビットは、コードにバイトを受信させるものです。ステートマシンで最もよく説明されています。4 つの基本的な状態があります。

  • 状態「待機」: データラインをサンプリングします。開始ビットが表示されたら、1.5 * ビット時間でタイマーを開始し、状態「データ」に移動します
  • 状態「データ」: タイマーを待ってから、データラインをサンプリングしてビットを記録します。タイマーを 1.0 * ビット時間に再起動します。すべてのビットを受信して​​いない限り、繰り返します。すべてのビットが受信されると、状態「停止」に移行します
  • 状態「停止」: タイマーを待ち、データラインをサンプリングして停止ビットをチェックします。間違っている場合は「エラー」状態に移行し、そうでない場合は受信バッファに 1 バイト追加します。状態「待機」に戻ります。
  • 状態「エラー」: 文句を言います。deus ex machina が "wait" 状態に戻るのを待ちます。

ここからの基本的な洞察は、バイトを受け取るコードを実行するには開始ビットが必要だということです。また、次のバイトのスタート ビットを確実に確認できるように、ストップ ビットが重要です。

于 2012-10-14T20:51:50.427 に答える
0

プログラムにシーケンスを読み取らせ、ある時点でパターンを解読させ、9ビットを前後に移動させます。送信しているチェーンに応じて、データは意味をなします。パターンが認識されたら、おそらくデータに 1 つのピリオドがあるかどうかを認識し、バイトをピリオド コード (ascii 46) に一致させるビットの行があるかどうかを確認し、スペースを前後にカウントして開始を確立します。そしてストップビット。

于 2017-01-25T20:46:33.083 に答える