FAQ
UART/SIOについて
- UARTの許容誤差を考えるため、データサンプリングを教えて欲しい。
- UARTの許容可能なボーレートの誤差はいくつですか?
- UARTの受信エラー発生時に対象エラーフラグをクリアしなかった場合に考えられる事は?
- UARTの送信中に再度送信を起動した場合、送信データはどのようになりますか?
- スタートビット判定の検出方法を教えて下さい。
- 9bit data送受信は可能ですか?
- 内部タイマ(PPG)使用時のボーレート計算について教えてください。
- UART0/1の転送レートをPPGタイマにて設定したいが、PPG0とPPG1のどちらで設定すればいいですか? (対象:MB90570 series)
- 内蔵ボーレートジェネレータのクロック同期(クロック出力)を用いて受信動作を行なうと、1バイト受信を行いたいのに2バイト受信になりますが、なぜですか? (受信用のクロックが16クロック連続で出力される)。
- SIO/UARTの外部クロックの入力クロックの最大周波数は?
- UART受信中にUARTの受信動作を禁止(RXE=0)にした場合、どうなりますか?
- UART送信中にUARTの送信動作を禁止(TXE=0)にした場合、どうなりますか?
- UARTをクロック同期SIOで使用し、クロックを外部から入力する時に、受信中にシフトクロックが停止した場合、どうなりますか?
- クロック同期モードで受信と送信で別々に動作は可能ですか?
- UARTの通信ラインがGND時(CPUのRX端子が“L”張りつき時)の動作についてです。通信ラインがGND中は、エラーフラグをクリアしても、何度もエラーフラグがsetされますか? それとも、スタートビットの立ち下がりを検出したときのみ、エラーフラグに反映されますか?
- “CLK同期モードで受信のみの場合でも、必ず仮の送信データをSODRレジスタに書き込む必要があります。”とありますが、なぜですか?
- “TDREはリセット値が‘1’にセットされているので、TIE=1したと同時に、送信割込要求が発生します”とありますが、これはどういう意味でしょうか。TDRE=1の時に送信割込許可したら送信割込要求が発生するという意味ですか。
- UARTを受信禁止後、受信許可再開すると受信データの1バイト目が“FFh”として格納され、2バイト目以降が正常値(期待値)で格納されるのですが、なぜですか?
- UART0使用時に、送信データをレジスタに書き込んでからSTARTビットが送信されるまでの時間が、転送レートの1bit幅の間でバラツキますが、なぜですか? (対象:MB90F548G)
- マニュアルのUART0の章に、“SIN0入力端子が‘1’に固定されていない限り、受信動作はリセットのリリース後に開始します”と記述がありますが、なぜですか? (対象:MB90540G/545G series)
- CPU間通信をUARTで行う場合、配線に流れる電流はどれくらいですか?
- シリアルI/Oにて通信レート2Mbpsの通信を行う為、放射ノイズ対策でコンデンサを検討していますがマイコンに流れ込む電流の影響はありませんか? また、どれくらいの容量まで可能ですか?
- UART送信割込み完了後、送信受信禁止にして、SOT0端子が“L”状態にあるときに、通信クロックを与えると9クロック目でSOT0が“L”->“H”に変化するのですが、なぜですか? (対象:MB90650A series)
1. UARTの許容誤差を考えるため、データサンプリングを教えて欲しい。
内部クロックでUARTボーレートを動作させる場合は、8内部クロックで1bitを構成します。また、start-bitは、初めの4内部クロックでサンプリングを行い、data-bitは、センター1回サンプリングを行っております。なお、外部クロックからUARTのボーレートを作成する場合は、16内部クロックで1bitを構成します。
2. UARTの許容可能なボーレートの誤差はいくつですか?
2~3%です(詳細は、別紙参照願います)。
3. UARTの受信エラー発生時に対象エラーフラグをクリアしなかった場合に考えられる事は?
割り込みルーチン内で対象となる割り込み要因をクリアされない場合、割り込みを発生しつづけます。
4. UARTの送信中に再度送信を起動した場合、送信データはどのようになりますか?
1回目の送信完了後に、再起動したデータが送信されます。仮に3回起動を行ってもTDREが“1”ではないのでデータの書込みはされていません。
5. スタートビット判定の検出方法を教えて下さい。
UARTのスタートビット検出レベルは、“L”レベル検出です。UARTのスタートビットサンプリング方法は“L”レベル検出後、UARTの動作クロック(ボーレートクロックの1/16)の8クロック分の“L”レベルを端子が保持していれば、スタートビットとして確定されます。もしそのスタートビットが確定する前に、端子に“H”レベルが検出されると、スタートビットとして確定されず、その後の端子の“L”レベルから再度検出を行います。
6. 9bit data送受信は可能ですか?
マルチプロセッサモードではA/Dビットがありますので、送信時はこのビットを利用して9bit data送信可能ですが、9bit data受信はできません。別の方法としまして、パリティを利用してソフトにてパリティエラーを確認する方法があります。MB90590、MB90390はD8bitがあるので9bit送受信が可能です。
7. 内部タイマ(PPG)使用時のボーレート計算について教えてください。
非同期通信(調歩同期) : (1/16)×1/(PPG の設定周期)
CLK同期 : 1/(PPG の設定周期)
PPGの各モードとUARTボーレートクロックソースの関係
- 8bit-PPG 2ch独立モード時
PPG の設定周期(Hレベル+Lレベル)がボーレートクロックソースとして使用されます。 - 16bit-PPGモード
PPG 0ch、PPG 1chを連結して設定された周期(Hレベル+Lレベル)がボーレートクロックソースとして使用されます。PPG0が下位8bit、PPG1が上位8bitです。 - 8bitプリスケーラ+8bit-PPG 1chモード
PPG 1ch側の設定周期(Hレベル+Lレベル)がボーレートクロックソースとして使用されます。PPG 0ch側の設定周期はPPG 1chのカウントクロックとして使用されます。
8. UART0/1の転送レートをPPGタイマにて設定したいが、PPG0とPPG1のどちらで設定すればいいですか? (対象:MB90570 series)
UARTの転送レートをPPGタイマにて設定する場合は、PPG1にてUART0/1を設定します。
9. 内蔵ボーレートジェネレータのクロック同期(クロック出力)を用いて受信動作を行なうと、1バイト受信を行いたいのに2バイト受信になりますが、なぜですか? (受信用のクロックが16クロック連続で出力される)。
内蔵ボーレートジェネレータを用いた場合、SODRへのデータ書き込みによって受信動作を行い、クロック出力されます。従いまして、送信許可する以前も含めて受信動作以外にSODRレジスタへの書き込みが行なわれていないかご確認ください。
10. SIO/UARTの外部クロックの入力クロックの最大周波数は?
デバイスにより異なりますので、各デバイスのデータシートのUART/SIOタイミングのクロックサイクルタイムを参照願います(ほとんどが、8tcpであり、内部動作周波数の8分周値が最大となります)。
11. UART受信中にUARTの受信動作を禁止(RXE=0)にした場合、どうなりますか?
UART受信中にUARTの受信動作を禁止(Rxe=0)にした場合、受信中のデータを受信完了してから停止します。
12. UART送信中にUARTの送信動作を禁止(TXE=0)にした場合、どうなりますか?
UART送信中にUARTの送信動作を禁止(Txe=0)にした場合、SODRレジスタのデータが送信されてから送信を停止します。
13. UARTをクロック同期SIOで使用し、クロックを外部から入力する時に、受信中にシフトクロックが停止した場合、どうなりますか?
UARTをクロック同期SIOで使用し、クロックを外部から入力する場合、受信中にシフトクロックが停止した場合、内部のシフトクロックが停止状態になりますので、次のクロックが入力されるまで、停止しています。なお、UARTにリセットビットが無いものに関しては、0ビットから再起動されたい場合、本シフトクロックのカウンタをクリアする方法はありませんので、残りのクロック分、ポートで入力する等の処理が必要です。
14. クロック同期モードで受信と送信で別々に動作は可能でしょうか?
クロック同期モードでは、データ送信と受信が同時に動作します。そのため、受信動作だけ行いたい場合は、送信端子のディセイブルをする必要があります。
15. UARTの通信ラインがGND時(CPUのRX端子が“L”張りつき時)の動作についてです。通信ラインがGND中は、エラーフラグをクリアしても、何度もエラーフラグがsetされますか? それとも、スタートビットの立ち下がりを検出したときのみ、エラーフラグに反映されますか?
UARTのRX端子のLOWショートについてですが、UARTマクロとしてはフレーミングエラーを出力します。このエラークリアはIO_UMC0.bit.RFCで行なう必要があります。このRFCをクリア後、フレーミングエラーは解除されますが、RX端子はLOWになっていますので、再度、スタートビット検出を行いUARTは再起動します。起動後、STOPビットのタイミングで再度、フレーミングエラーが出力され割り込みが発生します。
16. “CLK同期モードで受信のみの場合でも、必ず仮の送信データをSODRレジスタに書き込む必要があります。”とありますが、なぜですか?
CLK同期モード設定時では、SODRレジスタに仮のデータを書き込むことで、8bitデータが受信できるようになります。これは、内部クロック及び外部クロック共に仮データの書込みが必要です。連続してデータを受信する場合は、8bitデータを受信するごとに仮データの書込みが必要になります(受信時には、送信端子からデータが出力されています)。
17. “TDREはリセット値が‘1’にセットされているので、TIE=1したと同時に、送信割込要求が発生します”とありますが、これはどういう意味ですか?TDRE=1の時に送信割込許可したら送信割込要求が発生するという意味ですか。
はい、その通りです。UARTの送信割込みは、SODRにデータが格納されていない(空)の状態で発生します。よって、SODRに送信データを書き込まない状態で送信許可・送信割込み許可すると送信割込みが発生します。
18. UARTを受信禁止後、受信許可再開すると受信データの1バイト目が“FFh”として格納され、2バイト目以降が正常値(期待値)で格納されるのですが、なぜですか?
ボーレートクロックソースが16ビットリロードタイマ使用されている条件で、UARTの受信禁止と同時に16ビットリロードタイマのカウンタ動作停止(CNTE=0)を行ったのが原因です。カウンタは継続動作(CNTE=1)の設定願います。
19. UART0使用時に、送信データをレジスタに書き込んでからSTARTビットが送信されるまでの時間が、転送レートの1bit幅の間でバラツキますが、なぜですか? (対象:MB90F548G)
- UART0の場合:UART0のサンプリングクロックは、転送レートの1/8クロックですが、このクロックとは別にデータ転送用の送信クロック(T=転送レート1bit)があります。このクロックに同期してデータを送信しますので、転送レートの1bit幅のバラツキが生じます。
- UART1の場合:UART1のサンプリングクロックは、転送レートの1/16です。このクロックに同期してデータを送信しますので、1/16bit幅でバラツキが生じます。
20. マニュアルのUART0の章に、“SIN0入力端子が‘1’に固定されていない限り、受信動作はリセットのリリース後に開始します”と記述がありますが、なぜですか? (対象:MB90540G/545G series)
リセット解除後のUART0関連レジスタの初期値は、CLK同期、転送レート(内部動作周波数の4分周:ボーレートジェネレータ)で動作を開始します。受信許可ビットがないため、SIN0端子が“L”の場合に、スタートビットを検出してストップビットが“L”のためフレーミングエラーが発生します。SIN0端子が“L”の状態を保持した場合は、受信動作を繰り返します。UART1は、プリスケーラが停止し、受信禁止のため上記現象は発生しません。
21. CPU間通信をUARTで行う場合、配線に流れる電流はどれくらいですか?
UARTの入力はCMOS入力のため、入力電流は発生しません(強いて挙げると、入力リーク電流分の電流が流れます)。
22. シリアルI/Oにて通信レート2Mbpsの通信を行う為、放射ノイズ対策でコンデンサを検討していますがマイコンに流れ込む電流の影響はありませんか? また、どれくらいの容量まで可能ですか?
通常100pF、200pFを使いますが、マイコンには問題ありません。1000pFでも問題ありません。それ以上の容量であれば流れ込み電流を計算し保証の可否の検討が必要です。
23. UART送信割込み完了後、送信受信禁止にして、SOT0端子が“L”状態にあるときに、通信クロックを与えると9クロック目でSOT0が“L”->“H”に変化するのですが、なぜですか? (対象:MB90650A series)
送受信禁止の状態だと、送信用のシフターにもCLKが伝わるため、8回CLKが伝わると送信シフターは“FFh”になります。その値が、出力の最終段のラッチにも伝わり、その後1回でも外部CLKが伝わると出力端子は“H”に変化します。
