(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024070053
(43)【公開日】2024-05-22
(54)【発明の名称】電子制御装置、及びコア間通信方法
(51)【国際特許分類】
G06F 13/10 20060101AFI20240515BHJP
【FI】
G06F13/10 310Z
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022180412
(22)【出願日】2022-11-10
(71)【出願人】
【識別番号】509186579
【氏名又は名称】日立Astemo株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】永沼 新之介
(72)【発明者】
【氏名】飯田 隆博
(57)【要約】
【課題】データ転送の信頼性が保証しつつ、大容量のデータを高速で転送する。
【解決手段】電子制御装置であって、第1プロセッサコアと、第2プロセッサコアと、前記第1プロセッサコア及び前記第2プロセッサコアがアクセス可能な共有メモリとを備え、前記第1プロセッサコアは、CAN通信で受信したデータをSOME/IPメッセージに変換する第1SOME/IP変換部を有し、前記第1SOME/IP変換部で変換されたSOME/IPメッセージを前記共有メモリに格納し、前記第2プロセッサコアは、SOME/IPメッセージをアプリケーションで利用可能な形式に変換する第2SOME/IP変換部を有し、前記共有メモリに格納されたSOME/IPメッセージを取得し、前記第2SOME/IP変換部で前記取得したSOME/IPメッセージをアプリケーションで利用可能な形式に変換して、前記アプリケーションに提供する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
電子制御装置であって、
CAN通信でデータを受信する第1プロセッサコアと、
アプリケーションが動作する第2プロセッサコアと、
前記第1プロセッサコア及び前記第2プロセッサコアがアクセス可能な共有メモリとを備え、
前記第1プロセッサコアは、
CAN通信で受信したデータをSOME/IPメッセージに変換する第1SOME/IP変換部を有し、
前記第1SOME/IP変換部で変換されたSOME/IPメッセージを前記共有メモリに格納し、
前記第2プロセッサコアは、
SOME/IPメッセージを前記アプリケーションで利用可能な形式に変換する第2SOME/IP変換部を有し、
前記共有メモリに格納されたSOME/IPメッセージを取得し、
前記第2SOME/IP変換部で前記取得したSOME/IPメッセージを前記アプリケーションで利用可能な形式に変換して、前記アプリケーションに提供することを特徴とする電子制御装置。
【請求項2】
請求項1に記載の電子制御装置であって、
前記第1プロセッサコアは、前記第1SOME/IP変換部で変換されたSOME/IPメッセージに基づいて誤り検出符号を計算し、
前記計算された誤り検出符号をSOME/IPメッセージと関連付けて前記共有メモリに格納することを特徴とする電子制御装置。
【請求項3】
請求項2に記載の電子制御装置であって、
前記第1プロセッサコアは、前記SOME/IPメッセージのヘッダーから誤り検出符号を計算し、前記計算された誤り検出符号を前記共有メモリへ格納することを特徴とする電子制御装置。
【請求項4】
請求項2に記載の電子制御装置であって、
前記第1プロセッサコアは、前記SOME/IPメッセージのペイロードから誤り検出符号を計算し、前記計算された誤り検出符号を前記共有メモリへ格納することを特徴とする電子制御装置。
【請求項5】
請求項4に記載の電子制御装置であって、
前記第2プロセッサコアは、前記共有メモリから取得した誤り検出符号によって、前記SOME/IPメッセージの異常を検出した場合、利用不可能であることを示すデータを当該SOME/IPメッセージに書き込むことを特徴とする電子制御装置。
【請求項6】
請求項4に記載の電子制御装置であって、
前記第2プロセッサコアは、前記共有メモリから取得した誤り検出符号によって、前記SOME/IPメッセージの異常を検出した場合、当該SOME/IPメッセージの再送を前記第1プロセッサコアに要求することを特徴とする電子制御装置。
【請求項7】
請求項1に記載の電子制御装置であって、
前記第2SOME/IP変換部は、前記共有メモリから取得したSOME/IPメッセージと、Ethernet経由で他のECUから転送されたSOME/IPメッセージの両方を変換して、前記アプリケーションに提供可能であることを特徴とする電子制御装置。
【請求項8】
請求項1に記載の電子制御装置であって、
前記第1SOME/IP変換部は、CAN通信で受信した複数のCANデータを纏めて一つのSOME/IPメッセージに変換することを特徴とする電子制御装置。
【請求項9】
請求項1に記載の電子制御装置であって、
前記第1SOME/IP変換部は、CAN通信で受信したデータが欠損している場合、前後のデータから計算された値で欠損値を補完することを特徴とする電子制御装置。
【請求項10】
請求項1に記載の電子制御装置であって、
前記第1SOME/IP変換部は、CAN通信で受信したデータが欠損している場合、前回値を複製して欠損値を補完することを特徴とする電子制御装置。
【請求項11】
請求項1に記載の電子制御装置であって、
前記第2プロセッサコアは、前記共有メモリに格納されたSOME/IPメッセージを受信する機構を有することを特徴とする電子制御装置。
【請求項12】
請求項11に記載の電子制御装置であって、
前記第2プロセッサコアは、前記共有メモリから取得したSOME/IPメッセージを格納するバッファを有することを特徴とする電子制御装置。
【請求項13】
請求項11に記載の電子制御装置であって、
前記第2プロセッサコアで動作するアプリケーションは、前記共有メモリから取得したSOME/IPメッセージを格納するバッファを有することを特徴とする電子制御装置。
【請求項14】
電子制御装置が実行するコア間通信方法であって、
前記電子制御装置は、CANプロトコルに従ってデータを受信する第1プロセッサコアと、アプリケーションが動作する第2プロセッサコアと、前記第1プロセッサコア及び前記第2プロセッサコアがアクセス可能な共有メモリとを有し、
前記コア間通信方法は、
前記第1プロセッサコアが、CAN通信で受信したデータをSOME/IPメッセージに変換し、前記変換されたSOME/IPメッセージを前記共有メモリに格納し、
前記第2プロセッサコアが、前記共有メモリに格納されたSOME/IPメッセージを取得し、前記取得したSOME/IPメッセージを前記アプリケーションで利用可能な形式に変換して、前記アプリケーションに提供することを特徴とするコア間通信方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、自動車用通信規格のSOME/IPを用いたデータ転送方法に関する。
【背景技術】
【0002】
近年はSOA(Service-oriented architecture)の概念が車載ネットワークにも取り入れられ、SOME/IPと呼ばれるプロトコルが使用されるようになった。このSOME/IPはEthernet(Ethernetは登録商標、以下同じ)に基づいて作成されたプロトコルであるため、通常はEthernetを経由してデータを転送する。SOME/IPを転送する際、Ethernet、IP、TCPと経由する各プロトコルでデータの誤りが検出され、データ転送の信頼性を保証している。
【0003】
SOME/IPメッセージをマルチコア上で動作する異なるOS間において転送する場合、Ethernetを使用して送ると、大容量データでは処理時間が長くなる。SOME/IPメッセージを共有メモリを介してコア間で転送する方法は確立していない。また、Ethernetを経由することで保証されていたデータ転送の信頼性の補償が困難である。
【0004】
EthernetではCRCと呼ばれるデータ誤り検出が採用されており、CRCによってデータ転送の信頼性を保証している。CRCはCANでも採用されており、フレームフォーマットにCRC用の領域が用意されている。そのため、これらのプロトコルはプロトコル自体にCRCが実装されている。一方、SOME/IPメッセージフォーマットはCRC等の誤り検出を行うための値が実装されておらず、SOME/IPメッセージ単体ではデータの信頼性の保証が困難である。
【0005】
本技術分野の背景技術として、以下の先行技術がある。特許文献1(国際公開2020/217202号)には、乗物のオンボードの通信ネットワークにおいて、SOME/IP通信プロトコルを用いて、サービスインスタンスの要求側エンティティ及び提供側エンティティの間でメッセージを伝送する。サービスインスタンスに関連付けられた通信を考慮して、要求側及び提供側の相互認証を行う。本ステップは、サービスインスタンスへのアクセスを認可する、要求側及び提供側の予め割り当てられた証明書の存在及び相互の有効性を検証することと、提供側によってサービスが提供されるセキュリティレベルが、要求側及び提供側においてサービスに予め割り当てられた最低のセキュリティレベル未満ではないことを検証することとを含む。証明書及びセキュリティレベルの検証に成功した場合、サービスインスタンスに関連付けられた少なくとも1つの通信メッセージを提供側から要求側に、及びその逆に伝送する。SOME/IP通信プロトコルを用いるメッセージ又はデータの伝送方法が記載されている。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
マルチコアのコア間通信では、大容量のデータを高速で転送できる方法が求められており、また、データ転送の信頼性の保証も重要である。前述したように、通常、SOME/IPメッセージはEthernetを経由して転送されるが、共有メモリを使用する方が大容量のデータを高速で転送できる。
【0008】
しかし、共有メモリを使用して、Ethernetを経由しないことにより、Ethernet、IP、TCP等のプロトコルにおけるCRC等のデータ誤り検出が実施されないため、データ転送の信頼性が保証されない。
【0009】
特許文献1は、SOME/IP通信プロトコルを用いる乗り物上におけるデータまたはメッセージの伝送の改良を開示しており、本発明で解決しようとしている、CANデータのSOME/IPメッセージへの変換や、SOME/IPメッセージを利用し、異なるOSのコア間通信を実現するものではなく、また、SOME/IPプロトコルの信頼性を高めるものでもない。
【0010】
また、CANで転送された受信データをコア間で転送する場合、受信側コアではアプリケーションでデータを使用可能にするサービス変換が必要となる。このような処理を行うS2S(signal to service)は、処理が遅いという問題がある。SOME/IPプロトコルを用いる場合は、このS2Sを使用する必要がなくなる。
【0011】
本発明は、共有メモリを使用したコア間通信で、データ転送の信頼性が保証しつつ、大容量のデータを高速で転送する方法の提供を目的とする。
【課題を解決するための手段】
【0012】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、電子制御装置であって、CAN通信でデータを受信する第1プロセッサコアと、アプリケーションが動作する第2プロセッサコアと、前記第1プロセッサコア及び前記第2プロセッサコアがアクセス可能な共有メモリとを備え、前記第1プロセッサコアは、CAN通信で受信したデータをSOME/IPメッセージに変換する第1SOME/IP変換部を有し、前記第1SOME/IP変換部で変換されたSOME/IPメッセージを前記共有メモリに格納し、前記第2プロセッサコアは、SOME/IPメッセージを前記アプリケーションで利用可能な形式に変換する第2SOME/IP変換部を有し、前記共有メモリに格納されたSOME/IPメッセージを取得し、前記第2SOME/IP変換部で前記取得したSOME/IPメッセージを前記アプリケーションで利用可能な形式に変換して、前記アプリケーションに提供することを特徴とする。
【発明の効果】
【0013】
本発明の一態様によれば、共有メモリを使用したコア間通信で、データ転送の信頼性が保証しつつ、大容量のデータを高速で転送できる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【0014】
【
図1】実施例1のマルチコアマイコンの構成を示す図である。
【
図3】実施例1の各コアで実行される処理を示すブロック図である。
【
図4】実施例1のCANとCAN FDのフレームフォーマットを示す図である。
【
図5】実施例1のSOME/IPのメッセージフォーマットを示す図である。
【
図6】実施例1のCANデータを使用して作成されたSOME/IPメッセージを示す図である。
【
図7】実施例2のSOME/IPメッセージに付加されるCRC値を示す図である。
【
図8】実施例2のCRCの演算処理を示す図である。
【
図9】実施例2のPayload CRC誤りを検出した場合にアプリに通知する処理のフローチャートである。
【
図10】実施例2のPayload CRC誤りを検出した場合に再送を要求する処理のフローチャートである。
【
図11】実施例3の第2SOME/IP変換部の周辺の構成を示す図である。
【
図12】実施例4の連続データに生じた欠損値の補完方法を示す図である。
【
図13】実施例4の連続データに生じた欠損を補完するデータ補完処理のフローチャートである。
【
図14】実施例4の離散データに生じた欠損値の補完方法を示す図である。
【
図15】実施例4の離散データに生じた欠損を補完するデータ補完処理のフローチャートである。
【
図16】実施例5の第2SOME/IP変換部の周辺の構成を示す図である。
【
図17】実施例5の第2SOME/IP変換部の周辺の別の構成を示す図である。
【発明を実施するための形態】
【0015】
<実施例1>
図1は、マルチコアマイコン1の構成を示す図である。本実施例のマルチコアマイコン1は、処理を実行する第1コア2、処理を実行する第2コア3、第1コアRAM4、第2コアRAM5、第1コア不揮発性メモリ6、第2不揮発性メモリ7、マルチコアマイコン外部とデータを送受信する通信コントローラ8、及び第1コア2と第2コア3とで参照できるRAMである共有メモリ9を有する。また、各構成要素は、内部バス10を通して接続される。
【0016】
マルチコアマイコン1は、二つ以上のコアが搭載されているマイクロコンピュータである。コアが一つのマイコンは、シングルコアマイコンと呼ばれる。マイコンのパフォーマンスを高める場合、マイコン内コアの動作周波数を高くして処理のスピードを上げる方法と、単に処理に用いるマイコン内のコアの数を増やす方法とがある。動作周波数を高くする場合は電力消費が大きくなるが、マルチコアマイコンでは低い動作周波数でもパフォーマンスが向上し消費電力を抑制できる。本実施例では2コアのマイコンを使用して説明する。
【0017】
第1コア2及び第2コア3は、実際に処理を実行するデバイスであり、様々なデバイスからデータを受け取り、様々な演算を行う。前述したとおり、コアの動作周波数を上げることでパフォーマンスが向上するが、消費電力が増加する。
【0018】
第1コアRAM4は、第1コア2が処理を実行する際に使用する作業用のメインメモリである。また、第2コアRAM5は、第2コア3が処理を実行する際に使用する作業用のメインメモリである。揮発性メモリデバイスで構成され、マイコンの電源が切れると使用していたデータが消去される。
【0019】
内部バスとは、マルチコアマイコン1の内部の回路をつなぐ伝送路である。
【0020】
マルチコアマイコン1は、車両に搭載される電子制御装置(ECU)に実装されている。ECUは、エンジン、パワーステアリング装置、制御ブレーキ装置などの車両搭載機器を制御する。
【0021】
図2は、ECU10の構成を示す図である。ECU10は、
図1で述べたマルチコアマイコン1の他に、CANとの通信を可能とするCANトランシーバ11やEthernet接続を可能とするLANポート12等を有する(Ethernetは登録商標、以下同じ)。CANトランシーバ11は、後述するCANバス15に接続される。他ECU16からCANバス15を経由してCANトランシーバ11が受け取る信号やLAN12からEthernetを経由してLANポート12が受け取る信号は、マルチコアマイコン1の通信コントローラ8に送られる。通信コントローラ8は、CAN経由の信号を扱うCANコントローラ13とEthernet経由の信号を扱うイーサスイッチ14等を有する。
【0022】
CANバス15は、CANプロトコルでデータを転送する伝送路であり、CAN HighとCAN Lowと呼ばれる2本の通信線で構成される。CANではこの2本の通信線に印加される電圧の差で0と1のCAN信号を送信する。このような形式によって、ノイズ耐性を向上できる。CANプロトコルの詳細は後述する。
【0023】
CANコントローラ13は、CANバス15で転送されるデータのうち、必要なデータは割り込みを発生させて受信し、不要なデータは無視するなどの機能を備えたモジュールである。
【0024】
イーサスイッチ14は、Ethernet Switchの略であり、LANポート12から受け取ったEthernetのデータの転送先を制御するモジュールである。イーサスイッチ14は、Ethernetで転送されるデータに含まれる送信元や宛先などの情報に基づいてデータの転送先を制御する。
【0025】
図3は、各コアで実行される処理を示すブロック図である。マルチコアマイコン1は、後述するCANデータを受信する受信部101を有する第1コア2と、第1コア2で受け取ったデータを利用する第2コア3と、二つのコア間2、3の間のデータの移動を可能とするための共有メモリ9を有する。本実施例では、第1コア2に搭載された受信部101が、他ECU16からCANデータを受信し、第1SOME/IP変換部102が、後述するCANの実データを取り出して、SOME/IPのメッセージフォーマットに従ったSOME/IPメッセージを作成し、共有メモリ9を介して、第2コア3に転送する。第2コア3では、第2SOME/IP変換部103が、サービス変換を行い、アプリケーションへのデータ転送を可能とする。
【0026】
共有メモリ9は、複数のコアのいずれからも参照できるようなRAM領域である。共有メモリ9を使用することで、外部の通信経路を経由せずに、データを異なるコアに転送できる。
【0027】
CANは、Controller Area Networkの略であり、車載ネットワークプロトコルのうち、現在最も普及しているプロトコルである。
【0028】
CANを経由して転送されるデータは、フレーム単位で定義されており、CANデータの1フレームにはCANを経由して転送されるフレームを識別するためのID等の様々な情報が含まれる。フレームに含まれるデータのうち、実際にアプリケーションなどで制御に使用されるデータは、データフィールドと呼ばれる領域に格納されており、0-8byteの範囲で転送される。CANのフレームフォーマットは後述する。この他にもCANを拡張したCAN FDと呼ばれるプロトコルもある。CAN FDは自動車の機能の増化に伴って開発された通信プロトコルで、CANより高速に多くのデータを転送できる。CAN FDプロトコルによって転送されるフレームのデータフィールドは、0-64byteの範囲でデータが格納される。CAN FDのフレームフォーマットは後述する。
【0029】
プロトコルとは、コンピュータ上でデータのやり取りをするために取り決められた、通信の形式や手順であり、取り決められたプロトコルに従うことによって、異なるメーカー同士の部品でも通信できる。
【0030】
SOME/IPは、後述するSOAという概念を車載ネットワークで実現するためにEthernetをベースとして作成されたプロトコルであり、後述するOSI参照モデルでは上位層に分類される。SOME/IPでは、車載プリケーションの機能や処理がサービス単位で定義され、これらのサービスを利用するときは、車載ネットワーク上からサービスを検索する。サービスを検索するECUをクライアント、サービス提供するECUをサーバーとすると、検索されたサービスを提供するサーバーは、サービスが提供可能であることをクライアントへ通知する。クライアントは、通知によってサービスを確認したら、データの送信をサーバーへ要求する。サーバーは、問題なければ、要求を承認し、周期的又は値が変更されるタイミングで、クライアントへデータを送信する。
【0031】
SOAは、Service Oriented Architectureの略であり、コンピュータシステムを構築する際の一つの考え方である。SOAでは、アプリケーションの機能をサービス単位で部品化し、アプリケーションの外部からサービスを利用できる状態にする。部品化されたサービスを組み合わせて、システムを構築し、実装できる。
【0032】
OSI参照モデルは、異なるネットワークアーキテクチャを統一するための概念である。OSI参照モデルでは7階層に分類されている。
7層:アプリケーション層
6層:プレゼンテーション層
5層:セッション層
4層:トランスポート層
3層:ネットワーク層
2層:データリンク層
1層:物理層
【0033】
上位層ほどソフトウェアによる設定が必要となり、下層ほどハードウェアに関する設定が必要となる。例えば、Ethernetでは、物理層はLANケーブル等を差し込む接続口であり。データリンク層はEthernetのフレームを受け取る層である。ネットワーク層とトランスポート層はEthernetに乗せられるTCPやIPである。このように細かく分類されているが、SOME/IPはセッション層からアプリケーション層を包含するプロトコルである。このように複数の層をまたぐプロトコルも存在し、例えばCANも物理層とデータリンク層をまたぐプロトコルである。
【0034】
図4は、CANとCAN FDのフレームフォーマットを示す図である。他のECUから受け取るCANのデータは、CANプロトコル(CAN FDを含む)のフォーマットで転送されるデータであり、このデータの中には、ID、コントロールフィールド、データフィールド201,202、CRC等のCANプロトコル特有の情報が含まれる。
【0035】
SOME/IPのメッセージフォーマットに変換して使用されるCANの実データは、CANデータのうちデータフィールドに格納されたデータ201a、211a、211b等である。CANとCAN FD共に、複数のデータを転送可能であり、両者はデータの最大値と通信速度が異なる。
【0036】
SOME/IPメッセージフォーマットは、SOME/IPプロトコルで使用できるデータの形式である、SOME/IPメッセージフォーマットに従って作成されたデータの纏まりをSOME/IPメッセージと定義する。以下、SOME/IPメッセージフォーマットを説明する。
【0037】
図5は、SOME/IPのメッセージフォーマットを示す図である。第1SOME/IP変換部113は、CANの実データに基づいて、SOME/IPメッセージを作成する処理を実行する。SOME/IPのメッセージフォーマットは、下記の情報を必要とする。
Service ID
Method ID
Length
Client ID
Session ID
Protocol Version
Interface Version
Message Type
Return Code
Payload
【0038】
それぞれの領域を説明する。
【0039】
Service IDは、後述するサービスの種類を示す。Method IDは、Methodの種類を示す。Service IDとMethod IDを纏めてMessage IDと呼ぶこともある。
【0040】
Lengthは、Client IDからPayloadまでのメッセージ長である。
【0041】
Client IDは、ECU内の呼び出し元を識別するための識別情報である。Session IDは、同一の送信者から転送されたメッセージを区別するための識別情報である。Client IDとSession IDを纏めてRequest IDと呼ぶこともある。
【0042】
Protocol Versionは、SOME/IPのプロトコルバージョンを示す。
【0043】
Interface Versionは、後述するサービスインターフェイスのメジャーバージョンを示す。Message Typeは、SOME/IPのメッセージのタイプを示す。
【0044】
Return Codeは、requestが正常に処理されたかを示す戻り値である。Payloadは、データである。
【0045】
ここで、サービスとは、各ECUが提供するアプリケーションであり、アプリケーション内に含まれる関数がMethodである。
【0046】
Methodは、SOME/IPを使用する際の一つの考え方であり、サービス内に含まれる関数を指す。具体的には、前述したSOME/IPプロトコルで説明した、サービスを要求するアプリケーションをクライアント、サービスと提供するアプリケーションをサーバーとしている。サービスは、1又は複数の関数の組み合わせで構成され、関数はMethodという単位で管理され、各MethodにはMethod IDが付与される。SOME/IPでは、どのサービスのどのMethod(関数)から取得したデータであるかをヘッダー情報に記載する。
【0047】
サービスインターフェイスは、サービスを持つ機能にアクセスするためのインターフェースである。SOME/IPでサービスを使用する場合、サービスインターフェイスを通してデータを取得する。
【0048】
前述したSOME/IPメッセージフォーマットのうちPayload以外の情報301をHeaderと呼び、CANの実データが格納されるPayload部分302を単にPayloadと呼ぶ。
【0049】
図6に、CANデータを使用して作成されたSOME/IPメッセージを示す。SOME/IP作成の段階ではアプリケーションへ向けたシリアライズは行われないため、実データをそのまま変数として格納できる。第1SOME/IP変換部では、CANデータに含まれるIDに基づいてヘッダーを作成し、
図4に示すCANの実データ201a、211a、211bが、SOME/IPメッセージフォーマットのPayload部分へ格納される。本実施例では、CANデータのIDによりSOME/IPのHeaderを作成しており、IDが異なるCANの実データは同一のSOME/IPパケットに纏めることはできない。CANデータのIDにより、SOME/IPメッセージを通して、アプリケーション側で受信するCANデータの種類を判別できる。
【0050】
SOME/IPは、通常、Ethernetを経由して転送されるデータの上位プロトコルとなっている。本実施例では、共有メモリ9を介してSOME/IPメッセージを転送することで、大容量データのコア間通信において、Ethernet通信経由の場合に比べ、高速で通信できる。また、第1コア側でSOME/IPに変換することにより、言語環境が異なるコア間においても、二つのコアでデータを利用可能となり、データ利用における利便性を向上できる。
【0051】
<実施例2>
本実施例において、作成したSOME/IPメッセージと合わせて、CRCを計算し共有メモリ9に格納する。CRCは、巡回冗長検査とも呼び、データの誤り検出符号の一つである。CANのフレームや、Ethernetのフレームでも、CRCは用いられており、CANやEthernetのフレームにはCRC値が含まれている。フレームに含まれる情報に基づいてCRC値を算出し、付加されたCRC値が受信時に検査される。しかし、SOME/IPのメッセージフォーマットにはCRCフィールドが定義されていないので、SOME/IP単体での誤り検出は不可能である。前述したようにSOME/IPは通常Ethernetで送られることを前提として作成されたプロトコルであり、SOME/IPがアプリに届くまでに経由する、Ethernet、IP、TCP等の各プロトコルで誤り検出が実施される。そのため、作成したSOME/IPメッセージを共有メモリ9を介して転送する場合、同様の誤り検出を実施することで、データの信頼性を保証できる。そこで、本実施例では、SOME/IPメッセージにCRC値が含まれないため(CRC値を含めた場合、SOME/IPのメッセージフォーマットと異なるため受信不可となる)、作成したSOME/IPメッセージと別に算出したCRC値を共有メモリ9へ格納することとした。
【0052】
図7は、SOME/IPメッセージに付加されるCRC値を示す図である。本実施例では、Header301に基づいて算出されるHeader CRCと、Payload302に基づいて算出されるPayload CRCの二つのCRCをSOME/IPメッセージに付加する。例えば、作成されたSOME/IPメッセージの後続するアドレスにCRCを格納することによって、CRCとSOME/IPメッセージを関連付けて、CRCをSOME/IPメッセージに付加する。実施例では、二つのCRCのそれぞれに4byteを使用している。これにより、転送されたデータに誤りがあるかを判定でき、HeaderとPayloadのいずれに誤りがあるかを区分けできる。
【0053】
図8を参照して、本実施例におけるCRCの演算処理を説明する。
【0054】
ステップ401:第1コア2がCANのデータを受信後、CANフレームに含まれるIDに基づいて、SOME/IPのメッセージフォーマット合わせてデータを変換し、ヘッダーなどの情報を作成して、SOME/IPメッセージを作成する。
【0055】
ステップ402:ステップ401で作成されたSOME/IPメッセージのうち、先頭16byteのHeaderの情報に基づいてCRCを算出する。本実施例ではHeader CRCは4byteの固定長とする。
【0056】
ステップ403:ステップ401で作成されたSOME/IPメッセージのうち、先頭16byteより後のPayloadの情報に基づいてCRCを算出する。本実施例ではPayload CRCはPayloadのデータ長により変化することなく4byteの固定長とする。
【0057】
ステップ404:作成されたSOME/IPメッセージを共有メモリに格納し、当該SOME/IPメッセージの後ろに続けて4byteずつHeader CRCとPayload CRCの順番で格納する。
【0058】
Header CRCによって、SOME/IP変換部103で読み込む前に不正データを検出できる。また、Payload CRCによって、データがアプリで使用可能な正しいデータかを判別できる。
【0059】
Payload CRCによって、データに誤りがあると判定される場合、二つの処理(
図9、
図10)が可能である。PayloadのCRCで誤りを検出した際の対応について説明する。
【0060】
図9は、Payload CRC誤りを検出した場合にアプリに通知する処理のフローチャートである。
【0061】
ステップ501:まず、第1コア側の処理完了を検出する。本実施例で用いるマイコンには、処理結果が共有メモリ9に格納された後に格納完了を通知する割り込み処理機能があるため、この割り込みによって処理完了を検出する。処理完了検出の実装方法は様々な方法を採用できる。
【0062】
ステップ502:ステップ501において第1コア側の処理完了を検出したら、共有メモリ9からSOME/IPデータとCRCデータを取り出す。データは、先頭アドレスから16byteがSOME/IPのHeaderとなっている。Payloadは可変長データであるため、Headerに含まれるLengthに記録されたデータに基づいてPayloadの長さを計算する。また、本実施例において、CRCは、4byteの固定長のHeader CRCと4byteの固定長のPayload CRCがPayloadの直後に格納されているため、Payloadの直後の8byteをCRCとして取り出して、4byteのHeader CRCと4byteのPayload CRCに分離する。
【0063】
ステップ503:ステップ502により取り出されたSOME/IPとHeader CRCを用いてCRCチェックを行う。SOME/IPメッセージのHeaderは先頭16byteの固定長であり、この16byteのデータに基づいてCRCを計算する。CRCを計算したら、共有メモリからSOME/IPメッセージと同時に取り出したHeader CRCと値を比較し、両者の値が一致すれば「1」、一致しなければ「0」のように、結果を判定するためのフラグを格納する。
【0064】
ステップ504:ステップ503の結果が一致を示す「1」である場合、ステップ506へ遷移する。ステップ503の結果が不一致を示す「0」である場合、ステップ505へ遷移する。
【0065】
ステップ505:ステップ504においてSOME/IPのHeaderに異常があると判定されたので、SOME/IPのデータを正常に読み込めないため、受け取ったSOME/IPメッセージを破棄する。破棄の後、特に処理を行うことなく処理を終了する。
【0066】
ステップ506:ステップ504においてSOME/IPのHeaderに異常がないと判定されたので、SOME/IPのPayloadのCRCチェックを行う。Header情報に含まれるLengthに記録されたデータに基づいてSOME/IPメッセージのPayload部分を読み込み、読み込んだPayloadに基づいてCRCを計算する。CRCを計算したら、共有メモリからSOME/IPメッセージと同時に取り出したPayload CRCと比較し、両者の値が一致すれば「1」、一致しなければ「0」のように、結果を判定するためのフラグを格納する。
【0067】
ステップ507:ステップ506の結果が一致を示す「1」である場合、ステップ509へ遷移する。ステップ506の結果が不一致を示す「0」である場合、ステップ508へ遷移する。
【0068】
ステップ508:ステップ507でPayloadに異常があると判定された場合、SOME/IPのPayload部分に利用不可というステータスを上書きする。Payloadの長さはこの時点で決まっているため、利用不可のステータスとして、エラーが分かる数値をPayloadのデータ長に書き込む。なお、エラーが分かる数値は、Payloadの一部(例えば、先頭から所定長)に書き込んでもよい。
【0069】
ステップ509:ステップ502で取り出したSOME/IPのHeaderと、ステップ507の判定結果によってステップ506で読み込んだPayload又はステップ508でエラーが分かる数値が上書きされたPayloadをアプリケーションへ転送する。アプリケーションへ転送されるデータは、SOME/IPのHeaderとPayloadが組み合わされたSOME/IPメッセージのみで、CRCは転送不要のため破棄する。
【0070】
本実施例によってPayloadのデータに異常がある場合、アプリケーションへデータが利用不可となっていることを通知できる。
【0071】
また、PayloadのCRCに異常がある場合、再送を要求してもよい。
【0072】
図10は、Payload CRC誤りを検出した場合に再送を要求する処理のフローチャートである。
【0073】
図10に示す処理において、ステップ501~ステップ507及びステップ509は、
図9に示す処理と同じである。
【0074】
ステップ601:ステップ507でPayloadに異常があると判定された場合、第1コア側へ再送を要求する。再送要求の実装方法は様々な方法を採用できる。再送要求の後、アプリケーションへデータを転送することなく処理を終了する。
【0075】
図10に示す処理では、Payloadに異常がある場合、第1コア側へデータの再送を要求できる。
【0076】
また、HeaderとPayloadの二つのCRCを付加することで、SOME/IPメッセージの信頼性を高め、さらに、異常がある場合にSOME/IPメッセージのどの部分に誤りがあるかを検出できるようになり、フレームの破棄、アプリへの利用不可の通知、再送要求などの、異常の原因に適する処理を実行できる。
【0077】
<実施例3>
図11は、実施例3の第2コア3に含まれる第2SOME/IP変換部103の周辺の構成を示す図である。
【0078】
実施例1及び実施例2において、第2コア3の第2SOME/IP変換部103は、予め実装されているSOME/IPの処理関数によって構成でき、本実施例のために新たに作成される必要はない。第2SOEM/IP変換部103の実装方法はコアの仕様によって変わるが、入力と出力はSOME/IPの規格に従っている。そのため、共有メモリ9からCRC演算部701を通して転送されるSOME/IPメッセージと、通常のEthernet受信部702を経由して転送されるSOME/IPメッセージは、必要とするインターフェースが同一であり、同一の第2SOME/IP変換部103で処理できる。
【0079】
Ethernet経由で転送されるSOME/IPメッセージは、EthernetフレームのPayload部分に含まれるSOME/IPメッセージであり、第2SOME/IP変換部103で受信する際にEthernet、IP、TCP等のプロトコルで使用されるヘッダー情報が削除された状態である。また、インターフェースが同一とは、共有メモリ9から受信するSOME/IPメッセージと、Ethernetから受信するSOME/IPメッセージで扱いが同じであり、第2SOME/IP変換部103で使用される引数や出力方法は同一であることを意味する。
【0080】
このような構成にすることで、構成の複雑化を抑制できる。構成の複雑化の抑制によって、ソフトウェアの保守性が向上し、不具合発生時に容易にデバックできる。
【0081】
<実施例4>
本実施例において、第1コア2が受信するCANのデータは必ずしも正常な値を受信できるとは限らない。データ送信元で異常があった場合に欠損値が生じることがある。CANの規格に、欠損値がある場合に再送する処理は設けられていない。そのため欠損値が生じた場合、アプリケーションで正しく処理できない可能性がある。そのため、そのようなケースに対応するため、第1SOME/IP変換部102にデータを補完する機能を持たせる。欠損値は、CANのフレームで転送されるデータに基づいて検出できる。欠損値を検出した場合、アプリケーションで対応できるが、本実施例では、アプリケーションより手前で、欠損値に対する処理を実行する。
【0082】
図12は、連続データに生じた欠損値の補完方法を示す図である。
【0083】
実際に受信した連続値801a、801b、801c、801dにおいて、値801bと値801cの間の3番目に値の欠損が生じた場合、アプリケーションの仕様に合わせたデータ802(例えば、アプリケーションの動作に影響しないように前後値から計算される値802)で欠損値を補完する。
【0084】
図13は、連続データに生じた欠損を補完するデータ補完処理のフローチャートである。
【0085】
ステップ901:CANのデータを受信する。CANのデータを受信するECUのCANのIDを登録しておき、指定のIDを持つCANの信号を到来したら、CANのデータを受信する。
【0086】
ステップ902:受信したCANのデータのIDやデータフィールドを確認し、データの種類や、欠損値の有無を判定する。CANのフレームのデータフィールドには、複数のデータが含まれていることがあり、各データの区切りはバイトポジションなどで、静的に定義される。バイトポジションとは、CANのフレーム内のデータフィールドに含まれるデータの始まりの位置を示すものであり、CANで転送されるフレームの内容は静的に定義されている。
【0087】
ステップ903:受信したCANのデータが値の欠損を示す場合、ステップ904へ進む。受信したCANのデータが値の欠損がないことを示す場合、ステップ905へ進む。
【0088】
ステップ904:データが欠損している場合、受信したCANのデータのIDに基づいて連続値か離散値かを判定し、連続値であればCANのデータフィールドの値を、前後値から計算した値(例えば、前回値と次回値との平均値、近似関数を用いて前回値と次回値から計算される値)で書き換え、ステップ905へ進む
【0089】
ステップ905:ステップ903又はステップ904から受け取ったデータに基づいてSOME/IPメッセージを作成する。受け取ったCANのデータから、IDに基づいてヘッダーを作成し、データフィールドの値をPayloadへ格納する。受け取るデータに応じて処理が変わらない。
【0090】
このように実装することで、受信したデータが、物理値のような連続データであるときに、欠損したデータを補完するデータの付与が可能となる。
【0091】
また、転送されるデータが離散値の場合についても考慮が必要である。
【0092】
図14は、離散データに生じた欠損値の補完方法を示す図である。
【0093】
実際に受信した離散値1001a、1001b、1001c、1001dにおいて、値1001bと値1001cの間の3番目に値の欠損が生じた場合、アプリケーションの仕様に合わせたデータ1002(例えば、アプリケーションの動作に影響しないように前回値を複製したデータ1002)で欠損値を補完する。
【0094】
図15は、離散データに生じた欠損を補完するデータ補完処理のフローチャートである。
【0095】
図15に示す処理において、ステップ901~ステップ903及びステップ905は、
図13に示す処理と同じである。
【0096】
ステップ1101:データが欠損している場合、受信したCANのデータのIDに基づいて連続値か離散値かを判定し、離散値であればCANのデータフィールドの値を前回値を複製したデータで書き換え、ステップ905へ進む。
【0097】
前述したいずれの補完方法も、アプリに影響が生じない範囲で実装されるため、必ずしも有効な補完が可能とは限らない。しかし、これにより、アプリケーション側で特別な処理を実行することなく、通常のデータとして処理が可能となる。
【0098】
<実施例5>
通常、SOME/IPは車載ネットワーク上のサービスを検索し使用するものであり、初めに受信要求が必要であるため、一方的なデータ送信ができない。本実施例では、受信要求と関係なく、受信したCANデータから作成したSOME/IPメッセージを第2コア3側へ送るための受信機構が必要となる。本実施例では後述する二つの方法を提案する。
【0099】
図16は、実施例5の第2コア3に含まれる第2SOME/IP変換部103の周辺の構成を示す図である。
【0100】
初めに、CRC演算部701は、SOME/IPのメッセージとCRCデータを共有メモリ9から読み出す。取り出したデータに基づいて、前述の実施例に記載したHeader CRCとPayload CRCを用いて誤り検査を行う。CRCによってデータに異常がないことを確認した後、SOME/IPメッセージをバッファ1201に格納する。
【0101】
次に、第2SOME/IP変換部103は、アプリケーション1202から受信要求1203を受け取ったら、バッファ1201にデータが格納されているかを判定する。データが格納されていると判定されると、第2SOME/IP変換部103がバッファ1201に格納されたデータをデシリアライズして、アプリケーション1202へ転送する。
【0102】
本実施例では、共有メモリ9から読み出したSOME/IPメッセージを、直ぐにアプリケーション1201へ転送できないため、一時的にバッファ1201に格納するSOME/IPメッセージ受信機構を設けた。
【0103】
バッファ1201は、データを一時的に保存する領域であり、前後の処理部の処理速度の差を吸収する。バッファ1201にはサイズが定義される。サイズを定義するために、バッファ1201が取り扱うデータ長を把握する必要がある。静的に定義する場合は、バッファのサイズは一つのSOME/IPメッセージのサイズの最大値以上にするとよい。本実施例では、SOME/IPメッセージのサイズの最大値はEthernetで転送可能なデータ量の最大値から、Ethernet、IP、TCPのヘッダーに必要なデータ量を減じた、1460byteを最大値とするとよい。
【0104】
本実施例でバッファ1201に格納されるSOME/IPメッセージは可変長データであるため、動的にバッファ用のメモリを確保してもよい。可変長データを格納するメモリの使用量を節約できるというメリットがある。
【0105】
バッファ1201用の記憶領域の確保は、様々な方法で実装できる。
【0106】
また、バッファ1201には、キューやリングバッファなど様々な形態がある。キューは、FIFOとも呼ばれ、先に登録されたデータが先に取り出される構造のバッファである。順序性を伴ってデータが格納されるため、後から入力されたデータが先に処理されない特徴がある。リングバッファは円環状バッファとも呼ばれ、循環構造を取っている。先頭から順番に読み出すとと、末尾の次が次回のアクセスする先頭となる構造のバッファである。リングバッファでは最も古い内容から更新される処理となる。
【0107】
デシリアライズとは、バイト列にシリアルに並んだデータを、アプリケーションで利用できる形式の並列データを変換する処理である。逆に、シリアライズ処理によって、アプリケーションから受け取る並列データをバイト列に並んだシリアルデータに変換できる。
【0108】
バイト列とは、特定の形式が与えられていないデータの並びであり、このままではアプリケーションが使用できない。デシリアライズによって、バイト列からデータ構造を作成し、アプリケーションで扱いやすいデータ形式に変換する。
【0109】
このようにバッファ1201を設けることで、アプリケーション側が任意のタイミングでデータを取得できる。
【0110】
図17は、実施例5の第2コア3に含まれる第2SOME/IP変換部103の周辺の別の構成を示す図である。
図17に示す態様では、アプリケーション1202内にアプリケーションバッファ1301が設けられる。
【0111】
はじめに、CRC演算部701は、SOME/IPメッセージとCRCデータを共有メモリ9から読み出す。取り出したデータに基づいて、前述の実施例に記載したHeader CRCとPayload CRCを用いて誤り検査を行う。CRCによってデータに異常がないことを確認した後、SOME/IPメッセージを第2SOME/IP変換部103へ送る。
【0112】
次に、第2SOME/IP変換部103は、データをアプリケーションで使用できる形式に変換した後、アプリケーション1202内のアプリケーションバッファ1301にデータを格納する。アプリケーション1202は所定のタイミング(例えば、所定の時間間隔)でアプリケーションバッファ1301にデータが格納されているかを判定する。データが格納されていると判定されると、データ受信機能によってアプリケーション1202を受信待機状態にして、アプリケーションバッファ1301からデータを受け取る。
【0113】
アプリケーション1202が管理する記憶領域であるアプリケーションバッファ1301を設ける構成によって、余計なバッファを設けることなく、データを転送でき、リソースを節約できる。
【0114】
以上に説明したように、本発明の実施例によると、SOME/IPメッセージを用いてコア間通信する際に算出されたCRCをSOME/IPと同時に共有メモリを介して転送するので、データ転送の信頼性が保証しつつ、大容量のデータを高速で転送できる。
【0115】
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加・削除・置換をしてもよい。
【0116】
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
【0117】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記憶装置、又は、ICカード、SDカード、DVD等の記録媒体に格納することができる。
【0118】
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。
【符号の説明】
【0119】
1 マルチコアマイコン
2 第1コア
3 第2コア
4 第1コアRAM
5 第2コアRAM
6 第1コア不揮発性メモリ
7 第2コア不揮発性メモリ
8 通信コントローラ
9 共有メモリ
10 内部バス
11 CANトランシーバ
12 LAN
13 CANコントローラ
14 イーサネットスイッチ
15 CANバス
16 他ECU
101 受信部
102 第1SOME/IP変換部
103 第2SOME/IP変換部
201 CANデータフィールド
201a CAN実データ
211 CAN FDデータフィールド
211a-b CAN FD実データ
301 SOME/IPヘッダー情報
302 SOME/IP Payload
701 CRC演算部
702 Ethernet受信部
1201 バッファ
1202 アプリケーション
1203 受信要求
1301 アプリケーションバッファ