[Armadillo:05357] Re: Armadillo-420のシリアル通信における正確なボーレートについて

nakai email@hidden
2010年 6月 23日 (水) 12:00:08 JST


nakaiです。

Busyboxのsttyにはバグがあるのか2Mなど設定できないようです。
debianパッケージのcoreutilsを持ってきて設定してみたところ、
問題なく出来たため、1M, 2M, 3Mについても設定値を記載します。

stty -F /dev/ttymxc4 1000000
	ref: 120000000, ubir: 4368, ubmr: 32767
 	設定値: 999984
stty -F /dev/ttymxc4 2000000
	ref: 120000000, ubir: 8737, ubmr: 32767
 	設定値: 1999969
stty -F /dev/ttymxc4 3000000
	ref: 120000000, ubir: 13106, ubmr: 32767
 	設定値: 2999954



nakai さんは書きました:
> nakaiです。
> 
> Armadillo-420が使用しているUARTコントローラは、
> i.MX25内蔵のものです。
> このコントローラでのボーレート設定は、リファレンスマニュアル[1]の
> 	46.4.6 Binary Rate Multiplier (BRM)
> に記載があります。
> [1]
> http://cache.freescale.com/files/dsp/doc/ref_manual/IMX25RM.pdf?fpsp=1&WT_TYPE=Reference%20Manuals&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation
> 
> 実際にボーレートの算出を行うソースは、
> linux-2.6.26-at/drivers/serial/mxc_uart.c::mxcuart_set_termios
> です。
> 
> さて、実際に設定する値ですが、以下のようなパッチをあてて確認してみました。
> {{{
> diff --git a/drivers/serial/mxc_uart.c b/drivers/serial/mxc_uart.c
> index c596c83..a602bb9 100644
> --- a/drivers/serial/mxc_uart.c
> +++ b/drivers/serial/mxc_uart.c
> @@ -1424,6 +1424,7 @@ static void mxcuart_set_termios(struct uart_port *port,
>                 num = (u_int) n64 - 1;
>                 denom = 0x7fff;
>         }
> + printk("ref: %d, ubir: %d, ubmr: %d\n", umxc->port.uartclk, num, denom);
>         writel(num, umxc->port.membase + MXC_UARTUBIR);
>         writel(denom, umxc->port.membase + MXC_UARTUBMR);
> 
> }}}
> 
> ● 115200
> stty -F /dev/ttymxc4 115200
> 	ref: 120000000, ubir: 502, ubmr: 32767
> 	設定値: 115127
> ● 921600
> stty -F /dev/ttymxc4 921600
> 	ref: 120000000, ubir: 4026, ubmr: 32767
> 	設定値: 921707
> ● 1152000
> stty -F /dev/ttymxc4 1152000
> 	ref: 120000000, ubir: 5032, ubmr: 32767
> 	設定値: 1151962
> ● 4000000
> stty -F /dev/ttymxc4 4000000
> 	ref: 120000000, ubir: 17475, ubmr: 32767
> 	設定値: 3999938
> 
> 他のボーレートについては、パッチをあてて確認してみてください。
> 計算式は、リファレンスマニュアル Egn. 46-3にあるように、
> BaudRate = RefFreq / (16 * ((UBMR + 1) / (UBIR + 1)))
> です。
> 
> 
> 
> 
> Myoukan Kiyohito さんは書きました:
>> 明官です。
>>
>> nakai様、返信ありがとうございます。
>>
>> 説明不足で申し訳ありません。再度質問させてください。
>>
>> ボーレートはクロックによって計算することができ、算出したボーレートと
>> 設定したボーレートには誤差があると思います。
>> #以下のページを参考にしています(ページ中央あたり)
>> #http://spectrum123.at.infoseek.co.jp/serial/serial_1/serial_1.htm
>>
>> 知りたいことは、Armadillo-420のクロックでの算出ボーレートですので、
>> ご教示いただけると幸いです。
>>
>> 目的はArmadillo-420と接続する機器との間のボーレート誤差を調べることです。
>>
>>
>>> また、他のボーレートについては、
>>> ioctl設定時にinvalid argmentが返るようです。
>>> stty -F /dev/ttymxc4 2000000
>>> stty: invalid argument `2000000'
>>>
>>> これは、クロックソースから指定のボーレートを作り出せないために
>>> エラーが返るようです。
>> 上記のようにありましたが、現在、シリアル通信のテストを行っており、
>> その際にプログラムでボーレートの設定を1M,2M,3M,4Mとしているのですが、
>> 1M,2M,3Mでもエラーは出ていません。
>> <ソース抜粋>
>> fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
>> newtio.c_cflag = B2000000 | CS8 | CLOCAL | CREAD; ← 1M,2M,3M,4Mを設定している
>> tc = tcsetattr(fd,TCSANOW,&newtio); ← エラー(tc=-1)にはなりません
>> if(tc == -1){
>> 	return -1;
>> }
>> <接続>
>> ・Armadello-420を2台使用
>> ・シリアルインターフェース2(ttymxc2)とシリアルインターフェース3(ttymxc4)を
>>  クロスで接続
>> <動作>
>> ・パケット数と受信時間によりボーレートを計算したところ、誤差はあるものの
>>  設定したボーレートに近い値になる
>>
>> 以上、よろしくお願いいたします。
>>
>>> -----Original Message-----
>>> From: email@hidden
>>> [mailto:email@hidden] On Behalf Of nakai
>>> Sent: Tuesday, June 22, 2010 9:07 PM
>>> To: Armadillo series general discussion list
>>> Subject: [Armadillo:05354] Re: Armadillo-420のシリアル通信における正確なボーレ
>>> ートについて
>>>
>>> nakaiです。
>>>
>>> Armadillo-420の高ボーレート設定につきまして、
>>> 弊社で標準のカーネルで動作を確認しているものは、
>>> 921600, 1152000, 4000000
>>> です。
>>>
>>> stty -F /dev/ttymxc4 [baudrate]
>>> のように設定後、
>>> echo Z > /dev/ttymxc4
>>> として実際の波形を確認したところ、
>>> 上記3設定については問題ない周波数で出力できているようです。
>>>
>>> また、他のボーレートについては、
>>> ioctl設定時にinvalid argmentが返るようです。
>>> stty -F /dev/ttymxc4 2000000
>>> stty: invalid argument `2000000'
>>>
>>> これは、クロックソースから指定のボーレートを作り出せないために
>>> エラーが返るようです。
>>>
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 




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