Armadilloフォーラム

Armadillo-460 CAN通信速度変更について

n.yamamoto

2016年1月7日 10時50分

Yamamotoです。

何時もお世話になっております。

Armadillo-460の既存のシステムでCAN通信をデフォルトの500kbpsで使用していますが、250kbpsに落としたいとの依頼を受けて調べております。

下記の内容と「第9章 Linux カーネルデバイスドライバー仕様」を参考にしたところ
[Armadillo:06132] Re: Armadillo440 CAN通信について
http://lists.atmark-techno.com/pipermail/armadillo/2010-November/006132…

現行は、以下の内容の500kbpsに設定されていることはわかりました
br_clksrc = bus の場合 src_clk = 66,500,000
例:(br_clksrc=bus時)
1007575bps = br_presdiv=3, br_propseg=7, br_pseg1=7, br_pseg2=7
950kbps = br_presdiv=5, br_propseg=4, br_pseg1=5, br_pseg2=5
500kbps = br_presdiv=7, br_propseg=5, br_pseg1=5, br_pseg2=8  <== 現行設定
25kbps = br_presdiv=133, br_propseg=6, br_pseg1=6, br_pseg2=7
10390bps = br_presdiv=256, br_propseg=8, br_pseg1=8, br_pseg2=8

これを250kbpsに落とすには単純にbr_presdiv=14に変更すればよいように思いますが「第9章 Linux カーネルデバイスドライバー仕様」
では”br_presdiv クロックソースのプリスケーラー分周値を設定します 1から8を指定できます”とあり14は指定できないことになっていますが
上記例の25kbpsでは133が設定されています。

br_presdiv=14は設定可能なのでしょうか?
あるいは250kbpsに設定する最適な設定はありますでしょうか?

よろしくお願いいたします。

コメント

at_daisuke.sasaki

2016年1月7日 11時40分

佐々木大輔です。

> 下記の内容と「第9章 Linux カーネルデバイスドライバー仕様」を参考にしたところ
> [Armadillo:06132] Re: Armadillo440 CAN通信について
> http://lists.atmark-techno.com/pipermail/armadillo/2010-November/006132…

お手数ですが、最新のソフトウェアマニュアルの 表9.40「CAN sysfs」を参照してください。

http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_soft…

以前、この表に誤記がありました。
メーリングリストの回答は、そのマニュアルを引用したため間違った情報になってしまっていたと思います。

> これを250kbpsに落とすには単純にbr_presdiv=14に変更すればよいように思いますが「第9章 Linux カーネルデバイスドライバー仕様」
> では”br_presdiv クロックソースのプリスケーラー分周値を設定します 1から8を指定できます”とあり14は指定できないことになっていますが
> 上記例の25kbpsでは133が設定されています。
>
> br_presdiv=14は設定可能なのでしょうか?

はい。設定可能です。
プリスケーラー(br_presdiv)は1から256を指定できます。

> あるいは250kbpsに設定する最適な設定はありますでしょうか?

通信速度[bps] = src_clk / br_presdiv / (1 + br_propseg + br_pseg1 + br_pseg2)

という式で通信速度が決まりますので、
Yamamotoさん が質問文で記載された

500kbps = br_presdiv=14 , br_propseg=5, br_pseg1=5, br_pseg2=8

という設定で問題ありません。

n.yamamoto

2016年1月7日 12時32分

Yamamotoです。

下記回答有難うございます。
安心しました。

> Yamamotoさん が質問文で記載された
>
> 500kbps = br_presdiv=14 , br_propseg=5, br_pseg1=5, br_pseg2=8
>
> という設定で問題ありません。
>

追加で気になったのですが、br_presdivは開発環境下(ATDE3)にはファイルがないようですが何処で変更すればよいのでしょうか?
イメージファイルでArmadilloにアップデートしてへんこうしたいのですが。

よろしくお願いいたします。

at_daisuke.sasaki

2016年1月7日 13時22分

佐々木大輔です。

> 追加で気になったのですが、br_presdivは開発環境下(ATDE3)にはファイルがないようですが何処で変更すればよいのでしょうか?
> イメージファイルでArmadilloにアップデートしてへんこうしたいのですが。

br_presdiv は、の「Armadilloの sysfs」です。

CANを使用できるようにコンフィギュレーションしたArmadilloの
/sys/devices/platform/FlexCAN.1/以下のファイルに書き込みを行なって下さい。

例えば、こんな感じで

echo 14 > /sys/devices/platform/FlexCAN.1/br_presdiv

CANのインターフェースをupする前に、起動スクリプトや アプリなどで値を適切に設定していただければ良いと思います。

n.yamamoto

2016年1月7日 14時53分

Yamamotoです。

度々、申し訳ありません。

> CANを使用できるようにコンフィギュレーションしたArmadilloの
> /sys/devices/platform/FlexCAN.1/以下のファイルに書き込みを行なって下さい。

とは開発環境下でのコンフィグ等では変更できないということでしょうか?

Armadillo-460側で、実行スクリプト等のCAN使用前に”echo 14 > /sys/devices/platform/FlexCAN.1/br_presdiv”を行うように変更して対応すれば良いと言うことで合っておりますでしょうか?

よろしくお願いいたします。

at_daisuke.sasaki

2016年1月8日 13時07分

佐々木大輔です

> とは開発環境下でのコンフィグ等では変更できないということでしょうか?

はい。
CANの通信速度は、i.MXのFlexCANコントローラのレジスタを書き換える事で行います。
レジスタの書き換えは、sysfsへの書き込みによって起こるので、Amradilloの起動後に必ず行う必要があります。

また、設定ファイルを準備し、自動で通信速度を設定するような仕組みは特にありません。

> Armadillo-460側で、実行スクリプト等のCAN使用前に”echo 14 > /sys/devices/platform/FlexCAN.1/br_presdiv”を行うように変更して対応すれば良いと言うことで合っておりますでしょうか?

はい。合っています。
この対応でお願いします。

izawa

2016年1月7日 12時01分

伊澤@ITTOです。今年も宜しくどうぞ。

あらら、256まで設定可能ですよね、と書きにきたら既に回答がw
折角なので、データシートの記載との違いが気になったので便乗質問で。

データシート(http://www.nxp.com/files/dsp/doc/ref_manual/IMX25RM.pdf)p868には
OSCのクロックが24.576MHzとありますが、件のマニュアルには24MHzとあります。
2.4%の誤差ですが、これはどちらでしょうか?
# いやまぁ、CANを使うことはなさそうなんですが ;-)

at_daisuke.sasaki

2016年1月7日 13時10分

佐々木大輔です。

> データシート(http://www.nxp.com/files/dsp/doc/ref_manual/IMX25RM.pdf)p868には
> OSCのクロックが24.576MHzとありますが、件のマニュアルには24MHzとあります。

Armadillo-400シリーズの基板に搭載されるクリスタルは24MHzぴったりなので、
ここは弊社のマニュアルが正しいです。
# 時間の都合上、出力波形を「再」確認するところまでできませんでした。。。

FreedcaleのReference Manualがなぜこのような記載になっているかは、すみません 即答できません。