SAEJ1939プロトコルスタック

SAEJ1939プロトコルスタックは、高速コントローラーエリアネットワーク(CAN)の厳しいニーズを満たす必要性があります。ソースコードは、高性能のモジュラーデザインを使用し、シンプルなAPIを備えています。

J1939プロトコルスタックを提供いたします
・ J1939-82準拠
・ MISRAC準拠
・ ANSICソースコード
・ RTOSの有無にかかわらず使用
・ 8、16、32、または64ビットCPUで使用
・ 完全なユーザーズリファレンスマニュアル


SAEJ1939プロトコルの概要

仕様自体の詳細については、Society of AutomotiveEngineersをご覧ください。これは、このJ1939の紹介とBoschCAN仕様に対応しております。

SAE J1939は、過去20年間、中型および大型商用車に使用されてきたSAE J1587 / J1708ネットワークの代替品です。現在、SAE J1939は、商用車の診断および制御アプリケーションの標準通信バスとして使用されています。その人気と成功により、農業(ISO 11789)および海洋産業(NMEA 2000)に採用されています。


J1939の概要

  • SAE J1939は、コントローラーエリアネットワーク(CAN)バス上で動作する高レベルの通信プロトコルです。SAE J1939は、車両の電子制御ユニット(ECU)間で情報(エンジンRPMなど)を交換する方法を正確に指定
  • データの優先度、サイズ、スケーリング、およびオフセットを定義します。たとえば、J1939は、エンジンRPMをデフォルトの優先度3、サイズ16ビット、解像度0.125 rpm /ビット、オフセット0に指定
  • この標準では、メッセージのタイムアウト、大きなメッセージをフラグメント化して再構築する方法、ネットワーク速度、物理層、アプリケーションがネットワークアドレスを取得する方法など、他の多くの側面を定義

J1939では、頭字語CAはController Applicationの略で、特定のJ1939アドレスに関連付けられたハードウェアではなくソフトウェアエンティティを表します。単一のハードウェアである電子制御ユニットには、複数のコントローラーアプリケーションが含まれる場合があります。

たとえば、中央に配置されたECUには、「エンジンコントローラ」、「ターボチャージャーコントローラ」、および「クルーズコントロールコントローラ」を含めることができます。その場合、単一のハードウェアまたは物理ネットワークノード内に3つのCAが存在します。物理的には1つのノードですが、論理的には3つのノードです。3つのCAはすべて、独自の送信元アドレスとNAMEフィールドを維持する必要があります。

データリンク
SAE J1939は、単純なデータリンク層を使用して情報を通信します。全部で29ビットのCAN識別子にエンコードされる6つのサブフィールドがあり、それらは以下に示されています:優先度、拡張データページ、データページ、プロトコルフォーマット、プロトコル固有、および送信元アドレス。

P EDP DP PF PS SA
3ビット 1ビット 1ビット 8ビット 8ビット 8ビット
Pはメッセージの優先度であり、EDPとDPは4つの異なるページを構成し、1つのページはISO15765-3用に予約されています。PFとPSはパラメーターグループ番号と宛先アドレスを定義し、SAはコントローラーアプリケーションの送信元アドレスです。このエンコーディングの詳細については、SAEJ1939-21を参照してください。

メッセージ
J1939の中心には、すべてのJ1939メッセージに割り当てられる一意の番号であるパラメータグループ番号(PGN)があります。PGNは、メッセージとそのデータを識別するのに役立ちます。メッセージに単一のパラメーター(VINなど)が含まれる場合もありますが、通常、PGNにはパラメーターのグループが含まれます。標準では、合計8,672個のPGNがあります。

メッセージの例として、PGN61,444を取り上げます。「ElectronicEngineController1」メッセージを識別します。仕様によると、「EEC1」にはメッセージのデータフィールドに埋め込まれた7つの異なるパラメータがあります。エンジンRPMは、これら7つのパラメーターの1つです。

メッセージサイズ
J1939には、3バイト、8バイト、可変長の3つの異なるメッセージサイズが許可されています。長さが3バイトのメッセージは1つだけで、それが要求メッセージ(PGN 59,904)です。

J1939のメッセージの大部分は、長さが8バイトです。これにより、メッセージの数を減らしてネットワーク上のデータ量を最大化することにより、ネットワーク帯域幅をより効率的に使用できます。

可変長メッセージは、9〜1,785バイトの長さのメッセージです。これらのメッセージは大きすぎて単一のCANデータフレームに収まらないため、送信機でフラグメント化し、受信機で再アセンブルする必要があります。このプロセスは、J1939-21で指定されているJ1939のトランスポートプロトコルで定義されています。

トランスポートプロトコル層は、BAMとCMの2種類のメッセージフラグメンテーションを定義します。これら2つのタイプにはいくつかの違いがあり、主な違いは宛先アドレスです。BAMはグローバル宛先アドレスを使用するため、すべてのCAに送信されますが、CMは宛先固有です。アドレス指定方式により、1つのBAMのみを同時に送信できますが、異なる宛先アドレスを使用する複数のCMを同時に送信できます。

BAMとCMのもう1つの違いは、メッセージの送信に時間がかかることです。BAMの場合、データパケットの間隔は50ミリ秒以上、200ミリ秒以下である必要があります。CMを使用すると、データフレームを可能な限り迅速に送信できます。

BAM
頭字語のBAMは、Broadcast Announce Messageの略で、トランスポートプロトコル層で使用される通信の一種です。BAMメッセージは、サイズが8バイトを超える情報をすべてのJ1939 CAに送信するために使用され、ハンドシェイクを必要としません。

BAMの最初のメッセージは、これから続くバイト数、これから続くデータパケットの総数、および対応するデータのPGNを示します。このヘッダー情報はすべて、トランスポートプロトコル接続管理(TP.CM)フレームで送信され、データはトランスポートプロトコルデータ転送(TP.DT)フレームに含まれます。

SPN
SAE J1939では、頭字語SPNはSuspect Parameter Numberの略で、J1939パラメーターのIDを表します。すべてのJ1939パラメータには、19ビット幅の一意のSPNがあり、パラメータの定義時にSAE委員会によって割り当てられます。

疑わしいパラメータ番号の主な目的は、障害が発生したときにパラメータを識別することです。すべての障害は、SPNフィールドとFMIフィールドによって識別されます。


PGN65134高解像度ホイール速度

  • 送信の繰り返し: 20ms
  • データ長: 8
  • デフォルトの優先度: 2
  • パラメータグループ番号: 65134
  • 開始位置 長さ パラメータ名 SPN
  • 1-2  2バイト フロントアクスル、左ホイールスピード 1592
  • 3-4  2バイト フロントアクスル、右ホイールスピード 1593
  • 5-6  2バイト リアアクスル、左ホイールスピード 1594
  • 7-8  2バイト リアアクスル、右ホイールスピード 1595
  • DTC

SAE J1939では、頭字語DTCは診断トラブルコードの略で、障害コードとも呼ばれ、障害が発生したパラメーターを識別するのに役立ちます。DTCには、障害が発生したパラメーターの疑わしいパラメーター番号(SPN)、障害が発生した回数(OC)、および障害が発生した方法(FMI)が含まれています。

アクティブなDTCはDM1メッセージによって送信され、非アクティブなDTC(つまり履歴)はDM2メッセージによって送信されます。DM1およびDM2メッセージには複数のDTCが含まれる場合があります。これは、メッセージがトランスポートプロトコル(TP)を使用して送信される可能性があることを意味します。DM1メッセージとDM2メッセージはどちらも、J1939-73仕様で定義されています。

DTCの定義:

  • 疑わしいパラメーター番号(SPN) 19ビット
  • 故障モード識別子(FMI) 5ビット
  • 発生回数(OC) 7ビット
  • SPN変換方法(CM) 1ビット
  • 物理層

現在、2つの250 Kbps物理レイヤーJ1939-11とJ1939-15が定義されており、500KbpsレイヤーJ1939-14が開発中です。

  • J1939-11は、最大バックボーン長が40メートル、最大スタブ長が1メートルのシールド付きツイストペア線を指定しています。3ピンコネクタを使用し、最大30ノードを使用できます。
  • J1939-15は、最大バックボーン長が40メートル、最大スタブ長が3メートルのシールドなしツイストペア線を指定しています。2ピンコネクタを使用し、最大10ノードを使用できます。

CANパラメータ
SAE J1939-11および-15は、250 Kbpsのネットワークデータレートを指定し、最小期間は3.998 us、最大期間は4.002usです。CANネットワークでは、カスタムサンプルポイント設定も許可および要求されます。J1939の場合、サンプルポイント設定の最大値は87.5%です。ノードはできるだけ近くに設定する必要がありますが、87.5%を超えないようにしてください。CANペリフェラルでは、1〜3の同期ジャンプ幅(SJW)設定も可能です。SJW値は、同期のためにノードのCANクロックに加算または減算できる時間を示します。J1939では、単一のSJWのみが許可されます。

シールドの終了
シールド付きのネットワークの場合、電気的ノイズが最も少なく、中央に近い1つの場所で、シールドを直接アースに接続する必要があります。

ノードは、直列の抵抗とコンデンサを介してシールドに接続します。抵抗器の値は1オーム、コンデンサの値は0.68uFである必要があります。

クロックトレランス
CANバスに基づくJ1939は、CAN ISO11898ドキュメントに記載されているものよりもはるかに厳しいクロック許容値を持っています。CANは1.58%の許容誤差を指定し、J1939-11およびJ1939-15は0.05%のクロック許容値を指定します。これらの厳しい許容誤差のため、CANペリフェラルはPLL(フェーズロックループ)およびFLL(周波数ロックループ)乗算器によって駆動されない場合があります。

周波数を乗算するために使用されるPLLとFLLは、クロックジッタをもたらします。クロックジッタは、クロック信号の周期ごとの変動です。水晶はPLL / FLL回路と比較して非常に低いジッタを持っています。このため、ジッタによってCANバスにエラーが発生する可能性があります。PLL / FLLジッタ量については、マイクロコントローラのデータシートを参照してください。

ネットワークの終了
すべてのSAEJ1939ネットワークは、バックボーンの両端に2つの抵抗を使用し、必要とします。これらの抵抗器はネットワークケーブルのインピーダンスとバランスが取れており、電気反射を防ぎます。反射は可聴エコーによく似ており、減衰せずに高速動作を妨げる可能性があります。

SAE J1939-11とJ1939-15はどちらも、電子制御ユニットの内部に終端抵抗を含めないように指定しています。抵抗器がECUの内部に配置されている場合、そのECUがネットワークから削除されると、ネットワークは動作しなくなります。これにより、必要に応じてバックボーンを拡張することもできます。代わりに、終端抵抗は、ネットワークの端をシールしてキャップするのに役立つケーブルプラグに配置する必要があります。終端抵抗の最小抵抗は110オーム、通常は120オーム、最大抵抗は130オームです。


プロトコルスタック
J1939プロトコルスタックとは何ですか?J1939プロトコルスタックは、OSI7層モデルの適切な層を処理するソフトウェアライブラリです。J1939は、レイヤー1(物理)、レイヤー2(データリンク)、レイヤー3(ネットワーク)、レイヤー4(トランスポート)、およびレイヤー7(アプリケーション)を指定します。

簡単に言うと、インバウンドデータ用のJ1939プロトコルスタックは、受信した生のCANフレームを変換して再構築し、完全で有効なJ1939メッセージをユーザーのアプリケーションに提示します。アウトバウンドデータの場合、J1939プロトコルスタックはユーザーのアプリケーションからの完全なメッセージを受け入れ、生のCANフレームを変換、フラグメント化、およびJ1939ネットワークに送信します。

NAMEフィールド
J1939ネットワーク上のすべてのECUまたはCA(コントローラーアプリケーション)には、一意の名前があります。NAMEフィールドは、J1939コントローラーアプリケーションを識別するためと、送信元アドレスを取得するための2つの目的で使用されます。NAMEは64ビット幅で、次のフィールドで構成されています:任意のアドレス対応、業界グループ、車両システムインスタンス、車両システム、予約済みビット、機能、機能インスタンス、ECUインスタンス、メーカーコード、およびID番号。NAMEフィールドは、各CAに一意のIDを与えます。ネットワーク上のノードは、NAMEフィールドを使用して相互に区別します。NAMEフィールドは、ノードの優先順位を確立するため、ネットワーク管理にも不可欠です。NAMEは数値に変換されます。アドレスを要求するときは、最小の数値が最高の優先順位を持ちます。

ECUには、複数のCAとNAMEフィールドが含まれる場合があります。NAMEフィールドはPGN60,928内で送信されます。ネットワーク上のすべてのコントローラーアプリケーション、およびすべてのサブネットワークには、一意のNAMEフィールドが必要です。

アドレスクレーム
J1939では、車両ネットワークバス上のCAまたは電子制御ユニットは、通信を可能にするために一意の送信元アドレスを要求する必要があります。アドレス0〜128は事前に割り当てられており、これらのアドレスを使用するCAは、電源投入直後に通信できます。ただし、将来のデバイスと機能を見越して、J1939には動的にアドレスを割り当てる方法が含まれています。新しいデバイスは、アドレス要求メッセージを送信して、自分自身のアドレスをアナウンスする必要があります。

アドレスクレームメッセージを送信すると、新しい(アドレス指定されていない)デバイスは、想定しているアドレスを示すアドレスクレームPGNを送信します。ネットワーク上のすべてのデバイスは、この新しく要求されたアドレスを内部アドレステーブルと比較します。アドレスが優先度の高いデバイス(NAMEによって決定される)によってすでに使用されている場合、優先度の高いデバイスは、アドレス要求メッセージを送信することによって競合を示します。優先度の低いデバイスはすぐにアドレスの使用を停止し、新しいアドレスを要求する必要があります。


SAEについて
SAE(Society of Automotive Engineers)は、航空宇宙、自動車、商用車業界のエンジニアと技術専門家の組織です。彼らの主な目標は、SAE J2497、SAE J1939、SAE J1850、SAE J1587、SAEJ1708などの技術標準を開発することです。SAEは、政府と企業が世界の車両モビリティ業界の技術基準について合意するための場を提供します。一般に、これらの基準は推奨される慣行にすぎません。つまり、企業がこれらの基準を順守する法的義務はありません。ただし、政府が採用を義務付ける場合もあります(OBD2やSAE J1979など)。

SAE J1939ドキュメントを購入するには、SAEのオンラインストアからデジタルコンテンツ(PDF)を購入することをお勧めします。PDFは、特定のキーワードを検索する必要がある場合に非常に役立ちます。

  • J1939仕様
  • SAEJ1939親ドキュメント
  • SAE J1939-11物理層、250 Kbps
  • SAEJ1939-13オフボード診断コネクタ
  • SAE J1939-14物理層、500 Kbps
  • SAE J1939-15縮小物理層、250 Kbps
  • SAE J1939-17 CANFD物理層500Kbps / 2 Mbps
  • SAEJ1939-21データリンク層
  • SAE J1939-22 CANFDデータリンク層
  • SAEJ1939-31ネットワーク層
  • SAEJ1939-71車両アプリケーション層
  • SAEJ1939-73車両診断レイヤ
  • SAEJ1939-74アプリケーション-構成可能なメッセージング
  • SAEJ1939-75アプリケーション層-発電機セットおよび産業用
  • SAEJ1939-81ネットワーク管理
  • SAEJ1939-82コンプライアンス-トラックとバス
  • SAEJ1939プロトコルの説明
  • J1939プロトコル辞書
  • PGN SA DA
  • PDU1 PDU2

SAEJ1939ポート

リアルタイムSAEJ1939プロトコルスタックは完全にプラットフォームに依存せず、ANSICプログラミング言語で記述されています。ターゲット固有であり、特定のマイクロコントローラーの詳細が組み込まれているのは、CANデバイスドライバーssCANです。

ssJ1939とssCANが一緒になって完全に移植されたシステムを形成し、顧客がほぼ即座に稼働できるようにします。当社のssCANデバイスドライバーは、40を超えるさまざまなマイクロコントローラーに移植されています。以下は、使用可能なポートのリストです。リストされていないハードウェアプラットフォーム用のポートまたはデバイスドライバに興味がある場合は、お問い合わせください。

  • Linux
  • Windows XP / 7 /embedded
  • Texas Instruments RM4x(DCAN)
  • Texas Instruments LM3Sx
  • Texas Instruments TMS470x
  • Texas Instruments TMS470Mx
  • Texas Instruments TMS570x
  • Texas Instruments Tiva TM4C
  • Texas Instruments F28M35xx
  • Texas Instruments TMS320F280x
  • Texas Instruments TMS320F281x
  • Texas Instruments TMS320F282x
  • Texas Instruments TMS320F283x
  • Texas InstrumentsAM3x-Sitara
  • Texas Instruments DM8x-DaVinci
  • Atmel SAM7
  • Atmel AT90
  • インフィニオンC16x
  • インフィニオンTriCore
  • Intel 82527
  • マイクロチップPIC18
  • マイクロチップPIC24
  • マイクロチップPIC32
  • マイクロチップdsPIC30
  • マイクロチップdsPIC33
  • マイクロチップdsPIC33E
  • マイクロチップdsPIC33CK
  • マイクロチップMCP2515
  • NXP S32
  • NXP LPC11xx
  • NXP LPC17xx
  • NXP LPC21xx
  • NXP LPC23xx
  • NXP SJA1000
  • NXP KS22
  • NXP HCS08
  • NXP HCS12
  • NXP HCS12X
  • NXP MC68xxx
  • NXP MCF5xxx
  • NXP MPC5xxx
  • NXP 56F83xxx
  • NXP Kinetis Kxx
  • Silicon Labs C8051
  • STMicro ST7
  • STMicro ST10
  • STMicro STR7
  • STMicro STM8
  • STMicro SPC56
  • STMicro STM32L4x
  • STMicro STM32F0x
  • STMicro STM32F1x
  • STMicro STM32F2x
  • STMicro STM32F3x
  • STMicro STM32F4x
  • STMicro STM32F7x
  • ザイリンクスLogiCOREAXI(axi_can)