回答:
1%以内であれば、大丈夫です。
UARTで16倍のオーバーサンプリングクロックを使用しているとします。たとえば、1,843,200 Hzから16倍のオーバーサンプリング115,200 bpsに設定できます。(このようなオーバーサンプリングはかなり一般的です)これにより、UARTは開始ビットの立ち下がりエッジから8オーバークロックをカウントオフできるため、ビットセルの中心をオーバークロックの+/-期間内に配置できます。データをサンプリングするタイミングを決定するために、オーバークロックの16周期をカウントオフします。
開始ビットの中心にヒットできると仮定した場合、8データビットにわたって正しいビットセルでシリアルデータをサンプリングし続けるために、クロック周波数は(8-0.5)/ 8と(8 + 0.5の間でなければなりません)/ 8、または意図したビットレートの+/- 6.25%。オーバークロックを高くすると、スタートビットの中心にヒットする理想的な状態に近づきますが、通常は8xまたは16xで十分であり、5%のミスマッチが機能すると想定できます。
ただし、反対側が完全に周波数に依存しているとは考えられません。4%速いデバイスを4%遅いデバイスに接続すると、問題が発生します。少なくとも1つのケースに遭遇しました。PCが少し遅く、デバイスが少し速く、2つはわずかにしか通信できませんでしたが、同じデバイスは他のPCでも問題ありませんでした。デバイス。(約112kbpsと119kbpsでこれらをOスコープにしました)そのため、公称周波数にできるだけ近づけるようにしてください。名目上の2%以内に問題があるものを見たことはありません。
通常行うことは、意図したUARTオーバーサンプリングレートにボーレートを掛けた整数倍を提供するマスタークロックレートを使用することです。たとえば、CPUを約8MHzで実行したい場合は、7.3728MHzの発振器を使用します。これを4で割って1.8432MHzを得ることができます。これはたまたま115200の16倍です。
@JustJeffが言及する1%は必須ではありません。ほとんどのUARTは、最後のビットで半分のビットエラーを許容します。ほとんどの場合、フレームは1スタートビット、8データビット、1ストップビットで構成され、合計10ビットです。10ビットの半分のビットは5%です(JustJeffの6.25%は開始ビットと停止ビットを考慮しません)。
JustJeffはスタートビットを忘れていましたが、Stevenhはストップビットを追加しました。8データビット、1スタートビット、パリティビットなしの共通プロトコル(ストップビットの数は関係ありません)を想定すると、スタートビットのリーディングエッジから中心まで8 1/2ビット時間があります。最後のデータビット。一般的に、受信者はこの最後のビットを1/4ビット時間内にサンプリングする必要があります。1/2ビットが故障しきい値の保証であることに注意してください。電気ノイズとジッターが常に存在するため、そこに近いものはすべて実現不可能になります。
1/4を8 1/2で割った値= 2.94%。
JustJeffが述べたように、ほとんどのUART実装は実際に非同期16xクロックで着信データをサンプリングします。これは、開始ビットのリーディングエッジを測定できる誤差であるため、さらに1/16ビット時間の不確実性を追加します。8 1/2ビットのうち1/16ビットの時間はさらに0.74%です。これは、以前に計算されたエラーバジェットから生じます。最終的には、中心の1/4ビット時間内に最後のビットをサンプリングするために、レシーバがクロックの不一致を許容する2.2%になります。
他の人が言ったように、正確なボーレートが必要な場合、7.3728MHzの水晶を使用するのが一般的です。通常、クリスタルエラー内でUARTボーレートをヒットしながら、CPUを最大レート近くで実行するように調整できます。
まだ言及されていない点の1つは、一部のデバイスは、受信したデータのバイトごとにデータのバイトを送信することを期待しているということです。そのようなデバイスに連続的にデータが供給される場合、そのボーレートは送信デバイスのボーレートよりもさらに0.1%遅く、わずかに短縮されたストップビットを送信する機能はありません。その出力は、1000回連続して毎バイト遅れますデバイスが16バイトのバッファリングに制限されている場合、デバイスは約16,000を通過した後にデータのバイトをドロップし、その後1000あたり約1バイトをドロップします。いわゆる「1200ボー」モデムが実際に1200ビット/秒よりわずかに高い速度で動作することに注意する価値があります(私はそれが約1202であると思います)。である、