パートI:ボーレートおよび他の概念
1:ビットレート:9600bpsに
等分になった9600で毎秒除算と等価である第二9600bit、当たりに送信されます。
だから、1ビット当たりの時間は= 104.16666666666666666666666666667us 9600分の1秒です。0.1msについて。9600以来、すなわち、各1ビットのビットはその後、余分なスペースが存在しない、等しい重量部です。そして、どんなスタートビット、データビット、パリティビット、ストップビットません。
2:フレーム形式、フレーム間隔。
超端末と他のポート設定であるコンピュータでは。デフォルトフレーム形式であるコンピュータのポートのデフォルト設定は、8データビット、1ストップ「ビットは、(1ビットの開始が必要である)パリティなし、フロー制御なしデフォルトありません。
これは、実際には10ビットにあります。唯一の1つの文字があるので、9600は1秒/ 10 = 960フレームで送信することができる、すなわち、960文字であり、文字はフレーム8データビット内にあります
3:シリアル通信
シリアル連続もちろん、無伝送フレームの時間間隔は、コンピュータは9600bpsにでデフォルトのケース960を送信することができます。
コンピュータは、フレームまたは複数のフレームを送信し、また、送信されていないデバイスからの応答を待つ必要があるので、実際には、非同期通信では、一般的に、インタラクティブなプロセスが必要です。プログラマの目的を達成するYouwenyouda。
4:ボーレートクロック
実際にビットレート・クロック、期間は1ビットごとに費やしたことにします。ボーレート(実際のビットレート)分周クロック生成部は、実際に16回ボークロックで1ビットごとに、サンプリングクロックを生成します。
ボーレートジェネレータの本質は、クロック生成と同期RS232通信のための分周器の設計です。この機能を達成するためにカウンタを使用するシステムでは、分周率Nは、ボー・レート値を決定しました。カウンタは、典型的には、カウント値N / 2出力はN / 2がローである、などとすることができる後、次にカウント出力が値に設定されている、高く設定されている場合、システム・クロックの高い周波数で動作させます50%のデューティサイクルクロックボーレートを与えるために、ボーレートは、使用される特定のシステム・クロックの周波数及び大きさに依存N. システム・クロック周波数は、ボーレートは9 600 [MS1]必要とされる、40MHzのある16倍のボーレートクロック260でフェッチカウンタ2分の260 = 130、システム・クロック・サイクルの周期にほぼ等しい、出力、カウンタがオーバフローレベルの反転クロックがボーレートが合意された16回を取得することができます。
(Liupeng)
それはまた、理解することができる:40MHzの水晶、最小カウントパルスが25nsである、16倍のボーレートの周波数を、それが入力されるように、クロックサイクルは、1 /(* 9600 16)= 6.5us 40MHzの結晶である9600 * 16、カウンタであります= 25分の6500 = 260のカウントを数える必要があります。
クロックは、16倍のボーレートである場合、すなわち、1秒カウント9600、すなわち、9600クロック周波数のボーレートとしても理解され、その上に直接掛け。第二のカウンタは9600 * 16 = 153600です。
1 /(9600 * 16)(40000000分の1)で割った値が最小クロック周期カウントを得られるクロックサイクルの数だけではありません。簡略化のため、周波数カウンタの分周数を得るために直接分割され、40000000 /(16 * 9600)= 260です。
[MS1]
40000000 /(9600×16)= 260.4
シリアル通信のボーレートに設定する必要があり、この設計のためのボーレートは9 600bit / sのを使用しています。ボーレートのクロック周波数を生成すると、高い方が良い、このように高い正確なボーレートを生成することができます。50M設計は9600bit / sのボーレート生成される一次周波数を使用して、クロック・サイクルごとに1ビットのデータは、5208.33を必要とします。5208最も近い数値をとり、その後、ボーレートは、エラーレートが正常な通信を確保することができる非常に低く、誤差は約0.006%であり、9600.61です。
(Liupeng 5208分の50000000 = 9600.61)
5:エラー許容範囲
6:周波数分割ファクタ
除算器を実装するカウンターは簡単。実装LPM-カウンター利用可能。
そのような分周比が2で、次いで、直接出力Q0として使用することができます。分周比は、有効ビットとして4は、Q0、Q1である場合。
和、nは整数除算、すなわち、再カウント回数nがクリアされています。50%のデューティサイクルのような他の考慮すべき事項です。奇数部門は50%のデューティ・サイクルを達成するために簡単に思えます。
パートII:シリアルポートのボーレートにあなたを識別するために、どのように?
最も一般的なシングルチップ通信インターフェースとして使用するUARTシリアル・ポートは、すべての組み込みエンジニアの深い心を行ってきました。シンプルで実用的な機能を持つ[Www.t262.com)UARTシリアルポート、組込みエンジニアは、多くの場合、システムをデバッグするための重要なツールとしてそれを使用します。UARTシリアルポートの設定パラメータは、多くのが、最も一般的であり、これだけの通信ボーレートのパラメータを変更する必要があります。しかし、これは唯一のパラメータであり、多くの場合、私たちに多くの問題をもたらしました。だから、私たちはシリアルポートのボーレートのためにそれを認識しますか?ここで著者は、あなたの参考のために、シリアル率を識別するための3つの方法について説明します。
UART(汎用非同期シリアル受信機と送信機)シリアル非同期受信/ポートだけでなく、チップボードとの間の通信のための最も重要なインタフェース組み込みシステム、のいずれか、及び達成するために使用されるシステムとの間の通信を送信しますそして、スケジューリングシステム。UARTは、非同期シリアル通信プロトコルAであり、以下に示すように、ビット伝送、文字データフレームフォーマットによって各キャラクタ送信されたデータビットを動作します。
図1 UARTフレーム形式の文字データ
図の上記フレームフォーマットに見られるように、最初のUARTデータのフレーム同期ビット、データ・ワード、ストップビットの端部、およびオプションのパリティビット。UARTは、非同期通信であるので、そのため、ビットを送信する際には、厳密にボーレートの設定を観察する必要がありますが、受信者が同じボーレートで右に送信された文字データを解析する必要があります。このように、受信者が正しく識別、ボーレートの設定は非常に重要です。ここで著者は、実際の経験に基づいてボーレートを識別するために、3つの方法について説明します
徹底的な方法
理論的には、伝送ボーレートは任意の値に設定することができますが、通常我々は唯一ので、いくつかのシリアルレート値を使用し、図2に示されています:
図2一般的なシリアルボーレート
今、私たちは一つ一つを試すことができ、一般的なシリアルポートの速度ことを、常に成功があるでしょう。もちろん、私たちはホストによって送信されたものを知っている場合にのみ、それ以外の場合は、我々はそれに合わせて、正しいシリアルポートの速度はボーレートと実際のボーレートを設定する場合には、複数のデータであることに留意され知ることができる方法を読み出すことができます! - もちろん、データが間違っています。
オシロスコープの法則
オシロスコープは、電子エンジニア秒「目」で、我々はデータを送信するためにボーシリアルポートを「見る」ために、それらの目を使用します。ここでは、そのような範囲はすでに著者のIQよりもはるかに多いので、我々は、オフハイエンドデジタルロジック解析機能を備えた最初のオシロスコープを除外し、我々は議論をBenpianものではありません。
一部では、我々はフレームフォーマットの波形を説明し、ここで我々は波形を使用し、特殊な文字は0x55(1010 1010B)を送信します。上記の分析理論から、この波形ビットフリップ波効果をもたらすべきです。図3は、ダウンスクリーンショットをキャプチャするために、オシロスコープの著者であります:
図3 9600BPS送信波形図は0x55
一緒に理論解析を用いて、我々は、波形ビットを反転させることを知っているので、我々は、直接ボーレートを表示するために、関数ポインタオシロスコープ(カーソル)を使用し、図3に示すような波形を参照。図の左上隅。3実質的に周波数を設定する我々の9600kbpsに沿って、これが9600BPSの送信周波数を決定することができる、各フリップ9.615KHzの周波数、測定結果を示します。
チップ識別方法以来
ボーレートは、ホストコンピュータへの実際の状況に応じように多くの場合、ファームウェアのアップグレードが使用するUARTシリアルインタフェースとして使用します。環境が悪い場合、私たちはコミュニケーションの低いボーレートを使用する必要があります。このとき、自動ボーレート検出方法が生まれました。ここでは、分析のためのソースコード例の自動識別にブートローダにTIのStellarisシリアルポートのボーレートを有します。
int型UARTAutoBaud(unsigned long型* pulRatio){
長いlPulse、lValidPulses、LTEmp、LTOTAL。
揮発性の長いLDELAY。
//構成のSysTick、その値が最大値に設定されています。
HWREG(NVIC_ST_RELOAD)= 0xFFFFFFFFの;
HWREG(NVIC_ST_CTRL)= NVIC_ST_CTRL_CLK_SRC | NVIC_ST_CTRL_ENABLE;
//オープンエッジ割り込みピンをトリガ
HWREG(GPIO_PORTA_BASE + GPIO_O_IBE)= UART_RX。
// UART RXDピンのエッジトリガ割り込みを有効にします
HWREG(NVIC_EN0)= 1。
//エッジ割込み収集ピン、2バイトエッジ
一方、(g_ulTickIndex <MIN_EDGE_COUNT)
{
}
//計算値は、サンプリング、処理のオーバーフローをダウンのSysTick
(lPulse = 0; lPulse <(MIN_EDGE_COUNT - 1); lPulse ++)のために{
lTemp =(((長い)g_pulDataBuffer [lPulse] -
(長い)g_pulDataBuffer [lPulse + 1])&0x00ffffff)。
g_pulDataBuffer [lPulse] = lTemp。
}
//このサイクルは、2つの連続するパルス間の幅を算出します
(lPulse = 0; lPulse <(MIN_EDGE_COUNT - 1); lPulse ++)のために{
//二つの連続パルス間の幅の正確な計算
lTemp =(長い)g_pulDataBuffer [lPulse]。
lTemp - =(長い)g_pulDataBuffer [lPulse + 1]。
IF(lTemp <0){
lTemp * = -1;
}
//パルス幅の正しい両端を確認し、以下のように、アルゴリズムは次のとおりです。
// ABS(パルス[N] - パルス[N + 1])<パルス[N + 1] / PULSE_DETECTION_MULT
//または
// PULSE_DETECTION_MULT * ABS([n]のパルス - パルス[N + 1])<[1 + n]がパルス
IF((lTemp * PULSE_DETECTION_MULT)<(長い)g_pulDataBuffer [lPulse + 1]){
LTOTAL + =(長い)g_pulDataBuffer [lPulse]。
lValidPulses ++;
}
他の{
lValidPulses = 0;
LTOTAL = 0;
}
// 7つの有効なパルスは、UARTシリアル・レートを計算することができます
IF(lValidPulsesの== 7){
//最終的にはパルスカウンタに参加し、ボー・レートを計算します。
LTOTAL + =(長い)g_pulDataBuffer [lPulse]。
* pulRatio = LTOTAL >> 1。
//戻り成功識別
リターン(0)。
}
}
//テストの失敗
リターン(-1);
}
UARTシリアルポートが利点一つの方法または別のを持っているが、新興のUSB DFU機能USBインタフェースは、ファームウェアのアップグレードを完了するために、シリアルポートへのより効果的な代替することができます; CANバスの優れた性能、そのハードウェアの価格が下落し続け、およびMACインターフェースCANバスは、より統合されています最新のMCUチップと、私たちのために一般の人々を、そして新しいコンピュータモデルには、シリアルDB9座席を持っていません。CAN2.0Bインタフェースは、市場UARTインターフェースデバイスを圧迫しています。過酷な現実では、おそらく唯一の私たちの電子エンジニアの多くの年後に、シンプルで実用的なUARTシリアルポートを覚えています。