ボーレートの誤差について

いつもお世話になっており、有難うございます。

SH7269とRX62Nでシリアル通信をします。SHはPCLK=66.660MHz、RX62Nは50MHzできるだけ速い通信を行おうとしています。38400bpsで行うと、それぞれの誤差はSH=+0.459%、RX=-0.75%となり良好であると言えます。そこで115200bpsで行った場合、SH=+0.459%、RX=-3.118%となります。つまり常に3.6%程度はずれています。テストしたところ、エラーなく通信しています。通信は11ビットですが、このボーレートを使うのはまずいでしょうか。

 

  • わわいです
    シリアル通信はスタートビットで同期をとって通信してます。
    で、1バイトの通信はスタートビット、ストップビット合わせて10ビットの通信となりますんで、あらかた10%程度の誤差まで行けるという見積もりになろうかと思います
    #細かく計算するともうちょい厳しい数字になろうかと

    で、そのボーレートの合わせて4%程度の誤差をどう見るかってことですが、それは、あなたがどう思うか、になってきます。
    一度たりともエラーが許容できない、という環境であれば、エラー回復の手段を講じる、ということになろうかと思いますが、
    繰り返しの通信で一度や二度エラーぶっこいても構わないという程度のものならそれで行けばいいんじゃないでしょうか。
  • u-taro1739さんSH7269とRX62非同期通信では心配ですよね、同期式SPIとかであるなら心配ないですからそれも選択できますか、マルチプロセッサモードとかも使用できなかったですかね、1MBitとか500KBitとか軽くいけるのではないですか。
  • > SHはPCLK=66.660MHz、RX62Nは50MHzできるだけ速い通信を行おうとしています。

    PCLK が 66.66MHz の SH7269 と 50MHz の RX62N で共通して正確に表せそうな速度(例: 166666bps) を選べば良いのではと思いますがそーいう話ではないんですかね。
  • u-taro1739さん、こんにちは。NoMaYと申します。

    今回の件は、誤差でも「偏差」の話が主ですかね。自分の理解では、例えば、スタートビット、データ8ビット、1ストップビット、で計10ビットの場合、自分がドンピシャリのボーレートで、通信信号波形のエッジが理想的なほどシャープであれば、相手側のボーレート偏差は5%まで許容出来る、ということだったと思います。(10%でなくて5%なのは、受信側は各ビットの中央(と思しき箇所)にて信号の1/0を判定しようとするので、ズレが5%ずつ累積したら10ビット目でズレが50%になって、中央だと思っていた箇所がビットの先頭or末尾のあたりになってしまう、からです。)

    そして、そもそも自分がドンピシャリのボーレートではなかったり、ドンピシャリの筈でも温度や湿度や経年変化により基準の周波数がズレてしまったり、そういうことがありますので、それらを相手側と公平に分配して考えると、5%では危なくて、自分も相手も2.5%までなら大丈夫かな、という理解です。

    ですので、UARTに供給されるクロックの大元、例えば、メインクロック発振子とかHOCOとかの周波数の(温度や湿度や経年変化によるもの込みでの)ズレが、自分側と相手側の合計で1.4%もズレないのであれば、そのまま行けるのかな、と思います。逆に、もっとズレる可能性があるのであれば、他の案にする必要がある、と思います。([追記] すみません、あと、通信信号波形の鈍りの影響の分がありますね。)

    きっと、こういう考え方をしていけば良い筈、だと思います、、、(10ビットでなく11ビットということですので、その分、マージンは少し減るかと思います、、、)

  • パリティ+2ストップビットの12ビットの1ビットを16分割して処理するとトータルで192ステップになり8ビットカウンターで処理ができるので妥当な設定に思えます。パリティなし+1ストップビットの場合はトータル160ステップです。
    送信側は145ステップでストップビットをセットして、受信側は152ステップでストップビットを読み込み、送信側は161ステップで次の周期に入り、受信側もカウンタがリセットされます。
    ここで3.6%送信側が遅くなると、受信側の150ステップでストップビットがセットされるので読み込みまで2ステップの余裕があります。
    115200bpsだと2ステップは17.4uSです。NoMaYさんが指摘しているスタートビットのフォールタイムなど電気的特性等を含めると微妙かもしれません。逆にの想定以上のスピードでシャープな波形にすると信号が暴れてエラーも予想以上に増加する気がします。電圧差を吸収する様な抵抗も要注意です。