[Armadillo:06928] Re: 420のUARTドライバ受信バッファについて

Takenoshita Koyo email@hidden
2011年 3月 31日 (木) 10:46:20 JST


竹之下です。

> 230.4kbpsでどの位の時間とUARTへデータを取りに行かなくても取りこぼさなく 
> て済むか

> UARTの受信処理について詳細知っている方おられましたらご教授願えないでしょ 
> うか。
UART(シリアル通信)のバッファ処理は色々な箇所で行われています。

まず、i.MX25のUARTコントローラが内部に32バイトのRx/TxFIFOを持っています。この
FIFOに溜まったデータをカーネルが読み出して、カーネル空間のバッファに溜めます。

カーネルでのバッファリングは、mxc_uart.cの中ではなく、ttyレイヤで行っています[*1]。
ttyレイヤでは、最大64kByte(65536byte)のバッファリングを行います[*2]。

ですので、アプリからみて「どの位の時間データを取りにいかなくても取りこぼさないか?」
という問いに対する回答としては、
64kByte / (230.4kbps/8) = 2275.55...sec = 約38分
となります。

思っていたよりも、かなり大きなバッファが用意されているのですね。

*1: Linux カーネルのシリアル通信に関する階層構造は、以下のページのFigure 3が参考になると
    思います。
    http://www.linux.it/~rubini/docs/serial/serial.html
*2: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=01da5fd83d6b2c5e36b77539f6cbdd8f49849225

-- 
Koyo Takenoshita




armadillo メーリングリストの案内