ce_fono
2014年3月12日 20時40分
本田と申します。
Armadillo-840のSPI1にMPC2515を接続してCAN通信を行おうとしています。
以下のコンポーネントをbuilt-inで組み込んでいます(抜粋です)。
System Type ---> [*] R-Mobile A1 (R8A77400) [*] Armadillo-840 board Armadillo-840 System Configuration ---> [*] use MSIOF1 [*] SPI: User mode SPI device [CS:PORT73] Device Drivers ---> [*] SPI support ---> [*] Debug support for SPI drivers -*- Utilities for Bitbanging SPI masters <*> SuperH MSIOF SPI controller <*> User mode SPI device driver support [*] Networking support ---> <*> 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) <*> Platform CAN drivers with Netlink support [*] CAN bit-timing calculation <*> Microchip MCP251x SPI CAN controllers [*] CAN devices debugging messages
カーネルをビルドし、起動してみるとMPC2515を検出してくれません。
ブートログを見ると
spi_sh_msiof spi_sh_msiof.1: master is unqueued, this is deprecated spi spi1.0: spi_bitbang_setup, 1000 nsec/bit spi spi1.0: setup mode 0, 8 bits/w, 1000000 Hz max --> 0 spi_sh_msiof spi_sh_msiof.1: registered child spi1.0
と表示されているのが気になります。
Armadillo-840とMPC2515の組み合わせでCAN通信を実現されている方がいらっしゃいましたら助言をお願い致します。
ファイル | ファイルの説明 |
---|---|
config.txt | コンフィグレーションファイル |
Armadillo_840_bootup.log | ブートログ |
コメント
ce_fono
本田です。
コメントありがとうございます。
> MPC251xのドライバを見てみたのですが、platform data が必要なようです。
> MPC251x用の platform data は作成した状態ですか? もしまだであれば、
> linux-3.4-at/arch/arm/mach-shmobile/board-armadillo840.c
> を参考に作成してみてください。
未作成でした。作成してみます。
> > カーネルをビルドし、起動してみるとMPC2515を検出してくれません。
> > ブートログを見ると
> > spi_sh_msiof spi_sh_msiof.1: master is unqueued, this is deprecated
> > spi spi1.0: spi_bitbang_setup, 1000 nsec/bit
> > spi spi1.0: setup mode 0, 8 bits/w, 1000000 Hz max --> 0
> > spi_sh_msiof spi_sh_msiof.1: registered child spi1.0
> > と表示されているのが気になります。
>
> どの部分が気になるか教えてもらえますか?
'master is unqueued, this is deprecated'の箇所です。
これを見てspi_sh_msiofモジュールが組み込まれていないのかと思いました。
気にしなくても良いのでしょうか。
> あと、質問の中で表示フォーマットだけ少し修正させて頂きたいのですが、良
> いでしょうか?
はい、かまいません。
at_yashi
> 'master is unqueued, this is deprecated'の箇所です。
このメッセージは、spi.c::spi_register_master()
で出してい
ます。
最近までは master->transfer
に転送用の関数を入れて、その関
数を使ってデーター転送をしていました。しかし、この方法は message queue
の方法に少しづつ変更されていっているようです。
http://git.kernel.org/linus/ffbbdd2
MSIOFでは spi-bitbang.c を使うようですが、bitbangがまだ transfer の方法
で実装されているようです。「deprecated」は「使えない」という意味ではな
く、多くの場合「古くなったので、そのうち使えなくなります。なので新しい
方法に修正して」という意味です。なので、メッセージは出ていても問題なく
使えます。
drivers/net/can/mcp251x.c
の最初のコメント部分に、platform
device の作成方法が書いてあるので、こちらも参考になるかもです。
at_takashi.sasayama
笹山と申します。
Armadillo-840液晶開発モデルでmcp2515を使用する方法について下記に記します。
1. mcp2515をプラットフォームデバイスへ追加
linux-3.x/arch/arm/mach-shmobile/board-armadillo840.c へ
添付ファイルのarmadillo-840-mcp2515.patchを適用します。
本パッチではmcp2515をプラットフォームデバイスへ追加します。
2. カーネルコンフィギュレーション
Linux/arm 3.4-at6 Kernel Configuration System Type ---> *** Armadillo System Configuration *** Armadillo-840 System Configuration ---> CON7 extension board (Custom) ---> ( ) LCD (X) Custom ★チェック *** Interface and Device select *** [*] use MSIOF1 ★チェック [*] SPI: User mode SPI device [CS:PORT73] ★チェック <CONFIG_ARMADILLO840_MSIOF1_DEVICE_SPIDEV_PORT73> [ ] use SDHI1 <CONFIG_ARMADILLO840_SDHI1> ★チェックを外す Device Drivers ---> [*] SPI support ---> <CONFIG_SPI> ★チェック [*] Debug support for SPI drivers ★デバッグメッセージを出力させたい場合はチェック *** SPI Master Controller Drivers *** <*> Utilities for Bitbanging SPI masters <CONFIG_SPI_GPIO> ★チェック <*> SuperH MSIOF SPI controller <CONFIG_SPI_SH_MSIOF> ★チェック *** SPI Protocol Masters *** <*> User mode SPI device driver support <CONFIG_SPI_SPIDEV> ★チェック [*] Networking support ---> <*> CAN bus subsystem support ---> ★チェック --- CAN bus subsystem support <*> Raw CAN Protocol (raw access with CAN-ID filtering) ★チェック <*> Broadcast Manager CAN Protocol (with content filtering) ★チェック <*> CAN Gateway/Router (with netlink configuration) ★チェック CAN Device Drivers ---> <*> Microchip MCP251x SPI CAN controllers ★チェック [*] CAN devices debugging messages ★デバッグメッセージを出力させたい場合はチェック
3. ユーザーランドコンフィギュレーション
CAN通信を確認する為にcan-utilsを使用できるようにします。
atmark-dist v1.33.0 Configuration Network Applications ---> [*] can-utils ★チェック [*] cansend ★チェック [*] candump ★チェック [*] cangen ★チェック
4. Debian GNU/Linux 7に含まれるipコマンドのバイナリ
Armadillo-840起動後にipコマンドでビットレート設定を行いますが、
atmark-distに標準でによるbitrate設定はbusybox版ではできない為、
Debian GNU/Linux 7(wheezy)ユーザーランドに含まれるipで設定を行います。
添付ファイルのip.zipは、Debian GNU/Linux 7(wheezy)ユーザーランド v20130704に含まれているものです。
5. Armadillo-840起動メッセージのチェック
正常にmcp2515が認識されていれば以下のメッセージが確認できます。
[root@armadillo840-0 (ttySC2) ~]# dmesg |grep mcp Armadillo-840 mcp251x_init: got IRQ 20 for MCP2515 mcp251x spi1.0: spi_bitbang_setup, 100 nsec/bit mcp251x spi1.0: setup mode 0, 8 bits/w, 10000000 Hz max --> 0 mcp251x spi1.0: CANSTAT 0x80 CANCTRL 0x07 mcp251x spi1.0: probed
6. /dev/can0 のセットアップ
※本コマンドを実行するディレクトリに添付のipコマンドのバイナリを配置しておいてください。
[root@armadillo840-0 (ttySC2) ~]# ifconfig can0 down [root@armadillo840-0 (ttySC2) ~]# ./ip link set can0 type can bitrate 500000 loopback off [root@armadillo840-0 (ttySC2) ~]# ifconfig can0 up mcp251x spi1.0: CNF: 0x00 0xbf 0x02 [root@armadillo840-0 (ttySC2) ~]# ./ip -s -d link show can0 2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 10 link/can can state ERROR-ACTIVE restart-ms 0 bitrate 500000 sample-point 0.850 ★ビットレートが500Kbpsにセットされていることを確認 tq 100 prop-seg 8 phase-seg1 8 phase-seg2 3 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 10000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 0 0 0 RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0
7. 対向機との通信確認
対向機はArmadillo-420 + ATB-A400CAN + candumpを使用しました。
下記では4byteのデータフレームをArmadillo-840から送信し、
エラーが発生していないことを確認しています。
[root@armadillo840-0 (ttySC2) /etc/config]# cansend can0 123#12345678 [root@armadillo840-0 (ttySC2) /etc/config]# ./ip -s -d link show can0 2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 10 link/can can state ERROR-ACTIVE restart-ms 0 bitrate 500000 sample-point 0.850 tq 100 prop-seg 8 phase-seg1 8 phase-seg2 3 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 10000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 0 0 0 RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 4 1 0 0 0 0
下記はArmadillo-840でcansendを実行後の対向機の画面表示です。
Armadillo-840から送信したデータフレームの受信が確認できます。
[root@armadillo420-0 (ttymxc1) /etc/config]# candump can0 can0 123 [4] 12 34 56 78
どうぞよろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
armadillo-840-mcp2515.patch | mcp2515をプラットフォームデバイスへ追加するパッチ |
ip.zip | Debian GNU/Linux 7(wheezy)ユーザーランド v20130704に含まれるip |
ce_fono
インテグレーションパートナーのASKエンジニアリングの佐藤です。
SPI1をLCD拡張基板を使用した場合にこのドキュメントのみだと動作しなかったので
ご参考まで対処法を追記します。
対処法:
JP3またはJP2をショートする。
現象:
出荷状態のままで使用するとTCLKが添付の様な波形となりboot後プローブに失敗します。
問題の原因:
TSCKは回路図上の信号名A1_SDHICD_1ですが、CON11-9の他にIC4-9に接続されています。
ICはアナログスイッチですので出荷状態(JP2,3オープン)ではIC4-10とショート状態となり
CON9-12途中のC62(0.01uF)がぶら下がる事となりこの容量が原因でクロック整形が積分化されてしまう
回路的になぜ直接C62が入っているかは解せませんが(本来はR66の後)JP3をショートする事でIC4-10は
オープンとなりC62と切り離す事が可能です。
また推奨しませんがJP2をショートした場合は1KΩでプルダウンされる形で動作します。
またMCP2515をご検討されている方に接続PINに関して情報が無かったので
参考までにお知らせします。
MSIOF1 を使用した場合
CON11を使用する
CON11-4 CAN_INT MSIOF1_SS1 (PORT67)
CON11-9 TSCK MSIOF1_TSCK (PORT72)
CON11-10 CS MSIOF1_TSYNC (PORT73)
CON11-11 MISO MSIOF1_TXD (PORT74)
CON11-12 MOSI MSIOF1_RXD (PORT75)
CON11-1 VCC_ 3.3V
CON11-2 DGND
ファイル | ファイルの説明 |
---|---|
CAN_wrong_tcsk.jpg | SPI1 TSCK(CLOCK)問題 |
at_yashi
2014年3月13日 15時14分
MPC251xのドライバを見てみたのですが、platform data が必要なようです。
MPC251x用の platform data は作成した状態ですか? もしまだであれば、
linux-3.4-at/arch/arm/mach-shmobile/board-armadillo840.c
を参考に作成してみてください。
> カーネルをビルドし、起動してみるとMPC2515を検出してくれません。
> ブートログを見ると
> spi_sh_msiof spi_sh_msiof.1: master is unqueued, this is deprecated
> spi spi1.0: spi_bitbang_setup, 1000 nsec/bit
> spi spi1.0: setup mode 0, 8 bits/w, 1000000 Hz max --> 0
> spi_sh_msiof spi_sh_msiof.1: registered child spi1.0
> と表示されているのが気になります。
どの部分が気になるか教えてもらえますか?
あと、質問の中で表示フォーマットだけ少し修正させて頂きたいのですが、良
いでしょうか?