RL78 UARTの最高ボーレートを測る|簡単なサンプルコードあり

当ページのリンクには広告が含まれています。

RL78のUARTはどこまでの速度が出るのか?
フロー制御無しで試してみました。

興味があるところを読む

2Mbpsが行ける?

微少電流計を作ったので、G10で試しに2Mbpsを試したら、普通に通信できてる。
↓以下の記事ではシリアル変換ケーブル側の限界のため、800Kbpsと書いてますが、実験では2Mbpsまで大丈夫なようです。

2019/7/17
秋月の R5F100LGAFB (RL78/G13: ROM128K,RAM12K,64PIN)を使ってUARTの速度を調べた。
PCとの接続には秋月のシリアル変換ケーブル TTL-232R の5Vタイプを使った。
このケーブルに内蔵されているRS232ドライバの限界速度が900Kbps近辺らしいんで、G13から送信可能な最高速度で選べるのは800Kbps(内蔵OSC8MHz時)。
800Kbpsってことは、10bit/1byteとして80Kbyteだから、1秒間に80,000byte送信できるって事かな。

G13側のコードはこれだけど、50byteずつ連続送信してるだけ(100~200byteにしても転送速度に変わりはなかったが、10byteにすると速度がバラつく)。

#define CNT   50
void test(void)
{
    uint8_t tx[CNT], i;
    for (i=0; i<CNT; ++i) tx[i] = i;
    while (1) {
        MF_R_UART0_Send(tx, CNT);
        while (MF_IsTxEnd() == FALSE) NOP();
        // メインクロック8MHzでUART=800Kbps
        // この速度でPC側は問題無く受信可能だ(実験済み)
        // ↓Delayナシで7000~7250byte、有りで3000byteを送信する
        //DelayMsec(1);
    }
}

PC側は100msのインターバルタイマーによる連続読み出しで、100ms毎に7,000~7,250byteを受信してる。
ってことは、1秒間に約70,000byte、設定したボーレートに結構近い値だから、G13は頑張ってる感じかも。
なおRTS制御はナシ、受信エラーハンドラは追加してるが、エラーは発生していない。

        // Timer1(100msインターバル) 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen == true) {
                int rxcnt = serialPort1.BytesToRead;
                if (rxcnt > 0) {
                    serialPort1.Read(rxbuf, 0, rxcnt);
                    ListDisp(rxcnt.ToString());
                }
            }
        }
スポンサーリンク
スポンサーリンク
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


興味があるところを読む