お世話になります。sekaihiroshiと申します。
RH850/F1KMには、LIN/UARTインタフェースの機能があり、UARTモードとして使用できるようにあります。
最大速度がいくつで使用できるか把握したいです。
UARTボーレートについては、動作範囲についての直接的な記述が無く、式のみ表記あります。
■ボーレート計算式(Page1926)
しかし式で4項目中の3項目について、どう数値になってくるのかわかりません。
・LIN通信クロック源の周波数・・・記述あり (Page1215 and 1306) 周波数の値を入れるものと認識。
・RLN3nLWBR.LPRS[2:0]選択クロック・・・プリスケーラクロック選択ビットをどのように計算式に入れ込めば良いのかわかりません(Page1845)
・RLN3nLWBR.NSPB[3:0]選択数・・・ビットサンプリング数選択ビットをどのように計算式に入れ込めば良いのかわかりません(Page1845)
・RLN3nLBRP01+1・・・BRP[15:0]の設定値を65535とした場合、65535+1=65536の値をそのまま代入すれば良いでしょうか(Page1846)
■ビットサンプリング数選択ビット/プリスケーラクロック選択ビット(Page1845)
■RLN3nLBPR01について
ハードウェアマニュアル (R01UH0684JJ0130 Rev.1.30 2021.09.30)を参照しております。
ご知見、手掛かりになるようなことがありましたら、ご教示お願い致します。
何卒、宜しくお願い致します。
仮に計算式を以下のようにしてみましたが、実際に4Mbpsも出るのか疑問です。(LINは20kbpsですので・・・)・LIN通信クロック源の周波数・・・MainOSC:24MHz
・RLN3nLWBR.LPRS[2:0]選択クロック・・・サンプリング数の値を代入:6
・RLN3nLWBR.NSPB[3:0]選択数・・・プリスケーラクロックの値を代入:1/1
・RLN3nLBRP01+1・・・設定値0として+1を代入:0+1
ボーレート計算式:24MHz×(1/1)÷(0+1)÷6=4Mbps
チョコです。
UARTのボーレートの計算としてはそれでいいかと思います。
しかしながら、計算上の最大値が使い物になるかは別物です。
ビットサンプリング数が6のように小さな値では、スタートビットの検出タイミングのズレが大きくなり、ボーレート誤差に余裕がなくなってきます。
メーカとしてはできるだけ高速でも使えることを見せるために小さいサンプリング数を記載しているのではないかと思っています。
実際には、信号線を引き回すことで、信号に鈍りが発生します。そのため、計算上の値よりもタイミング誤差が大きくなってしまいます。
それらを考慮して、個人的には、16サンプリング以下は使わないようにしています。
以上
お世話になります。sekaihiroshiです。
チョコさん。ご教示有難う御座います。
あとは設定をどうするかだけであること認識できました。
高速信号,ビットサンプリング数についても留意致します。
実際に試してみました
RLINクロックは4~40MHzとあるので、40MHzに設定
その場合、スマート・コンフィグレータでは、0.299~1,500,000のビットレートが
設定出来る様なコメントが表示されます。下限(0.299)は計算通りですが、上限の方は
どこから来た数値なのか?です。スマート・コンフィグレータで、高いビットレートを
入力すると、実際には2,500,000bpsまで入力、コード生成が出来ました。
その場合、40MHz -> 25ns×1(クロック分周)×16(サンプル数)=400ns, 2.5Mbps設定のコードが
出力され、実際、1bit 400ns, 2.5Mbpsで波形が出力されました。
さらに、サンプル数を6に設定した場合は、25ns×1×6=150ns, 6.67Mbpsで波形がでました。
(出力ビットレートの上限は、6.67Mbpsになると思います。)
(入力側は使用せず、出力のみ使うのであれば、サンプル数は小さな値を設定しても良いのかと思います。)
なお、スマート・コンフィグレータの設定は、誤差を最小化する様に設定される様です。
115,200bpsに設定した場合、6サンプルのコードが生成されました。
(25ns×2(クロック分周)×6(サンプル数)×(28+1)(プリスケーラ)=8.7us, 114,943bps, 誤差-0.2%)
少し、追加してコメントしておきます。
・LIN/UARTインタフェースがあり、この機能はLINが調歩同期通信方式をベースにしているので、一つのハードで両方に対応できるように設計するのは当然のながれです。LINは低速ですが、普通のUARTとして使うには、その速度では不十分です。そのため、UARTの通信速度はLINとは無関係に高速に対応しています。そのため、LINで、規格以上の高速通信は考えてはいけません。
・誤差について、殆どの場合に、単純に周波数の誤差だけで議論されていますが、これだけでは不十分です。スタートビットの検出は受信したデータとは非同期のクロックで行います。そのため、通信速度の16倍のクロックを使用している場合には、検出タイミングは最大1/16遅れる可能性があります。これを6倍のクロックなんて使うと、最大1/6遅れる可能性があります。そこから、ビットの中央のタイミングで実際にデータのサンプリングを行います。ビットの中央でサンプリングを行うことで、タイミングのマージンを最大にしていますが、理想的には50%ですが、6倍のクロックなんて使うと、最悪33%まで悪化することになります。さらにデータのセットアップ時間とホールド時間が必要なことを考慮すると、さらに悪くなります。ここまではデジタルでの議論ですが、実施には、信号経路に影響で信号波形が鈍ってしまいマージはさらに悪化します。しかも、送信側と受信側のボーレートの誤差は蓄積していくので、データのビット長が長くなると、その間累積されていくので、誤差が小さいからと油断はできません。
と言うことで、速い方は、トラブルの原因になるので、あまり期待しない方がいいです。
初めまして。hiroと申します。CS+ とスマート・コンフィグレータで、UARTのボーレートが312500bps(312.5kbps)以上の設定が表示されませんでした。312500bps以上のボーレートが設定できる方法についてご教示頂けますでしょうか。
以下が操作手順です。・CS+でR7F701645(LQFP100) RH850F1KMS4 を選択しました。・MainOsc 24MHz、RLINクロック(C_ISO_LIN)を40MHzに設定しました。・ソフトウエアコンポーネントの選択で、UARTインターフェースを選択。・コンフィグレーション名 Config_UART0、動作を送受信、リソースをUART0を選択して終了。・ボーレートの設定項目をを確認すると、最大が312500bps となっている。
選択肢が無くても、数値を直に書き込むことで指定できるはずです。試してみてください。
お世話になります。hiroです。
チョコさんご回答頂きありがとうございました。
直接入力できること確認できました。また、1,500,000より大きい値を入力すると0.299 -1,500,000 が表示されことも確認できました。
以上よろしくお願いします。