[Armadillo:09181] Re: CAN通信(Armadillo440)の設定について

星野 博 email@hidden
2013年 9月 10日 (火) 08:58:40 JST


笹山様

星野です。

> 星野様が掲示されました、
> カーネルコンフィグ、ビットレート設定にて、
> Armadillo-440間でCAN通信を行ってみたのですが、
> 問題なく通信ができることを確認できました。
> カーネルコンフィグ設定、ビットレート設定、ドライバには問題が無いように思
> われます。
>
ご回答頂きありがとうございます。

ハード(トランシーバ?)が問題であれば、
「loopback=0(無効),srx_dis=0(有効)」のパターンでは
自身が送信したデータを受信する事は可能だと思っていたのですが、
認識誤りでしょうか。
(ハードに問題があるから受信できない?)

※ご質問させて頂いた際に記載したように
 現状、「loopback=0(有効),srx_dis=0(有効)」の場合のみ
 自身の送信データを受信できております。


また、笹山様の環境では、
TxD(CON14)の状態は、
データフレームの形式でHigh/Lowとなっているか
確認して頂く事は可能でしょうか。
 ⇒TxDのHigh/Lowが正しければ、トランシーバの問題と
  断言できると思うのですが、(トランシーバの変換がおかしい)
  現状のこちらの環境では、TxDは500kbpsでのデータフレームとは
  いえない波形となっています。
  (前回のメールの6番参照)


再度の質問となり、またお忙しいところ申し訳ありませんが、
ご回答頂けないでしょうか。


以上です。


(2013/09/09 20:33), Takashi Sasayama wrote:
> 笹山と申します。
> 
>> 現在、マニュアル等の記載を参照し、
>> CAN通信の動作確認を実施しようと試みておりますが通信が出来ていない状況
> です。
>> (現時点で、コンフィグ設定、ドライバ、ハードのどこに問題があるのかが特
> 定できていない状態です。)
> 
> 
> 星野様が掲示されました、
> カーネルコンフィグ、ビットレート設定にて、
> Armadillo-440間でCAN通信を行ってみたのですが、
> 問題なく通信ができることを確認できました。
> カーネルコンフィグ設定、ビットレート設定、ドライバには問題が無いように思
> われます。
> 
> ・確認環境
>  Linuxカーネル	:linux-2.6.26-at17
>  ユーザーランド:atmark-dist-20130329
>  トランシーバ	:AMIS-42673 (AMI SEMICONDUCTOR)
>           ADM3054BRWZ(Analog Devices)
> 
> 
>> 4.Armadillo再起動
>> 立ち上げ時に以下の内容が表示される事を確認。
>> ※"CAN"(または"can")で検索した結果、Hitしたもののみを記載しています。
>>  表示されるべきものが記載されていない、
>>  もしくは逆に、これが表示されていたらおかしい、というものがありましたら、
>>  ご指摘頂けると幸いです。
>>
>> Freescale FlexCAN Driver
>> can: controller area network core (rev 20071116 abi 8)
>> can: raw protocol (rev 20071116)
>> can: broadcast manager protocol (rev 20080415)
> 
> canまたはCANで起動メッセージを検索してみたところ、
> 同じメッセージのみが出力されています。
> 
> 
> 
>>  ⇒気になる点としては、ソフトウェアマニュアルで記載されている
>>   カーネルコンフィグレーション”CAN_BCM”が、
>>   ”Broadcast Manager CAN Protocol”と同義なのか、です。
>>   (略称とあっていないような気がした為)
> 
> こちらは同義となります。
> カーネルコンフィギュレーションにて、
> <*>   Broadcast Manager CAN Protocol (with content filtering)
> を選択した状態で、Helpを参照すると CAN_BCM のコンフィグであることが確認
> できます。
> (BCMは BroadCast Manager の略のようです。)
> 
> 
> 
> 
> (2013/09/09 16:12), 星野 博 wrote:
>> 星野です。
>>
>> Armadillo-440でのCAN通信についてお問合せをさせて頂きます。
>> (長文となります、申し訳ありません)
>>
>> 現在、マニュアル等の記載を参照し、
>> CAN通信の動作確認を実施しようと試みておりますが通信が出来ていない状況です。
>> (現時点で、コンフィグ設定、ドライバ、ハードのどこに問題があるのかが特定できていない状態です。)
>>
>>
>> 下記に現在までに実行した内容を記載しました。
>> 使用方法、手順、設定内容の漏れ等がありましたら
>> ご教示頂けないでしょうか。
>>
>> また、確認すべき事項が他にもありましたら、
>> ご指摘頂ければ幸いです。
>>
>>
>> ・確認環境
>>  Linuxカーネル:linux-2.6.26-at16
>>  ユーザーランド:atmark-dist-20130329
>>  トランシーバ:PC-CAN-02(3.3V)[SN65HVD230D(TI)]
>>  CAN PCモニタ側:CANUSB
>>
>>
>> 1.make menuconfig
>> 実践開発ガイド第3部の記載内容に従い、以下の設定変更。
>>  ⇒気になる点としては、ソフトウェアマニュアルで記載されている
>>   カーネルコンフィグレーション”CAN_BCM”が、
>>   ”Broadcast Manager CAN Protocol”と同義なのか、です。
>>   (略称とあっていないような気がした為)
>>
>>     - 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  (<*> へ変更)
>>
>>
>> 2.make
>> "linux-2.6.26-at16"フォルダで以下のコマンドによりmake実施。
>> (エラーなし)
>>
>> make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- && gzip -c arch/arm/boot/Image > linux.bin.gz
>>
>>
>> 3.linux更新
>> 上記makeで作成したlinux.bin.gzを、Armadillo-440に書きこみ。(tftpdlで書きこみ実施)
>>
>>
>> 4.Armadillo再起動
>> 立ち上げ時に以下の内容が表示される事を確認。
>> ※"CAN"(または"can")で検索した結果、Hitしたもののみを記載しています。
>>  表示されるべきものが記載されていない、
>>  もしくは逆に、これが表示されていたらおかしい、というものがありましたら、
>>  ご指摘頂けると幸いです。
>>
>> Freescale FlexCAN Driver
>> can: controller area network core (rev 20071116 abi 8)
>> can: raw protocol (rev 20071116)
>> can: broadcast manager protocol (rev 20080415)
>>
>>
>> 5.CAN通信設定実施
>> ログイン後、以下の内容で設定を実施。
>>  ⇒設定後、bitrate:500000 となっている事を確認。
>>
>> br_clksrc  :osc
>> br_presdiv :3
>> br_propseg :7
>> br_pseg1   :5
>> br_pseg2   :3
>> br_rjw     :3
>> std_msg    :1
>> ext_msg    :0
>> maxmb      :64
>> rx_maxmb   :32
>> boff_rec   :0
>> listen     :0
>> loopback   :0
>> smp        :1
>> srx_dis    :1
>> wakeup     :0
>> wak_src    :0
>>
>>
>> 6.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” となることを確認。
>> ※ifconfig can0 up実施前の状態は以下。
>>
>> 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)
>>
>>
>> 6."cansend"でデータフレームを送信
>> "cansend can0 123#5A6978A5"でフレームを送信。
>>  ⇒期待する波形が出力されない。(CAN TxDを測定)
>>  ⇒データフレームであれば、アービトレーションフィールドで
>>   High/Lowがいくつか変化するはずだが、変化しない。
>>    ⇒出力される波形は、"Low=6us,High=16us,Low=12us,High=24us"。
>>    ⇒前述の出力を10数回繰り返し後、"Low=6us,High=54us"を出力し続ける。
>>    ⇒この後、ifconfig can0を実施すると、TX packets:1のみ変わっている。
>>
>> ※/sys/devices/platform/FlexCAN.1/state の内容は ”Start::error passive”。
>>
>>
>> 7.loopback,srx_disの設定を変更して確認
>> 受信データを監視する、candump内で、データ送信を行なう処理を追加し、
>> 自送信データを折り返して受信できるかを確認。
>>
>> ・loopback:"1"でループバック有効、"0"でループバック無効。
>> ・srx_dis:"0"で自身が送信したフレームを受信、"1"で受信しない。
>>
>> パターン1.loopback=1(有効),srx_dis=1(無効)
>>  ⇒"write"後の"select"で待ち状態、CAN TxD変化せず(CAN_H、CAN_Lも同様)
>>
>> パターン2.loopback=0(無効),srx_dis=0(有効)
>>  ⇒"write"後の"select"関数で待ち状態、CAN TxD変化有り(CAN_H、CAN_Lも同様)
>>
>> パターン3.loopback=1(有効),srx_dis=0(有効)
>>  ⇒"write"したフレームを"recvmsg"で受信、CAN TxD変化せず(CAN_H、CAN_Lも同様)
>>
>> パターン4.loopback=0(無効),srx_dis=1(無効)
>>  ⇒"write"後の"select"関数で待ち状態、CAN TxD変化有り(CAN_H、CAN_Lも同様)
>>
>>
>> 8.CAN TxDとCAN_H、CAN_Lについて
>> CAN TxDに同期して、CAN_H、CAN_Lが変化している事を確認。(電圧値は以下)
>>
>>  CAN TxD=1の時:CAN_H=約2.3V、CAN_L=約2.3V
>>  CAN TxD=0の時:CAN_H=約3.3V、CAN_L=約0.3V
>>
>>
>> 9.エラーフレーム受信の確認
>> 受信データを監視する、candump内で、データ送信を行なう処理を追加、
>> かつ以下の処理をフレーム送信前に実施し、エラーフレームを受信できるように設定。
>> ※出力している波形がエラーフレームと想定した確認。
>>  (7番目の確認のパターン2(loopback=0(無効),srx_dis=0(有効))で実施)
>>  ⇒受信せず。("select"関数で待ち状態)
>>   (設定の仕方が間違っている?)
>>
>> err_mask = 0xFF;
>> setsockopt(s[0], SOL_CAN_RAW, CAN_RAW_ERR_FILTER,&err_mask, sizeof(err_mask));
>>
>>
>> 以上です。
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
> 
> 





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