質問: AVR UART同期問題 私は組み込みプログラミングを学んでいます(私は電気技師ではありません)。 これが適切な場所ではない場合、またはこの質問を誤っている場合は、申し訳ありませんが、解決策を見つけようとするのは非常に困難でした。 私はGPSモジュールと16x2のLCDを搭載したATMega32を使用しています。 UARTでNMEAセンテンスを読み、解析したデータをLCDに送信したいだけです。バッファ内の文を読み、それをディスプレイに吐き出します。ただし、データに矛盾が生じることがあります。 GPSは常にオンになっており、AVRは途中で起動し、文の開始を待ってから受信を続けます。 私の質問は、1つが常に送信している場合(GPSは1 Hzのレートでデータを送信する)、もう1つはランダムな時間に受信する場合、2つのデバイスはどのように同期できるかです。 UARTの同期はどのように達成されますか?スタートビットとストップビットについては知っていますが、UARTが不良パケットを受け取った場合(たとえばフレーミングエラーが発生した場合)、UARTはどのように回復し同期することができますか? ハードウェアレベルでも何が起こるのか説明してください。できれば、オンラインリソースを参照してください。探しているものが見つかりません。 本当にありがとう! ルカ
回答: > > > UARTの同期はどのように行われますか?スタートビットとストップビットについては知っていますが、UARTが不正なパケットを受け取った場合(たとえばフレーミングエラーが発生した場合)、どのようにして回復および同期を行えますか。 > > > 信頼性のある同期は、送信間に少なくとも1文字期間の「デッドタイム」を残すことによって達成することができる。受信側のUARTがトランスミッタから同期解除された(または非同期になった)場合、送信が停止して再開したときに再同期します。 (NMEAの文脈では、シリアル回線速度はシリアルリンクが常にアクティブであるというわけではないほど十分に高くなければならないので、これは自然に起こるべきです。 ) 信頼性の低い同期を得るための、信頼性は低いがそれでも効果的な方法は、シリアルリンクに1.5または2ストップビットを使用することです。非同期になった受信UARTは、送信内のスペースを単一のストップビットとして読み始める可能性があり、最終的には拡張されたストップビットとの正しい同期に「ドリフト」するはずです。