[Armadillo:06132] Re: Armadillo440 CAN通信について

Takenoshita Koyo email@hidden
2010年 11月 8日 (月) 21:45:54 JST


竹之下です。

> 1.make config
> 2.make menuconfig
>    <*> Virtual Local CAN Interface (vcan)  (<*> へ変更)
これは、必要ないですね。

> 3.make
> 4.実機起動後の ifconfig can0 の実行
> 5.ifconfig can0 up の実行
ドライバは、正常に組み込まれているようです。

> 6.CON14 にPCからCANバスにパケットを送信
> # まずは上記にて何らかのデータを受信したら ifconfig can0 の実行にて 
> packetsの値が
> # 増加することで通信の確認が出来ると認識しておりましたが、現状では0のま 
> まです。
確認方法としては、receive packetsの値を見るので、正しいと思います。
が、全く反応していないとうことですね。
以下の点を確認していただけますか?

0. ハードウェア(特に電源周り)
作成された基板に正しく電源が供給されているか、ご確認ください。

1. CAN通信速度の設定
CANの通信設定は /sys/devices/platform/FlexCAN.1/ディレクトリ以下のファイルに
値を書き込むことで変更できます。各sysfsファイルの機能についてはソフトウェア
マニュアルを参照してください[*1]。

とりあえず、通信速度が正しく設定されていれば通信はできます。通信速度は、
クロックソースとプリスケーラの分周比によって設定します。
計算式は以下の通りです[*2]。

通信速度[bps] = src_clk / br_presdiv / (1 + br_propseg + br_pseg1 + br_pseg2)
但し、br_clksrc = bus の場合 src_clk = 66,500,000
      br_clksrc = osc の場合 src_clk = 24,000,000

*1: http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.3.0/ch08.html#table-CAN-sysfs
*2: http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.3.0/ch08.html#fig-CAN通信速度計算

例:(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

なお、通信速度の設定はCANインターフェースを停止している状態
(ifconfig [インターフェース名] downした後)で行ってください。


2. CAN送受信ツールの使用方法

can-utilsというツールで、CANの送受信のテストができます。

2.1. ツールのビルド
以下の手順でソースを取得し、ビルドしてください。

ソースの取得
$ svn co --revision {20101108}  http://svn.berlios.de/svnroot/repos/socketcan/trunk/can-utils/
$ cd can-utils/

Makefileを以下のように修正
PROGRAMS = candump cansend cangen

ビルド
$ CC=arm-linux-gnueabi-gcc make

cansend、cangen、candumpという実行ファイルが作成されますので、それらをArmadilloに
コピーして、実行権限をつけてください。


2.2. ツールの使い方
それぞれのツールの簡単な使い方は以下のようになります。

2.2.1. candumpコマンド
candumpは受信したメッセージの内容を表示します。

コマンドの実行方法
# candump [オプション] [インターフェース名]

can0で受信したメッセージを表示する
# candump can0

すべてのCANインターフェースで受信したメッセージを表示する
# candump any

2.2.2. cansendコマンド
cansendは指定したIDとデータからなるメッセージを送信します。

コマンドの実行方法
# cansend [インターフェース名] [ID]#[データ]

IDには3桁(標準フォーマット)または8桁(拡張フォーマット)の16進数を指定することができます。
データの設定は1データあたり16進数2桁で、0から8個までのデータを指定することができます。
また、データは1データごとに"."(ドット)で区切ることもできます。

実行例

ID=333(標準フォーマット), DATA=33のメッセージをcan0に送信
# cansend can0 333#33

ID=00004444(拡張フォーマット), DATA=44のメッセージをcan0に送信
# cansend can0 00004444#44

データは最大8個まで指定可能
# cansend can0 555#5051525354555657

データは.で区切ることもできる
# cansend can0 666#60.61.62.63.64.65.66.67


2.2.3. cangenコマンド
cangenは複数のメッセージを指定した間隔で送信します。

コマンドの実行方法
# cangen [インターフェース名] [オプション]

実行例

色々な使い方があるので、詳細はhelpを参照してください。。

tomoki goto さんは書きました:
> お世話になります。
> 後藤と申します。
>  
> Armadillo-440 でのCAN通信についてお問合せをさせて頂きます。
>  
> 現在、マニュアル等に記載の内容に従いましてCAN通信の動作確認を
> 実施しようと試みておりますが通信が出来ていない状況です。
>  
> 下記に現在までに実行した内容を示しますので使用方法、手順、
> 設定内容の不備等がありましたらご教示頂ければと思います。
>  
>  
> 実行環境は下記の通りです。
>  ・atmark-dist-20100918
>  ・linux-2.6.26-at11
>  ・Hermit-At v2.0.7
>  
>  
> 1.make config
>   Armadillo-400 シリーズソフトウェアマニュアル
>    6.1.2. デフォルトコンフィギュレーションの適用の内容と同等。
>  
> 2.make menuconfig
>  menuconfig で変更した内容のみ下記に記載。
>   - Armadillo-400 Board options
>    [ ] Enable I2C2 at CON14    ([ ] へ変更)
>    [*] Enable CAN2 at CON14  ([*] へ変更)
>  
>   - CAN bus subsystem support
>    <*>   Raw CAN Protocol (raw access with CAN-ID filtering)  (<*> へ変更)
>    <*>   Broadcast Manager CAN Protocol (with content filtering)  (<*> 
> へ変更)
>            CAN Device Drivers  ---> 
>  
>   - CAN Device Drivers
>    <*> Virtual Local CAN Interface (vcan)  (<*> へ変更)
>    [*] CAN devices debugging messages  ([*] へ変更)
>    <*> Freescale FlexCAN  (<*> へ変更)
> 
> 3.make
>  特記無し(エラー無し)
> 
> 4.実機起動後の ifconfig can0 の実行
>  can0 Link encap:UNSPEC  HWaddr 
> 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
>          NOARP  MTU:16  Metric:1
>          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
>          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
>          collisions:0 txqueuelen:64
>          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
>  
> # /sys/devices/platform/FlexCAN.1/state の内容は ”Stop::normal”。
>  
> 5.ifconfig can0 up の実行
>  can0 Link encap:UNSPEC  HWaddr 
> 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
>          UP RUNNING NOARP  MTU:16  Metric:1
>          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
>          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
>          collisions:0 txqueuelen:64
>          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
> # /sys/devices/platform/FlexCAN.1/state の内容は ”Start::normal” となる 
> ことを確認。
>  
> 6.CON14 にPCからCANバスにパケットを送信
>  Armadillo-400 シリーズハードウェアマニュアル CAN信号の参考回路例を参考 
> に作成した
>  基板を介してデータを送信。
>  
> # まずは上記にて何らかのデータを受信したら ifconfig can0 の実行にて 
> packetsの値が
> # 増加することで通信の確認が出来ると認識しておりましたが、現状では0のま 
> まです。
>  
>  
> 現状の確認としては以上になります。
> 根本的な使用方法について認識違いがあるかもしれませんので使用方法、
> 手順及び通信の確認方法についてご教示頂ければと思います。
>  
> お忙しいところお手数お掛け致しますが宜しくお願い致します。
> 
> +-
>  後藤
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo


-- 
Koyo Takenoshita




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