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通信モードの設定などを行います。
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
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
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'になっている)
コメント