【CAN通信】原理・ビットレート・データ長・主な用途など

CAN通信の「原理」「メリット」「デメリット」についてまとめました。

スポンサーリンク

【はじめに】CAN通信とは

CAN通信とは、自動車等に搭載されているネットワーク通信です。
CANでは、2本の通信線で各ノードと通信をします。

CAN通信の概要
主な用途 ■自動車制御など、近距離向けのネットワーク中心
■施設内など中距離向け(数百メートル)でも使用可能。
ビットレート ■High Speed CAN:最大1Mbps
■Low Speed CAN:最大125kbps
データ長 ■可変(最大8[byte]=64[bit]なので命令・簡単な数値データのやり取り向け)
バス電圧 ■基準:2.5[V]
■High:3.5[V]
■Low:1.5[V]
CAN信号 2本の信号線(CAN-H, CAN-L)だけで行います。この2本は平衡(ディファレンシャル)信号で、ノイズの影響を受けにくい仕組みになっています。通信データはフレーム単位で行われます。
フレーム構造 CANは「パケット通信」なので、「ヘッダー」「データ」「フッター」という3つのフレーム構造となっています。CANではパケットのことを「データフレーム(CANメッセージ)と呼びます。また、データフレームには「標準フォーマット」「拡張フォーマット」の2種類あります。
スポンサーリンク

【フレーム構造】標準フォーマットの場合

フレーム名 項目 最大データ量 概要
SOF ノードから最初に送信される部分。開始位置を示すことから「SOF(Start Of Frame)」と呼ばれ、ノード間での同期にも利用されます(同期フレームとも呼ばれる)。バスアイドル状態であるリセッシブからドミナントに変化することで、データフレームの送信を表し、受信側と同期をとります。
ヘッダー ID(Identifier) 11[bit] データ内容、送信ノードの識別、通信調停の優先順位などを決定します。
ヘッダー RTR(Remote Transmission Request) 1[bit] データフレームとリモートフレームを識別します。つまり、データフレームとリモートフレームの間に入り、両者の区別をします。RTRは必ずドミナントとなります。また、ID同様に通信調停にも使用されます。
ヘッダー IDE(In an Extended Frame the Base ID) 1[bit] 1ビット長の「IDE(Identifier Extension)」と予約ビット「r」、4ビット長の「データレングスコード(DLC)」から構成されます(IDE、R0、DLCあわせてコントロールフィールドと呼ばれる)。
ヘッダー 未使用(予約)R0 1[bit] 同上
ヘッダー DLC(Data Length Code) 4[bit] 後述のデータフィールドが何バイトになるかを示します。
データ DATA1~DATA8 0~64[bit] = 0~8[byte] 送信データ部分を「データフィールド」と呼びます。DLCの設定によって0~8バイト(0~64ビット長)になり、どのようなデータを割りあてるか(データ長)は設計者が前述のコントロールフィールド(DLC)で決められます。
フッター CRCシークエンス 15[bit] 送信ノードが「SOF」「ID」「コントロールフィールド」「データフィールド」の送信値を演算して、CRC(Cyclic Redundancy Check)シーケンスとして結果を送信します。受信ノードでも同様の演算を行うことで、正常に受信ができたかを判断します。
フッター CRCデリミタ 1[bit] CRCシーケンスの終わりを示します。CRCシーケンスとCRCデリミタを併せて「CRCフィールド」と呼びます。
フッター ACKスロット 1[bit] 送信したCRCフィールドまでのデータが正常に受信できたかを判断します。
フッター ACKデリミタ 1[bit] ACKスロットの終了を表します。ACKスロットとACKデリミタを合わせて「ACKフィールド」と呼びます。
フッター EOF(END OF Frame) 7[bit] データフレームの終わりに「EOF(End Of Frame)」が送信されます。
ITM データフレームの範囲には含まれませんが、「ITM(Intermission)」と表記され、ITM後にバスアイドルとなります。ITMに関しては「オーバーロードフレーム」で唯一送信可能です。
スポンサーリンク

【データフィールド】使い方

データフィールド内では全byteは最上位ビット(MSB)より送信され、1byteごとに長さを設定できます。
また、どのようにデータを割り当てるかは決まっていないため、利用者が任意に決定できます。できるよ

例)1byteのデータを割り当てる場合
・1byteの領域をそのまま1byteのデータとして使用
・1byte(8bit)の1bitずつを使用

など

スポンサーリンク

【拡張】拡張フォーマットの構造

フレーム名 概要 データ量
ヘッダー ID(Identifier) 11[bit]
ヘッダー SRR(Substitute Remote Request) 1[bit]
ヘッダー IDE(In an Extended Frame the Base ID) 1[bit]
ヘッダー RTR(Remote Transmission Request) 1[bit]
ヘッダー 未使用(予約)R1, R0 2[bit]
ヘッダー DLC(Data Length Code) 4[bit]
データ DATA1~DATA8 8[bit]
フッター CRCシークエンス 15[bit]
フッター CRCデリミタ 1[bit]
フッター ACKスロット 1[bit]
フッター ACKデリミタ 1[bit]
フッター EOF(END OF Frame) 7[bit]
スポンサーリンク

【エンディアン】ビッグエンディアンとリトルエンディアンの違い

データは1byte単位(=8ビット)で保存され、それぞれにアドレスが割り振られています。
(アドレスに使えるbit数が64bitなのが64bit OS)

2byte以上のデータを保存する時に、どのような順序で保存するかの方法に「ビッグエンディアン」「リトルエンディアン」があります。

種別 概要
ビッグエンディアン データを前の方から順に詰めていく(4byteの例:12 34 56 78)。モトローラ(Motorola)のCPUはこれ。つまり、MSB(Most Significant Byte:最上位バイト)は使用されるメモリの最下位部分、LSB(Least Significant Byte:最下位バイト)は最高位部分に格納されます。
リトルエンディアン データを後ろの方から順に詰めていく(4byteの例:78 56 34 12)。インテル(Intel)やAMDのCPUはこれ(Windowsパソコンも同じ)。つまり、MSB(Most Significant Byte:最上位バイト)は使用されるメモリの最上位部分、LSB(Least Significant Byte:最下位バイト)は最下位部分に格納されます。

CAN通信では、ビッグエンディアン(Motorola)か、それともリトルエンディアン(Intel)が特に決まっていないので、送受信する場合はどちらか設定する必要があります。

ビッグエンディアンとリトルエンディアンの違い
ビッグエンディアンとリトルエンディアンの違いについてまとめました。

例)
・スタートビット(ナンバー)・・・「0」
・ビット長:32bit(4byte)
の場合

リトルエンディアン(Intel)は、バイト1 -> バイト4の順で格納されます。

<- 低位 高位 ->

byte No. 1 2 3 4 5 6 7 8
bit No. 7…0 15…8 23…16 31…24 39…32 47…40 55…48 63……49

ビッグエンディアン(Motorola)は、バイト8 -> バイト5の順で格納されます。

byte No. 1 2 3 4 5 6 7 8
bit No. 63…56 55…48 47…40 39…32 31…24 23…16 15…8 7……0
スポンサーリンク

【その他】関連ページ

【組み込み】LSB(分解能)とOffset(オフセット)の違い、計算方法
組み込み系におけるLSB(分解能)とOffset(オフセット)の違い、計算方法についてまとめました。
【情報処理入門】用語解説・資格試験対策まとめ
情報処理分野の用語・原理・資格試験対策について解説します。
コンピュータ
スポンサーリンク

コメント