tsuka
2015年8月18日 13時24分
倉田です。
Armadillo-440でのCAN通信についてお問合せをさせて頂きます。
システムブート後の、アプリケーションでのCAN通信は、正常にできている
のですが、電源投入時にブート時(システムのブートメッセージが出ている間)
に限り、CANバスをドミナント状態(0)に強制的にしていて、他のデバイス間
での通信を行えない状態にArmadilloのCANがしています。
(ブート時の一定時間、CANトランシーバ手前のTxd信号が0Vになっている
ことを確認、出力側はドミナント)
ブートシーケンスが終わり、CAN通信のアプリケーショが起動されると正常に
CAN通信を開始します。
Armadilloブート時も、他のデバイス間のCAN通信を阻害することなく、アイドル
状態(リセッシブ状態1)でブートする必要があります。
実践開発ガイド第3部の記載されているカーネルコンフィグレーション
- 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
< > Virtual Local CAN Interface (vcan)
[*] CAN devices debugging messages ([*] へ変更)
<*> Freescale FlexCAN (<*> へ変更)
を設定していますが、ほかに何か処置が必要でしょうか?
例えば、I2C2のドライバを外す必要はありませんか?。
以上、よろしくお願いいたします。
コメント
at_kojiro.yamada
2015年8月21日 12時01分
> 電源投入時にブート時(システムのブートメッセージが出ている間)
> に限り、CANバスをドミナント状態(0)に強制的にしていて、
上記現象ですが、Armadillo-440のCAN_TXがLowに設定されておりました。
申し訳ございません。
linux-2.6.26-at25用に、CAN_TXをHighに設定するパッチ
を作成しましたのでお試しください。
> Armadilloブート時も、他のデバイス間のCAN通信を阻害することなく、アイドル
> 状態(リセッシブ状態1)でブートする必要があります。
Armadillo-440に電源を投入した瞬間から、常にリセッシブ状態であることを期
待されているでしょうか?
電源投入からブートローダーがパッド設定を変えるまでの間、
CAN_TXのパッド設定が100kΩ Pull Down[1]となります。
そのため、Armadillo-440では、電源投入の瞬間に
CAN_TXがLowになります。
電源投入時にCAN Busがリセッシブ状態であるかどうかをお使いの
CAN拡張ボードで確認していただき、
もしドミナント状態になっているのであれば、拡張ボード上で対策していただく
必要があります。
[1] これは、CAN_TXに当たるCON14 EXTIO22の
i.MX257リセット時のパッド設定です。
http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_hard…
■パッチの当て方
[ATDE ~]$ cd linux-2.6.26-at25 [ATDE ~/linux-2.6.26-at25]$ ls fix-CAN2-CAN_TX-initial-value.patch fix-CAN2-CAN_TX-initial-value.patch [ATDE ~/linux-2.6.26-at25]$ patch -p1 < fix-CAN2-CAN_TX-initial-value.patch patching file arch/arm/mach-mx25/armadillo400.c
ファイル | ファイルの説明 |
---|---|
fix-CAN2-CAN_TX-initial-value.patch | カーネル起動時にCAN_TXをHighに設定するパッチ |
tsuka
2015年8月21日 12時17分
倉田です。
調査、対策方法の報告ありがとうございます。
内容を確認して、対策を取りたいと思います。
取り急ぎ、お礼まで。
> > 電源投入時にブート時(システムのブートメッセージが出ている間)
> > に限り、CANバスをドミナント状態(0)に強制的にしていて、
>
> 上記現象ですが、Armadillo-440のCAN_TXがLowに設定されておりました。
> 申し訳ございません。
>
> linux-2.6.26-at25用に、CAN_TXをHighに設定するパッチ
> を作成しましたのでお試しください。
>
> > Armadilloブート時も、他のデバイス間のCAN通信を阻害することなく、アイドル
> > 状態(リセッシブ状態1)でブートする必要があります。
>
> Armadillo-440に電源を投入した瞬間から、常にリセッシブ状態であることを期
> 待されているでしょうか?
>
> 電源投入からブートローダーがパッド設定を変えるまでの間、
> CAN_TXのパッド設定が100kΩ Pull Down[1]となります。
>
> そのため、Armadillo-440では、電源投入の瞬間に
> CAN_TXがLowになります。
>
> 電源投入時にCAN Busがリセッシブ状態であるかどうかをお使いの
> CAN拡張ボードで確認していただき、
> もしドミナント状態になっているのであれば、拡張ボード上で対策していただく
> 必要があります。
>
> [1] これは、CAN_TXに当たるCON14 EXTIO22の
> i.MX257リセット時のパッド設定です。
>
> http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_hard…
>
> ■パッチの当て方
>
> [ATDE ~]$ cd linux-2.6.26-at25 > [ATDE ~/linux-2.6.26-at25]$ ls fix-CAN2-CAN_TX-initial-value.patch > fix-CAN2-CAN_TX-initial-value.patch > [ATDE ~/linux-2.6.26-at25]$ patch -p1 < fix-CAN2-CAN_TX-initial-value.patch > patching file arch/arm/mach-mx25/armadillo400.c >
>
tsuka
2015年8月21日 13時01分
倉田です。
> 電源投入からブートローダーがパッド設定を変えるまでの間、
> CAN_TXのパッド設定が100kΩ Pull Down[1]となります。
>
> そのため、Armadillo-440では、電源投入の瞬間に
> CAN_TXがLowになります。
>
> 電源投入時にCAN Busがリセッシブ状態であるかどうかをお使いの
> CAN拡張ボードで確認していただき、
> もしドミナント状態になっているのであれば、拡張ボード上で対策していただく
> 必要があります。
拡張ボード上での対策を具体的に教えてください。
これは、CANのボード上で、Txd信号をHIGHにプルアップするような
対策になりますか?。
もしそうだとすると、抵抗値、およびプルアップ先の電圧を
教えてください。
また、CAN_TXのパッド設定を100kΩ プルアップするような対策は
できないのでしょうか?。
質問ばかりで申し訳ありませんが、よろしくお願い致します。
at_kojiro.yamada
2015年8月21日 15時02分
CANのTransceiverは弊社の推奨デバイスであるATB-A400CANでしょうか?
http://armadillo.atmark-techno.com/devices/atb-a400can
ATB-A400CANは、Armadillo-440に電源を投入した瞬間でもCAN Busをドミナント状
態にしないよう設計されております。
ATB-A400CANでは、EXT_IO1(CON9 2pin)が拡張ボードの5V電源を供給するICの
ENピンに接続されており、リセット時はEXT_IO1がLow(ENがdisable)となります。
そのため、CAN Bus Transceiverの5V入力がOFFになり、CANのBusをドミナン
ト状態にすることはなく、対策の必要はありません。
tsuka
2015年8月21日 15時50分
倉田です。
> CANのTransceiverは弊社の推奨デバイスであるATB-A400CANでしょうか?
はい、そうです。
>
> http://armadillo.atmark-techno.com/devices/atb-a400can
>
> ATB-A400CANは、Armadillo-440に電源を投入した瞬間でもCAN Busをドミナント状
> 態にしないよう設計されております。
>
> ATB-A400CANでは、EXT_IO1(CON9 2pin)が拡張ボードの5V電源を供給するICの
> ENピンに接続されており、リセット時はEXT_IO1がLow(ENがdisable)となります。
>
> そのため、CAN Bus Transceiverの5V入力がOFFになり、CANのBusをドミナン
> ト状態にすることはなく、対策の必要はありません。
了解しました。
対策のパッチを当てて確認したところ、電源投入後からリセッシブ状態を
継続しているため、今回の対策を確認することができました。
今回は、迅速に調査・対策をしていただき、誠にありがとうございました。
今後とも、よろしくお願い致します。
at_kojiro.yamada
2015年8月19日 17時01分
> システムブート後の、アプリケーションでのCAN通信は、正常にできている
> のですが、電源投入時にブート時(システムのブートメッセージが出ている間)
> に限り、CANバスをドミナント状態(0)に強制的にしていて、他のデバイス間
> での通信を行えない状態にArmadilloのCANがしています。
> (ブート時の一定時間、CANトランシーバ手前のTxd信号が0Vになっている
> ことを確認、出力側はドミナント)
上記現象ですが、こちらでも再現することを確認しました。
現在調査中ですので、もう少々お待ちください。