CAN通信

CANとは

CANとは「ControlerAreaNetwork」の頭文字をとったもので、主に車載機器間のデータ通信に使用される規格です。 ABSやECU、BCMなどといった車載機器の通信では、今では必ずといっていいほどCANが用いられています。 もともとは、ボッシュ社が提唱し、今ではISOで規格化されています。

CANの特徴

CANは一般的にノンシールドのツイストペアケーブルにより機器を接続します。 接続可能な機器は約30までとなっています。(通信速度やバス長によって変化します。) それぞれの機器はバス型により接続され、バスの両端には100Ω〜120Ωの終端抵抗を接続します。 CANは、この2線間の電位差を判断することで、データを転送しています。 データは0byte〜8byteまで伝送することができます。

PIC18Fxx8におけるCANモジュール

対応CANバージョン:CAN1.2,CAN2.0A,CAN2.0B 前書きはこのくらいにして、実際のプログラミングに関する説明に入りましょう。

目次

I/Oポート設定

RB3/CANRX->入力(TRISBb3をセット) RB2/CANTX->出力(TRISBb2をクリア)

CAN関係レジスタ設定

CAN通信に関するレジスタは、大まかに分けると以下のようなものがあります。

  • コントロールレジスタ
  • 状態レジスタ
  • 送信データコントロールレジスタ
  • 送信データバッファーレジスタ
  • 受信データコントロールレジスタ
  • 受信データバッファーレジスタ
  • ボーレートコントロールレジスタ
  • 割り込みコントロールレジスタ
  • 割り込みステータスレジスタ

CANCON:CAN CONTROL REGISTER

このレジスタは、CAN通信モードの設定などを行います。

CANCON:CAN CONTROL REGISTER
R/W-1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0
REQOP2 REQOP1 REQOP0 ABAT WIN2 WIN1 WIN0
bit7   bit0

bit7-5 REQOP2:REQOP0 CAN動作モード要求設定ビット 1xx=設定モード要求 011=受信のみのモード要求 010=ループバックモード要求 001=通信無効モード要求 000=ノーマルモード要求 bit4 ABAT 全送信中断ビット 1=全送信中断(すべての送信バッファが対象) 0=通常の送信処理 bit3-1 WIN2:WIN0 ウィンドウアドレスビット 111=受信バッファ0 110=受信バッファ0 101=受信バッファ1 100=送信バッファ0 011=送信バッファ1 010=送信バッファ2 001=受信バッファ0 000=受信バッファ0 この設定は、CANで使用するバッファーのどれをアクセスバンクへ切り替えるかを指定します。 任意のデータメモリーのバンクから、データバッファーレジスタへのアクセスが可能となります。 フレーム割り込みが発生したとき、ICODE2:ICODE0ビット(後述)は正しいデータバッファを選択するため、WIN2:WIN0ビットにコピーします。 bit0 未実装 読み込むと'0'になります。

CANSTAT:CAN STATUS REGISTER

CANCON:CAN STATUS REGISTER
R-1 R-0 R-0 U-0 R-0 R-0 R-0 U-0
OPMODE2 OPMODE1 OPMODE0 ICODE2 ICODE1 ICODE0
bit7             bit0

bit7-5 OPMODE2:OPMODE0 動作モード状態ビット 111=予約されています 110=予約されています 101=予約されています 100=設定モード 011=受信のみのモード 010=ループバックモード 001=通信無効モード 000=ノーマルモード 注:デバイスがスリープモードに入る前に、「通信無効モード」にしてください。 bit4 未実装 読み込むと'0'になります。 bit3-1 ICODE2:ICODE0 割り込み要因ビット 111=ウェイクアップ・オン割り込み 110=RXB0割り込み 101=RXB1割り込み 100=TXB0割り込み 011=TXB1割り込み 010=TXB2割り込み 001=エラー割り込み 000=割り込みなし このビットは、割り込みが発生すると、優先順位のつけられた割り込みコード値がICODE2:ICODE0に入ります。 これらの値は割り込みの要因を示します。 ICODE2:ICODE0はアクセスバンクに指定するべきバッファーを選択するため、WIN2:WIN0にコピーします。 bit0 未実装 読み込むと'0'になります。

COMSTAT:COMMUNICATION STATUS REGISTER

COMSTAT:COMMUNICATION STATUS REGISTER
R/C-0 R/C-0 R-0 R-0 R-0 R-0 R-0 R-0
RXB0OVFL RXB1OVFL TXBO TXBP RXBP TXWARN RXWARN EWARN
bit7             bit0

bit7 RXB0OVFL 受信バッファ0オーバーフロービット 1=受信バッファ0オーバーフロー発生 0=受信バッファ0はオーバーフローしていない bit6 RXB1OVFL 受信バッファ1オーバーフロービット 1=受信バッファ1オーバーフロー発生 0=受信バッファ1はオーバーフローしていない bit5 TXBO 送信バスオフビット 1=バスオフ状態(送信エラーカウンタ255より大きい) 0=バスオフ状態でない(送信エラーカウンタ255以下) bit4 TXBP 送信バスパッシブビット 1=バスパッシブ状態(送信エラーカウンタ127より大きい) 0=バスパッシブ状態でない(送信エラーカウンタ127以下) bit3 RXBT 受信バスパッシブビット 1=バスパッシブ状態(受信エラーカウンタ127より大きい) 0=バスパッシブ状態でない(受信エラーカウンタ127以下) bit2 TXWARN 送信バスウェイティングビット 1=バスウェイティング状態(送信エラーカウンタ95より大きい) 0=バスウェイティング状態でない(送信エラーカウンタ95以下) bit1 RXWARN 受信バスウェイティングビット 1=バスウェイティング状態(受信エラーカウンタ95より大きい) 0=バスウェイティング状態でない(受信エラーカウンタ95以下) bit0 EWARN エラーワーニングビット 1=RXWARNビットかTXWARNビットがセットされている('1'になっている) 0=RXWARNビットとTXWARNビットはクリアされている('0'になっている)

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次