2017/09/10

SocketCANによる仮想CAN通信

Raspberry PiでCAN通信しようと、CAN-Utilsの中身を調べています。

LinuxのSocketCANを利用して通信しているようでした。

SocketCAN

SocketCANとは何ぞやと、上記の文章を読んでいると、
以下の章で衝撃を受けました。

6.4 The virtual CAN driver (vcan)

なんと、仮想CANドライバという機能があるようです。

CANデバイスをリンクアップするときに、
実デバイスがなくても、仮想的なCAN通信ができるようです。
仮想デバイスを作る方法は以下の通り。
$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
$ sudo ip link set vcan0 up

これで、/sys/class/net の下にvcan0ができ、
vcan0 という名前でデバイスが利用できるようになります。

以下は、CANデバイスが無いPC上で、CAN-Utilsを使用した例です。

送信側


受信側


こんなことができるなら、CANモジュール買わなくてもよかったか・・・
まあ、CANモジュールが届くまでは、仮想CANで開発ができそうだ。

Raspberry PiでCAN通信 その2【CAN-Utils】

CANモジュールがまだ来ないので、まだCAN通信ができませんが、
待っててもしょうがないので、CAN通信をどうプログラムするのか
調べます。

CAN通信でネットを検索すると、「CAN-Utils」というオープンソースの
パッケージが多数出てきます。まずはこのパッケージをインストールして、
公開されているソースを見ながら、調査を進めていきます。

まずはCAN-Utilsのインストールから。
ホームディレクトリ以下にダウンロードして、インストールすることにします。
$ cd
$ sudo apt-get install autoconf git libtool
$ git clone https://github.com/linux-can/can-utils.git
$ cd can-utils
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

これで、/usr/local/bin 配下に、CAN-Utilsの実行ファイルが入りました。

主に使うコマンドは、受信はcandumpコマンド、送信はcansendコマンドです。

以下、/sys/class/net/can0インターフェースがある前提で、記載します。

受信したすべてのCANフレームを表示するときは、
$ candump can0
で、表示できます。フィルターを設定することもできます。

送信する場合は、arb=123,data=0xAA 0xBB 0xCC 0xDD の場合、
$ cansend can0 123#AABBCCDD
とします。標準フレーム、拡張フレーム両方できるようです。

これから、cansendのソースを眺めたいと思います。

注文したCANモジュールは、まだ「発送しました」になってた。
進んでるんだろうか。
はやくCANモジュール来ないかなー。

2017/09/08

Raspberry PiでCAN通信 その1【設定編】

注文したCANモジュールが到着するまでに、
Raspberry Piでどう設定するのかを調べました。

以下は、Raspberry Pi 3 Model B 、OSはRaspbian Jessieでの設定です。

MCP2515は、マイコンとはSPIで接続するので、
まず、以下の操作で、Raspberry PiのSPI通信を有効にします。

Raspberry Piにログインして、raspi-configを起動します。
$ sudo raspi-config

「5 Interfacing Options」を選択します。

「P4 SPI」を選択します。

SPIを有効にしますかと聞かれるので、「Yes」を選択します。

SPIが有効になりました。

以上で、SPIが使えるようになりました。

続いて、MCP2515を使えるように設定します。
/boot/config.txtに、以下の設定を加えます。

「dtparam=spi=on」と書かれている場所のすぐ下に、
以下の赤字の部分を追記します。

dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
dtoverlay=spi-bcm2835

今回使うCANモジュールは、MCP2515に8MHzの水晶、
INTをRaspberry Pi の GPIO25に接続するため、
上記の記述になります。

/boot/config.txtを保存して、Raspberry Piを再起動します。
$ sudo reboot

再起動後、dmesgで、デバイスドライバが動作していることを確認します。


あ、あれ、なんかエラーになってるっぽい。
そ、そうか、CANモジュールつないでないから、エラーになってるのかな?
CANモジュールが届くまで、なにも出来ないか・・・

これがうまくいっていれば、あとはsysfsにcanインターフェースを追加して、
終わりのはずでした。一応、書いておきます。
$ ip link set can0 type can bitrate 500000
$ ip link set can0 up

これで、/sys/class/net以下に、can0 というのが現れて、
このインターフェースを通して、通信ができるはずでした。
当然ながら、デバイスがないので、現状ではエラーになってしまいます。

アマゾンで配達状況を確認すると、「発送しました」となっているが、
中国からなので、いつ届くのだろうか・・・
早く来ないかなー。

2017/09/06

Raspberry PiでCAN通信 その0【購入編】

仕事で、CAN通信をする開発をすることになりました。
このため、CAN通信の対向機として、Raspberry Piを使うことにしました。

Raspberry PiでCAN通信をするために調べたことを書いていきます。

CAN通信するためには、CANコントローラ と CANトランシーバ が必要です。

ネットで作例を探すと、Arduinoで マイクロチップテクノロジ社の
MCP2515、MCP2551 を使ったものをよく見ます。

マルツのサイトなどで探すと、MCP2515が400円ほど、MCP2551が250円ほど。
コンデンサ、抵抗などを合わせると、合計で1000円ほどになりそうです。

アマゾンで探すと、以下のものを見つけました。
※重くなるから、アフィではなくリンクだけ貼るよっ!

Rasbee オリジナル MCP2515 CAN バス モジュール TJA1050 レシーバーSPIモジュール Arduinoのための AVR 1個 [並行輸入品]

画像は、商品ページのものを借りました。

チップ構成が、CANコントローラがMCP2515と、CANトランシーバがTJA1050ですが、
値段が 265円(2017/09/05時点)と、圧倒的な安さでした。
とりあえず、これを2つ注文しました。

ほかのメーカー?からも、同じような商品が多数ありました。
どこかのコピー品なのでしょうか。。。

中国からの輸入になるようですが、日本円で購入できて楽でした。
また、到着まで最大10日ほどかかるようです。

到着までに、Raspberry Pi への接続方法・設定方法を調べます。

2015/12/15

ロジアナ初めて使った

仕事で、ロジックアナライザを初めて使いました。

これでした。
POKEANA36


信号線のHi/Lowをサンプリングして、UARTとかなら
そのままデコードして表示もできるのがすごい。

これまでなら、受信したデータをprint文などで出力するよう
デバッグログ埋め込んで・・・ってやってたのが、
特にコードに手を入れなくても見れる。
こんなのがあったとは。

家でも欲しいなと思って、値段を調べてみると・・10万円。。。
高くて手が出ません。残念。

2013/12/22

応用情報技術者試験に合格しました。

応用情報技術者試験に合格していました。
よかったよかった。

会社からインセンティブがもらえます。1万円です。

次回、2014年春は、エンベデッドシステムスペシャリストを
受験します。午前Ⅰが免除なので、ちょっと楽できます。

2013/10/20

PC版ドラクエ10買ってきた。

情報処理試験も終わったので、
PC版のドラクエ10を買ってきた。



ヒャッホォォォゥ、遊びまくるぜー。

自分は手元に実物が無いといやな人なので、
ダウンロード版ではなくパッケージ版を買ってきた。
ただ、これ買うのが大変だった。

まず駅前のビックカメラに行ったが、在庫なし。
取り寄せも次いつ入るか目処なし。

ビックカメラはあきらめてソフマップに行くも、置いてない。

最後にヤマダ電機に行ってやっと買えた。

ただし、特典なしの通常版しか置いてなかった。orz
まあいいやと妥協して通常版を買いました。

さて、レジストコード入れよかなと思ったけど、
ちょっと待てよ。
無料期間がレジストコード登録してから20日なら、
今19時だから、0時回ってからにしておいたほうがいいかも。
今登録するのはもったいないような気がする。
(ケチケチでスマンな)

というわけで、明日からしばらく遊びまくる。