Comments
Transcript
PSoC 3® and PSoC 5LP - Getting Started with CAN
AN52701 PSoC® 3 および PSoC 5LP – コントローラー エリア ネットワーク (CAN) 入門 著者: Ranjith M 関連プロジェクト: あり 関連部品ファミリ: 全ての CAN 内蔵の PSoC 3 と PSoC 5LP 部品 ソフトウェア バージョン: PSoC ® Creator 2.1 SP1 関連アプリケーションノート: なし 本アプリケーション ノートについて、ご質問がある場合または手助けが必要な場合は、[email protected] より 著者までお問い合わせください。 本アプリケーション ノートでは、コントローラー エリア ネットワーク (CAN) の基本的な概念を紹介し、PSoC® 3 と PSoC 5LP を 使用して CAN バス通信を実装する方法をデモします。 目次 はじめに はじめに ............................................................................. 1 コントローラー エリア ネットワーク (CAN) は、1980 年代初頭 にロバート ボッシュ社により開発されたシリアル通信プロトコ ルです。このプロトコルは、最初は中央制御なしでサブシステ ム間の通信のために車載用途向けに開発されました。CAN は組み込みシステム (CANOpen) とファクトリー オートメーション (DeviceNet) 等の分野でも採用されています。CAN は 2003 年に ISO により標準化されました (ISO 11898-1:2003) 。 CAN の用途 .................................................................. 2 PSoC の用途 ................................................................ 2 CAN の基本 ....................................................................... 2 物理層........................................................................... 2 転送層........................................................................... 2 バス アービトレーション .................................................. 3 CAN におけるエラー管理 ............................................... 5 PSoC における CAN .......................................................... 5 ハードウェア .................................................................. 5 CAN コンポーネント ....................................................... 7 PSoC Creator のプロジェクト ......................................... 7 ファームウェア.............................................................. 13 ハードウェアの実装 ........................................................... 15 CAN アナライザの操作 ................................................ 16 サンプル プロジェクト ........................................................ 16 プロジェクト 1 と 2: シンプレックス通信 .......................... 16 プロジェクト 3 と 4: CAN の RTR 機能........................... 18 本アプリケーション ノートでは、CAN プロトコールの基本的な 概念を紹介し、PSoC® 3 と PSoC 5LP を使用して CAN バス 通信を実装する方法をデモします。本アプリケーション ノート には 4 つの例が含まれています。例 1 と 2 は、2 つの PSoC 間のシンプレックス通信を示します。例 3 と 4 は一緒に、CAN の遠隔送信要求 (RTR) 機能をデモします。 本アプリケーション ノートは、ユーザーが PSoC Creator を使った PSoC 3 または PSoC 5LP のアプリケーションの開発に精通 していることを前提としています。PSoC 3 または PSoC 5LP を初めて使用する場合、「AN54181 - Getting Started with PSoC 3」および「AN77759 - Getting Started with PSoC 5LP」にて概要を参照してください。PSoC Creator に慣れてい ない場合、PSoC Creator のホームページを参照してください。 まとめ ............................................................................... 20 付録 A .............................................................................. 21 付録 B .............................................................................. 22 ワールドワイドな販売と設計サポート ................................. 24 www.cypress.com 文書番号: 001-96361 Rev. ** 1 ® PSoC 3 および PSoC 5LP - CAN 入門 図 1.CAN ネットワークに接続されたノード CAN ネットワークは、8 バイトを超えないデータ長のショート メッセージおよび最大 1Mbps のビット レート向けに設計され ています。CAN プロトコルは、他のシリアル通信プロトコルに 比べて以下の利点があります。 CAN はメッセージ ベースのプロトコルです。 CAN ネット ワークのノードは特定のアドレスが割り当てられません。 これにより、他の部分に影響を与えずにネットワークに ノードを柔軟に追加/削除することができます。その上、 いずれかのノードに障害が発生した場合、他のノードは続 けて正しく動作して通信します。 CAN メッセージは優先順位を付けることができます。 CAN ネットワークは、システム全体のデータの一貫性を 持っています。つまり、メッセージがどれかの受信ノードで 破損した場合、そのメッセージはいかなる他の受信ノード でも受容されません。 CAN は、信頼性のあるトラフィックとデータの整合性を保 証するためにエラー チェックの 5 つのレベルがあります。 CANH 120Ω 120Ω CAN の用途 CANL CAN Node A CAN Node B CAN Node C CAN バスは、図 2 に示すように差動信号を運びます。バスの 両線がほぼ同じ電圧 (通常は 2.5V) であると、「1」が表されま す。線間の電圧差が 1.5V~3V であると、「0」が表されます。 「1」はリセッシブ ビット (劣性ビット) と呼ばれ、「0」はドミナント ビット (優性ビット) と呼ばれます。 図 2. CAN バス電圧 1 Bit Pattern 0 V 破損したメッセージはバスが再びアイドル状態になるとす ぐに自動的に再送信されます。 CAN Bus Voltages 3.6 CANH 2.5 PSoC の用途 PSoC 3 と PSoC 5LP は、単一のチップ上で CAN 機能を、 コンフィギュレーション可能なアナログ、プログラマブルなデジ タ ル 、 メ モ リ 、 お よ び 中 央 処 理 装 置 と 統 合 し ま す 。 PSoC Creator は、一般的なタスクを抽象化するためのアプリケー ション プログラミング インターフェース (API) を統合しています。 また、CAN コンポーネントを含む全ての PSoC Creator コン ポーネントは、C コードを書くよりも、GUI を使用して簡単に設 定することができます。CAN コンポーネントのシステム レベル の用途については、「AN70630 - Event Data Recorder with Controller Area Network using PSoC 3 and nvSRAM」アプ リケーション ノートを参照してください。 CAN の基本 本節では、CAN プロトコルの基本を説明します。プロトコルの 詳細は、CAN 仕様で詳しく説明しています。CAN に精通し、 CAN を PSoC 3 と PSoC 5LP に実装する方法を理解したい のであれば、「PSoC における CAN」節を参照してください。 物理層 図 1 は、デバイスがどのように CAN バスに接続するかを示し ます。CAN バスは、CANH と CANL の 2 つの物理的回線で 構成されています。CAN バスは、一般的に各端に 120Ω 抵抗 で終端されています。 www.cypress.com 1.4 RECESSIVE 0 CANL DOMINANT RECESSIVE CAN プロトコルによると、リセッシブ ビットとドミナント ビットが 2 つの異なるノードにより同時に CAN バスに送信された場合、 バスがドミナント ビットを持つはずです。これは、ワイヤード AND アナロジーに類似しています: 全てのノードがリセッシブ ビットを駆動していない限り、バスはレセッシブ ビットを持ちま せん。アイドル状態にある間、バスはリセッシブ ビットを持ちま す。 転送層 CAN バスがアイドル状態にある時、どのノードでもメッセージ の送信を開始することができます。メッセージは、フレームと呼 ばれる固定フォーマットでバスを介して送信されます。CAN は 以下の 4 つのフレーム タイプを定義します。 データ フレーム: トランスミッタからレシーバへデータを伝送 エラー フレーム: バス上のエラーを検出した時に任意の装 置により送信 オーバーロード フレーム: 前後のデータまたはリモート フ レームの間に余分な遅延を提供するために使用 リモート フレーム: データ フレームの送信を要求するために CAN ノードにより送信 これらのフレームのフォーマットの詳細については、付録 A を 参照してください。 文書番号: 001-96361 Rev. ** 2 ® PSoC 3 および PSoC 5LP - CAN 入門 データ フレームは、図 3 に示すように 7 フィールドで構成されています。 図 3.CAN データ フレーム Data Frame 11-bit identifier R T R I D E R0 Data Length Count Arbitration Field Control Field 0 to 8 Bytes Data Field CRC Field Start of Frame ACK Field アービトレーション フィールド: データ フレームのアービトレー ション フィールドは、識別子と遠隔送信要求 (RTR) ビットとい う 2 つの部分から構成されています。 識別子は、データ フレームで転送されるデータの意味を記述 するために使用されます。バス上の各ノードは、識別子を確認 し、メッセージを受容するかどうかを決定します。 識別子フィールドの長さに基づき、CAN メッセージは標準メッ セージと拡張メッセージという 2 種が定義されています。 標準 CAN メッセージには 11 ビットの識別子があり、拡張 CAN メッセージには 29 ビットの識別子があります。したがって、 標準 CAN データ フレームは 211 のメッセージ タイプをサポー 29 トでき、拡張 CAN データフ レームは 2 のメッセージ タイプを サポートできます。 RTR ビットは、特定のフレームがデータ フレームかリモート フ レームであるかを示します。RTR ビットは、データ フレームで は「ドミナント」に、リモート フレームでは「リセッシブ」に設定さ れます。 コントロール フィールド: データ フレームのコントロール フィー ルドは、データ フィールド内のデータ バイト数を定義します。 コントロール フィールドは 6 ビット長で、その中の 4 ビットが データ長のためで、2 ビットが将来の拡張のために予約されて います。 www.cypress.com End of Frame データ フィールド: データ フィールドは、通信するためのデータ を含みます。 CRC フィールド: 巡回冗長検査 (CRC) フィールドはエラー チ ェックのためです。このフィールドは、受信したフレームにエ ラーがあるかどうかを判定するためのビット シーケンスを含 んでいます。ACK フィールドは、フレームが正しく受信された ことを確認するために受信ノードにより使用されます。 レシーバとして動作するノードは、そのソースからの特定のメッ セージの送信を要求することができます。これは、リモート フ レームを利用して実現できます。リモート フレームはデータ フィールドを持たないことを除き、データ フレームに似ていま す。 バス アービトレーション 複数のノードが同時に送信しようとした場合、バス アービトレー ションが図 4 に示すように識別子ビットを使用して行われます。 バス上のビットを送信した後、各ノードは、前述したドミナント ビットの特性を利用してバスの状態が送信されたビットと同じ かどうかを確認します。同じ場合、ノードは次のビットを送信し ます。異なっている場合、ノードは送信を停止し、バス上のメッ セージの受信を開始します。これは「listen only」(リッスン オン リー) モードと呼ばれます。 文書番号: 001-96361 Rev. ** 3 ® PSoC 3 および PSoC 5LP - CAN 入門 図 4.CAN でのバス アービトレーション 10 9 8 Node A Node B 7 6 5 4 3 2 1 0 S O F R T R S O F Listen Only Node C S O F Bus State S O F Control Data Listen Only R T R Control Data ノードが各ビットを送信した後にバスをリードバックするため、衝突を検出できるようにするために、ビット持続時間はバスの最大伝播遅 延よりも大きくなければなりません。したがって、送信されたビットは、伝播遅延を補正するために遅延後にリードバックされます。バス がリードバックされた瞬間は、図 5 に示すように「サンプル ポイント」と呼ばれます。 単一ビットを送信するのに要する時間は「ビット時間」と呼ばれます。CAN 仕様では、ビット時間は「タイム クォンタム」 (TQ) で表現され ます。タイム クォンタムは、図 5 に示すように発振子の周期から派生する時間の固定単位です。CAN クロック周波数を得るために、発 振周波数がボー レート プリスケーラ (BRP) と呼ばれる係数で分周されます。 図 5. 発振子からビット時間の派生 Oscillator Baud Rate Prescaler (BRP), user definable CAN Clock 1 Bit Time 10 - 20 TQ, user definable CAN Bit Period Sync-Seg (fixed) 1 TQ TSEG2 N2 TQ, user definable TSEG1 N1 TQ, user definable Sample Point 同期セグメント (最初の TQ にある) の開始時に、トランスミッタはバス上にビットを駆動し始めます。トランスミッタはビット時間を通じて バスを駆動し続け、定めた時間後、衝突検出のためにバスをサンプリングします。この時間は、パラメータ TSEG1 と TSEG2 を設定す ることで確定されます。8 ページの図 12 を参照してください。一般に、サンプル ポイントはビット時間の 60%~80%です。 www.cypress.com 文書番号: 001-96361 Rev. ** 4 ® PSoC 3 および PSoC 5LP - CAN 入門 CAN におけるエラー管理 CAN ノードは、以下の 5 つのエラー タイプを検出して処理します。 ビット エラー: ビット エラーは、トランスミッタが送信されたビ ットとバス上のビットが同じでないことを発見すると、トランス ミッタにより検出されます。 ノードは、送信と受信エラーのためにエラー カウンターを維持 し、対応するエラーを検出した後にインクリメントされるエラー を受け取ります。エラー カウンターの値によって CAN モジュー ルは 3 つの異なる状態のいずれかになります。 エラー アクティブ状態: 送信または受信エラー カウンター の値が 127 以下の場合、ノードは「エラー アクティブ」状 態になります。エラー アクティブ状態のノードは、通常の バス通信を行うことができます。 フォーム エラー: フォーム エラーはメッセージの固定形式 に偏差がある時に検出されます。8 バイトを超えたデータ 長カウント (DLC) もフォーム エラーと見なされます。 スタッフ エラー: トランスミッタはビット ストリーム内で同じ 値の 5 つの連続ビットを検出すると、自動的にストリーム に相補ビットを挿入します。これはビット スタッフィングと呼 ばれています。スタッフ エラーは、同じ値の 6 つの連続 ビットが検出されると検出されます。 エラー パッシブ状態: 送信または受信エラー カウンター の値が 128 以上の場合、ノードは「エラー パッシブ」状態 になります。エラー パッシブ状態のノードは、通常のバス 通信を行うことができます。 CRC エラー: CRC エラーは、フレームの CRC フィールド により示される値がフレームの予想された CRC 値と一致 しない時に検出されます。 バス オフ状態: 送信エラー カウンターが 256 以上の場合、 ノードは「バス オフ」状態になります。バス オフ状態のノー ドはバス通信を行いません。バスには影響を与えません。 PSoC における CAN アクノリッジ エラー: 確認応答 (「ドミナント」ビット) がフレー ムのアクノリッジ フィールド中に得られない場合、アクノリッ ジ エラーはトランスミッタにより検出されます。 ビット エラーとアクノリッジ エラーはトランスミッタにより検出さ れ、スタッフ エラー、CRC エラー、フォーム エラーはレシーバ により検出されます。メッセージがこれらのエラー検出方法の いずれかに失敗した場合、そのメッセージは受容されず、受信 ノードがエラー フレームを生成します。その後、受信ノードは メッセージが正常に受信されるまでメッセージを再送信します。 障害のあるノードが連続してエラー フレームを再送信すること でバスをハングアップした場合、エラーの数がエラー上限数に 達した後、そのノードのトランスミッタ機能が削除されます。各 www.cypress.com ハードウェア 6 ページの図 6 に示されている PSoC 3 と PSoC 5LP の CAN ブロックは CAN 2.0a と 2.0b 規格に準拠しています。た だし、出力電圧のレベル シフトを行い、CAN プロトコルと互換 性を持たせるために外部トランシーバが必要です。NXP 製の TJA1050 または TI 製の SN65HVD1050-EP を外部トラン シーバとして使用できます。これらのデバイスは、2 ページの 図 2 に示すようにビット パターンとバス電圧間を変換します。 本アプリケーション ノートでは、サイプレス キット CY8CKIT-017 は 6 ページの図 7 に示すように TJA1050 を外部トランシーバ として使用しています。 文書番号: 001-96361 Rev. ** 5 ® PSoC 3 および PSoC 5LP - CAN 入門 図 6. CAN ブロック図 Memory Buffer (SRAM) CAN Module Memory Arbiter Receive Message Handler Transmit Message Handler To CPU/PHUB Advanced Peripheral Bus (APB) Coupler CAN Bus CAN Framer Interrupt Controller Status and Configuration Control and Command 図 7. CAN ネットワークの実装用のハードウェア接続 5V 5 V CY8C3866AXI PSoC 3 VDD VDD CY8CKIT-017 TX CY8CKIT-017 C_TX CAN_H RX C_RX Tx_En C_EN CAN_L C_TX TX C_RX RX C_EN Tx_En CAN_H CAN_L VSS VSS www.cypress.com CY8C3866AXI PSoC 3 文書番号: 001-96361 Rev. ** 6 ® PSoC 3 および PSoC 5LP - CAN 入門 PSoC Creator のプロジェクト CAN コンポーネント 図 8 には、CAN コンポーネントがどのように PSoC Creator 回路図上に表示されるかを示します。 Basic CAN をデモするためのプロジェクトをビルドするには、 次の手順を実行してください。 1. PSoC Creator を起動し、新規プロジェクトを作成します (File > New > Project)。プロジェクトに「Receiver」と名 前を付けます。 2. 図 9 に示すように、CAN コントローラー マクロをコンポー ネント カタログから TopDesign 回路図にドラッグ アンド ドロップします。 図 8. PSoC Creator における CAN コンポーネント 図 9. コンポーネント カタログにある CAN コントローラー マクロ PSoC は、Full CAN と Basic CAN という 2 つの CAN 通信モード を提供しています。以下は、Full CAN メッセージと Basic CAN メッセージとの重要な違いです。 Full CAN 通信は、GUI を使用して非常に限られたプログ ラミングで容易にセットアップすることができます。Basic CAN 通信は、全てのパラメータがファームウェアで設定さ れる必要があります。 Full CAN は、メッセージ フィルタリングにはハードウェア を使用しています。Basic CAN は、メッセージが受容され るかどうかを判断するためにメッセージが受信されるたび に CPU が中断されることを必要とします。 Full CAN は、メールボックス1毎に単一のメッセージ タイ プのみを受け取ることができる一方で、Basic CAN はメー ルボックス毎に広範な識別子のメッセージを受け取ること ができます。 次の節では、CAN コンポーネントを Full CAN 通信に設定す る方法について説明します。以下の手順は、2 つの PSoC を それぞれ別々の開発キット (DVK) で設定する方法について説 明します。1 つの PSoC の CAN コンポーネントはトランスミッタ に設定され、もう 1 つの PSoC の CAN コンポーネントはレシーバ に設定されます。 3. キャラクタ LCD コンポーネントをコンポーネント カタログ から TopDesign 回路図にドラッグ アンド ドロップします。 これはフォルダ「Display」にあります。図 10 は完成された 回路図を示します。 図 10. 完成された TopDesign 注 このアプリケーション ノートに関連するオプションのみが記 載されます。CAN コンポーネントに対応する全てのオプション の詳細については、CAN コンポーネント データシートを参照し てください。 1 メールボックスは、CAN メッセージを送受信するための入力/出力 バッファの一式です。 www.cypress.com 文書番号: 001-96361 Rev. ** 7 ® PSoC 3 および PSoC 5LP - CAN 入門 4. TopDesign にある CAN コンポーネントをダブルクリックし てコンフィギュレーション ウィンドウを開きます。 C AN の 一 般 コ ン フ ィ ギ ュ レ ー シ ョ ン : 図 11 は、PSoC Creator の CAN コンポーネントの一般コンフィ ギュレーション タブを示しています。 C AN の タ イ ミ ン グ コ ン フ ィ ギ ュ レ ー シ ョ ン : 図 12 は、PSoC Creator の CAN コンポーネントのタイミング コンフィギュレーション タブを示します。 図 12. CAN コンポーネントのタイミング設定タブ 図 11. CAN コンポーネントの一般コンフィギュレーション タブ 9. 5. 「Add Transceiver Signal」チェックボックスにチェックが 入っていることを確認します。 これは初期設定で有効に なっています。 一般コンフィギュレーションタブ内の「Add Transceiver Signal」オプションでは、CAN コンポーネントの TX_EN 信号を有効/無効にします。この信号は外部トランシーバ のイネーブル ピンに接続するために使用されます。 6. 7. 「Transmit Buffer Arbitration」を「Round-Robin」に設定 します。 ボー レートは、デバイス間の通信の速度を決定します。こ の速度を最大 1Mbps まで設定することができます。バス 上の全ての CAN ノードが同じボー レートで動作する必要 があります。 注 ボー レートの選択により、表内であり得るタイミング パ ラメータの一覧のみが提供されます (図 12 を参照)。表内 で行をダブルクリックしてそれぞれのフィールドのパラメー タを更新する必要があります。 「Round Robin」オプションは全ての送信メールボックスが 均等な送信の機会を与えられていることを保証するのに 対し、「Fixed priority」オプションはどのメッセージが送信 されるかに応じてメールボックスに優先順位を割り当てま す。 10. 「BRP」=2、「Time Quantum」=16、「Sample Point」=75 の行 (図 12 を参照) をダブルクリックして、これらの値を「 Settings」に追加します。 「Bus-Off Restart」の方式を「Manual」に設定します。 11. 「Synchronization Jump Width」 (SJW) を 1 に、「Sample Mode」を「1-Sample」に設定します。 バス オフ再起動は、手動または自動で送信エラーの数を 監視することで行います。 8. 「Baud-rate」を 500Kbps に設定します。これにより、図 12 に示すように値が自動的に変更されます。 「CAN Bus Synchronization Logic」に「'R' to 'D'」を選択 します。 CAN ネットワークではクロック信号が送信されません。代 わりに、全ての受信ノードのクロックは、トランスミッタによ り送信されたフレームの開始 (SOF) の立ち下がりエッジ で同期化されます。後続のエッジは、異なるノード間のク ロックの小さなドリフトに適合するためにクロックを同期化 するために使用されます。 最高性能を得るには、「Sample Point」が 60~80 で、 「Variance」が 0 の行を選択します。 図 5SJW は、サンプル ポイントがその平均位置から外れ られるタイム クォンタムの数です。この値は、4 ページの 図 5 に示される TSEG1 と TSEG2 の両方の以下でなけ ればなりません。 サンプル モードは、バスの状態を決定するために取られ るサンプルの数です。ここで単一サンプル モードまたは 3 サンプル モードを選択できます。 同期化は、リセッシブからドミナントへ ('R' to 'D') の遷移、 または両方のエッジ (リセッシブからドミナントへ、ドミナン トからリセッシブへ) で行うことができます。 www.cypress.com 文書番号: 001-96361 Rev. ** 8 ® PSoC 3 および PSoC 5LP - CAN 入門 C AN 割 込 み の コ ン フ ィ ギ ュ レ ー シ ョ ン : C AN 受 信 バ ッ フ ァ : 図 13 は、CAN コンポーネントの割り込み設定タブを示してい ます。このタブを使用していくつかのイベントが発生した時の割 り込みを有効または無効にします。割り込みが有効にされた 場合、PSoC はイベントが発生する時に割り込みサービス ルーチン (ISR) を実行します。 CAN コンポーネントは、メッセージを受信するために 16 の入 力バッファ (メールボックス) を持っています。したがって CAN コンポーネントは、最大 16 の異なる CAN メッセージ タイプを 受信することができます。 Message Received (メッセージ受信) と Bus Off State (バス オフ状態) の割り込みは初期設定では選択されています。 Message Receive 割り込みは自動的に CAN_TX_RX_func.c 内の ReceiveMsgx() 関数を呼び出し ます。 メールボックスは、初期設定では 0~15 の番号が付けられ、 お好みの名前に置き換えることができます。これを行うには、 図 14 に示すように「Full」モードを選択します。Full モードを選 択すると、その行の他のコンフィギュレーション可能なオプション が有効になります。 図 14. CAN コンポーネントの受信バッファ設定 図 13. CAN コンポーネントの割り込み設定タブ 12. 「Enable Interrupts」および「Message Received」、「Bus Off State」の割り込みを有効にするためにこれらのチェック ボックスが必ずチェックされていることを確認してください。 他の全てのボックスはチェックしないべきです。 13. 0x2FF の ID を持つ Full メールボックスを有効にするに は、図 14 に示すようにチェックボックスを選択します。ID フィールドは、該当するメールボックスで受信されるメッセー ジの識別子を定義し、任意の 11 ビット値に設定すること ができます。 14. メッセージがメールボックスで受信されると割り込みをトリ ガーするために、IRQ ボックスにチェックを入れます。 これで、レシーバ側の CAN コンポーネントのコンフィギュレー ションが完了します。この場合、ノードがメッセージを送信する 必要がないため、送信バッファを設定する必要はありません。 www.cypress.com 文書番号: 001-96361 Rev. ** 9 ® PSoC 3 および PSoC 5LP - CAN 入門 C AN 送 信 バ ッ フ ァ ピンのコンフィギュレーション 次に、トランスミッタ側を設定しましょう。残りの PSoC に対して 行うため、その PSoC 向けの別のプロジェクトを作成する必要 があります。 本節の手順は、「Receiver」と「Transmitter」両方のプロジェク トに適用します。 15. ワ ー ク ス ペ ー ス に 別 の プ ロ ジ ェ ク ト を 追 加 す る に は 、 Workspace Explorer ウィンドウ内のワークスペース名を 右クリックし、Add > New Project オプションを選択しま す。このプロジェクトに「Transmitter」と名前を付けます。 16. このプロジェクトの TopDesign に CAN コントローラー マ クロをドラッグ アンド ドロップします。レシーバ側と同様に、 3~12 のステップで説明したように CAN コンポーネントを 設定します。 Transmit Buffers タブは、図 15 示すように送信メールボックス を設定するために使用します。送信メールボックスは Full また は Basic のいずれかに設定できます。Full モードを選択すると、 その行の他のコンフィギュレーション可能なオプションが有効 になります。 これらのプロジェクトにピンを追加して設定しましょう。Tx_1 と Rx_1 ピンはステップ 2 で CAN マクロの一部として含まれてい ます。図 10 に示すように第 3 のピンを追加する必要がありま す。 18. 図 10 と図 16 に示すように両プロジェクトの TopDesign 回路図に Digital Output Pin をドラッグ アンド ドロップし ます。CAN コンポーネントの tx_en 出力に接続します。こ のピンは外部トランシーバを有効にするために使用され ます。 図 16. デジタル出力ピンを探す 図 15. CAN コンポーネントの送信バッファ設定 17. レシーバ側と同様に、0x2FF の ID を持つ Full メールボッ クスを有効にするには、図 15 に示すようにチェックボック スを選択します。 1 バイトのみを送信するため、Data Length Count (DLC) フィールドは 1 となります。 www.cypress.com 19. 図 17 に示すように Workspace Explorer で各プロジェク トのデザイン ワイド リソース (.cydwr) ファイルをダブルク リックして開きます。 文書番号: 001-96361 Rev. ** 10 ® PSoC 3 および PSoC 5LP - CAN 入門 図 17. .cydwr ファイルを探す クロックのコンフィギュレーション 本節の手順は、「Receiver」と「Transmitter」両方のプロジェク トに適用します。 CAN プロトコルは、ビットを同期させるクロックを送信しません。 4 ページの図 5 に示したように、ノード間の同期化は同期セグ メント中に送信されたビット毎に行われます。このため、 125Kbps より高いボー レートを得るために高精度な発振子を 使用する必要があります。 CAN プロトコルでは、クロック精度は 0.5%以下でなければな らないことを規定しています。外部水晶発振子を使用すること で 0.1%未満の誤差は PSoC で得られます。デザイン ワイド リソース ファイル (拡張子.cydwr を持つファイル) 内のクロック ツリー ダイアログがこれを設定するために使用されます。 21. 図 18 に示すように、デザイン ワイド リソース ファイルを 開きます。クロックのタブで、Edit Clocks をクリックしま す。クロック ツリー ダイアログが開きます。 20. 表 1 に示すように、各ピンにポートを割り当てます。 表 1. ピンの割り当て ピン 23. IMO ソースに XTAL を選択します。他の設定は変更しな いでください。 CY8CKIT-001 CY8CKIT-030 Rx_1 P3[4] P3[4] Tx_1 P3[3] P3[3] Pin_1 P3[2] P3[2] LCD_Char_1 P2[6:0] P2[6:0] www.cypress.com 22. 水晶のイネーブル - クロック ツリーの左上にあるチェック ボックスをクリックします。Configure ボタンをクリックして、 水晶周波数に 24MHz を入力します。 24. ご使用のキットが XTAL を備えていない場合、24MHz 水 晶と 2 個のコンデンサをピン P15[0]と P15[1]に接続しま す。詳細については、PSoC 3 または PSoC 5LP のデー タシートを参照してください。 文書番号: 001-96361 Rev. ** 11 ® PSoC 3 および PSoC 5LP - CAN 入門 図 18. クロック ツリーのコンフィギュレーション www.cypress.com 文書番号: 001-96361 Rev. ** 12 ® PSoC 3 および PSoC 5LP - CAN 入門 ファームウェア 本節の手順は、「Receiver」と「Transmitter」両方のプロジェク トに適用します。各プロジェクトに少量のファームウェア コード を追加する必要があります。 25. Build > Build All Projects メニュー項目を選択し、各プ ロジェクトをビルドします。CAN コンポーネントおよびその 他の API ファイルが自動的に生成されます。 27. 図 20 に示すように、Workspace Explorer 内でファイル 名をダブルク リックし て、 「Transmitter 」プロジェク トの CAN_1_TX_RX_func.c ファイルを開きます。このファイ ルは、プロジェクトがビルドされた後に生成されます。 図 20. CAN_1_TX_RX_func.c ファイルを探す 26. Workspace Explorer 内でファイル名をダブルクリックして、 「Transmitter」プロジェクトの main.c ファイルを開きます (図 19 を参照)。main.c ファイルにコード 1 からのコードを 追加します。 図 19. main.c ファイルを探す 28. 以下の行に移動します。 /* `#START TX_RX_FUNCTION` */ /* `#END` */ 29. 上記の行の間に次のコード行を入力します。 コード 1. 「Transmitter」の main.c コード extern uint8 Tx_Data; #include <device.h> 30. 同じファイル内に関数 CAN_1_SendMsg0() を配置しま す。以下のコードに移動します。 uint8 Tx_Data = 0; void main() { CAN_1_Start(); LCD_Char_1_Start(); CyGlobalIntEnable; /* `#START MESSAGE_0_TRASMITTED` */ /* `#END` */ 31. 上記の行の間に次のコード行を入力します。 for(;;) /* do forever */ { LCD_Char_1_ClearDisplay(); LCD_Char_1_Position(0,0); LCD_Char_1_PrintNumber(Tx_Data); CAN_1_SendMsg0(); Tx_Data++; CyDelay(500); } CAN_1_TX_DATA_BYTE1(0) = Tx_Data; } www.cypress.com 文書番号: 001-96361 Rev. ** 13 ® PSoC 3 および PSoC 5LP - CAN 入門 32. Workspace Explorer 内でファイル名をダブルクリックして、 「Receiver」プロジェクトの main.c ファイルを開きます。 main.c ファイルにコード 2 からのコードを追加します。 その他のファームウェアの注意事項 コード 2. 「Receiver」の main.c コード CAN コンポーネントは、使用する前に初期化して main.c ファイルで開始する必要があります。 グローバル割り込みは、CAN コンポーネントからの割り込 み要求を処理するために有効にする必要があります。 特定の送信メールボックスからの Full CAN メッセージを 送信するには、CAN_TX_SendMsgx() 関数を呼び出しま す (x はメールボックス番号に置き換えられ、CAN_TX は PSoC Creator の TopDesign 回路図内で CAN コンポー ネントに与えられた名前です)。 Full CAN メ ッ セ ー ジ の 送 受 信 に 必 要 な 関 数 は CAN_TX_TX_RX_func.c ファイルで提供されています。 このファイルは、プロジェクトがビルドされた後に生成され ます。 #include <device.h> uint8 Rx_Data; void main() { CAN_1_Start(); LCD_Char_1_Start(); CyGlobalIntEnable; for(;;) /* do forever */ { LCD_Char_1_ClearDisplay(); LCD_Char_1_Position(0,0); LCD_Char_1_PrintNumber(Rx_Data); } } 33. Workspace Explorer 内でファイル名をダブルクリックして、 「Receiver」プロジェクトの CAN_1_TX_RX_func.c ファイ ルを開きます。このファイルは、プロジェクトがビルドされ た後に生成されます。 CAN コンポーネントのファームウェアを書く際には、次の点に 注意してください。 PSoC で CAN をコンフィギュレーションするためにファーム ウェアを書く方法を理解するには、本アプリケーション ノートに 同梱されたサンプル プロジェクトを参照してください。 34. 以下の行に移動します。 /* `#START TX_RX_FUNCTION` */ /* `#END` */ 35. 上記の行の間に次のコード行を入力します。 extern uint8 Rx_Data; 36. 同じファイル内に関数 CAN_1_ReceiveMsg0() を配置し ます。以下のコードに移動します。 /* `#START MESSAGE_0_RECEIVED` */ /* `#END` */ 37. 上記の行の間に次のコード行を入力します。 Rx_Data = CAN_1_RX_DATA_BYTE1(0); 38. 両方のプロジェクトをビルドし、それぞれを 2 つのキット内 の PSoC にプログラムします。プログラム オプションは、 PSoC Creator の Debug メニューにあります: Debug > Program。 www.cypress.com 文書番号: 001-96361 Rev. ** 14 ® PSoC 3 および PSoC 5LP - CAN 入門 ハードウェアの実装 CAN コンポーネントからの PSoC 出力は TX と RX です。 CANH と CANL 信号を得るために、これらの出力のレベルを 変換する必要があります。CY8CKIT-017 拡張基板キットは、 本アプリケーション ノート同梱のサンプル プロジェクトにおい てレベル変換を実施する外部トランシーバとして使用されます。 このキットで使用する CAN トランシーバ IC は TJA1050 です。 トランシーバは、17 ページの図 25 に示すように最小限の接続 で実装することがあります。その図では、CY8CKIT-017 は TJA1050 に置き換えることができます。詳細な図は、付録 B に示します。 CAN は、CAN バスに 2 線のみを必要とします。図 21 に示す ように CY8CKIT-017 では、標準オスオス DB9 コネクタは 2 つの CAN ノード間を接続するために使用することができます。 CAN ネットワーク内の任意の 2 CAN ノード間のケーブル長を 表 2 に示す値に制限するべきです。これらの値は CAN 仕様 には記載されていませんが、設計で使用される標準値です。 表 2.異なるボー レートに対応する標準ケーブル長 ボー レート (ビット/秒) 標準ケーブル長 (メートル) 1Mbps 40 500kbps 100 250Kbps 200 125Kbps 500 10kbps 6000 図 21. CAN の物理的接続 www.cypress.com 文書番号: 001-96361 Rev. ** 15 ® PSoC 3 および PSoC 5LP - CAN 入門 用することができます。CY8CKIT-001 DVK の代わりに 1 つの CY8CKIT-030 または CY8CKIT-050 DVK を使用 することができます。 CAN アナライザの操作 CAN アナライザは、デバッグ目的のために CAN バス上で データ トラフィックを監視するために使用されるデバイスです。 これらのデバイスは Microchip や Peak-system などのメーカー から入手できます。図 22 は、CAN バスへの USB CAN アナ ライザの接続を示すブロック図です。 CAN アナライザは、PCAN View などのソフトウェアが、CAN アナライザが接続したコンピュータ システム上にインストール されることも必要とします。このソフトウェアは、CAN アナライ ザが受信するデータを解釈して、アプリケーションのインター フェースに表示します。 2. 表 3. CAN シンプレックス トランスミッタのピンの使用 ピン 図 22. CAN バスに接続した USB CAN アナライザ CAN Analyzer USB プロジェクト ファイルを開き、.cydwr ファイルで正しいピン 割り当てを行います。ピン割り当ては、表 3 と表 4 に示し ます。 Computer (CAN Analyzer Software) CY8CKIT-001 CY8CKIT-030 / CY8CKIT-050 LCD_Tx P2[6:0] P2[6:0] Data_In P0[0] P6[1] RX P3[4] P3[4] TX P3[3] P3[3] tx_en P3[2] P3[2] 表 4. CAN シンプレックス レシーバのピンの使用 CAN Node 1 (PSoC with transceiver) CANH CANL CAN Node 2 (PSoC with transceiver) ピン サンプル プロジェクト 本アプリケーション ノートには 4 つのサンプル プロジェクトが 含まれています。 プロジェクト 1 と 2: シンプレックス通信 17 ページの図 25 に示したプロジェクト 1 と 2 は、2 つの CAN ノード間のシンプレックス通信をデモします。 プロジェクト 1 ではトランスミッタを実装します。スイッチ上の キーの押下を監視し、CAN を介してキーの押下回数を通信し ます。プロジェクト 2 ではレシーバを実装します。データを受信 してキャラクタ LCD ディスプレイに表示します。17 ページの 図 23 と図 24 に示すフローチャートは、これらのプロジェクト のプログラム フローを示します。 サンプル プロジェクト 1 と 2 をセットアップするには、次の手順 を行ってください。 1. 3. CY8CKIT-001 CY8CKIT-030 / CY8CKIT-050 LCD_Rx P2[6:0] P2[6:0] RX P3[4] P3[4] TX P3[3] P3[3] tx_en P3[2] P3[2] 両方のプロジェクトをビルドします。 CAN_SimplexCommunication_Tx を第 1 の PSoC に、 CAN_SimplexCommunication_Rx を第 2 の PSoC にプ ログラムします。 CAN_SimplexCommunication_Tx プロジェクトは LCD ディス プレイの 1 行目に「TRANSMITTER」を表示します。2 行目は、 Data_in ピンに登録されたキーの押下回数を示します。 CAN_SimplexCommunication_Rx プロジェクトは LCD ディ スプレイの 1 行目に「RECEIVER」を表示します。2 行目は、 第 1 の PSoC により CAN を介して送信されたデータを表示し ます。これは、CAN_SimplexCommunication_Tx プロジェクト の 2 行目に表示されているキーの押下回数と同じです。 図 25 に 示 す よ う に シ ス テ ム を 構 築 し ま す 。 2 つ の CY8CKIT-001 DVK と 2 つの CY8CKIT-017 EBK を使 www.cypress.com 文書番号: 001-96361 Rev. ** 16 ® PSoC 3 および PSoC 5LP - CAN 入門 図 23. プロジェクト 1 のフローチャート (トランスミッタ) 図 24. プロジェクト 2 のフローチャート (レシーバ) Start Start Initialize CAN, LCD and variables Initialize CAN and variables Data Received? N Key press? N Y Y Update LCD Data Increase count by 1 Transmit count and Update LCD 図 25. プロジェクト 1 と 2 の物理的なコンフィギュレーション 5V CY8C3866AXI PSoC 3 (Project#1) 5V CY8C3866AXI PSoC 3 (Project#2) VDD VDD CY8CKIT-017 P3[3] CY8CKIT-017 C_TX CAN_H P3[4] C_RX P3[2] C_EN CAN_L C_TX P3[3] C_RX P3[4] C_EN P3[2] CAN_H CAN_L Switch P0[0] P2[6:0] P2[6:0] VSS 8 8 LCD LCD www.cypress.com VSS 文書番号: 001-96361 Rev. ** 17 ® PSoC 3 および PSoC 5LP - CAN 入門 表 5. CAN_RTR_Node1 のピンの使用 プロジェクト 3 と 4: CAN の RTR 機能 19 ページの図 28 に示したプロジェクト 3 と 4 は、CAN の RTR 機能をデモします。 プロジェクト 3 はノード 1、プロジェクト 4 はノード 2 と名付けま す。ノード 1 は ADC データ入力を監視し、ADC 値を LCD ディ スプレイに表示します。ノード 2 からの RTR 要求が発生した 場合、現時点の ADC 値はノード 2 に送信されます。ノード 2 はスイッチ上のキーの押下があるかを連続して確認し、キーが 押された時にノード 1 に RTR 要求を発行します。ノード 1 によ り送信された ADC データ値は、ノード 2 により受信され、その LCD ディスプレイ上に表示されます。19 ページの図 26 と図 27 に示すフローチャートは、これらのプロジェクトのプログラム フ ローを示します。 ピン 2. LCD P2[6:0] P2[6:0] ADC_In P0[0] P6[5] RX P3[4] P3[4] TX P3[3] P3[3] tx_en P3[2] P3[2] ピン 図 28 に 示 すよ う に シ ステム を ビ ル ド し ま す 。 2 つ の CY8CKIT-001 DVK と 2 つの CY8CKIT-017 EBK を使 用することができます。CY8CKIT-001 DVK の代わりに 1 つの CY8CKIT-030 または CY8CKIT-050 DVK を使用 することができます。 プロジェクト ファイルを開き、.cydwr ファイルで正しいピン 割り当てを行います。ピン割り当ては、表 5 と表 6 に示しま す。 CY8CKIT-030 / CY8CKIT-050 表 6. CAN_RTR_Node2 のピンの使用 サンプル プロジェクト 3 と 4 をセットアップするには、次の手順 を行ってください。 1. CY8CKIT-001 3. CY8CKIT-001 CY8CKIT–030 / CY8CKIT-050 LCD P2[6:0] P2[6:0] RTR_In P0[0] P6[1] RX P3[4] P3[4] TX P3[3] P3[3] tx_en P3[2] P3[2] 両方のプロジェクトをビルドします。CAN_RTR_Node1 を 第 1 の PSoC に、CAN_RTR_Node2 を第 2 の PSoC に プログラムします。 CAN_RTR_Node1 プロジェクトは LCD ディスプレイの 1 行目 に「Node1」を表示し、2 行目に ADC 出力の現時点の値を表 示します。 CAN_RTR_Node2 プロジェクトは LCD ディスプレイの 1 行目 に「Node2」を表示します。RTR_In キーが押された時、1 行目 は「RTR Sent」(RTR 送信済み) を表示し、2 行目は RTR に 応答してノード 1 から受信した ADC 出力の値を表示します。 www.cypress.com 文書番号: 001-96361 Rev. ** 18 ® PSoC 3 および PSoC 5LP - CAN 入門 図 26. プロジェクト 3 のフローチャート (ノード 1) 図 27. プロジェクト 4 のフローチャート (ノード 2) Start Start Initialize CAN, ADC, LCD and variables Initialize CAN, LCD and variables Get ADC Value Display on LCD N Key Press? RTR Request? N Y Send RTR request Y Transmit ADC Value Value Update on LCD 図 28. プロジェクト 3 と 4 の物理的なコンフィギュレーション CY8C3866AXI PSoC 3 5V (Project#3) 5V VDD VDD CY8CKIT-017 P3[3] 5V CY8CKIT-017 C_TX CAN_H VIN P3[4] C_RX P3[2] C_EN CAN_L C_TX P3[3] C_RX P3[4] C_EN P3[2] CAN_H CAN_L P0[0] P2[6:0] P0[0] P2[6:0] VSS RTR_Switch 8 VSS 8 LCD LCD www.cypress.com CY8C3866AXI PSoC 3 (Project#4) 文書番号: 001-96361 Rev. ** 19 ® PSoC 3 および PSoC 5LP - CAN 入門 これらのプロジェクトが正常に動作するために、CY8CKIT-017 のジャンパ JP2 が装着されていることを確認してください。ま た、CY8CKIT-017 のジャンパ JP6 は V5_0 と VDD の間を接 続する必要があります。標準オスオス DB9 コネクタを 2 つの CAN ノード間を接続するために使用することができます。 PSoC Creator のサンプル プロジェクトのセクションには、もう 2 つのサンプル プロジェクトが提供されています。 まとめ CAN は主に車載アプリケーションに使用されている信頼性の 高いシリアル通信プロトコルです。このプロトコルは、デバイス 間の双方向通信を可能にし、フレキシブルなネットワークを提 供しています。 サイプレスの PSoC 3 と PSoC 5LP は PSoC Creator と共に、 CAN 2.0a と CAN 2.0b 仕様に準拠しており、CAN ネットワー クを容易にセットアップするためのユーザーフレンドリーなイン ターフェースと API 一式を提供しています。本アプリケーション ノートは、PSoC で CAN を円滑に実装できるようにに案内しま す。 著者について www.cypress.com 氏名: Ranjith M 役職: アプリケーション エンジニア 経歴: Ranjith は Government Engineering College (トリチュール、インド) を卒業し、 電子通信工学の学士号を取得しました。 連絡先: [email protected] 文書番号: 001-96361 Rev. ** 20 ® PSoC 3 および PSoC 5LP - CAN 入門 付録 A STANDARD DATA FRAME ARBITRATION FIELD INTERFRAME SPACE START OF FRAME IDENTIFIER (11 BITS) RTR IDE R0 DLC (4 BITS) DATA (MAXIMUM 8 BYTES) CRC FIELD ACK FIELD END OF FRAME INTERFRAME SPACE CONTROL FIELD EXTENDED DATA FRAME ARBITRATION FIELD INTERFRAME SPACE START OF FRAME IDENTIFIER (11 BITS) SRR IDE IDENTIFIER RTR (18 BITS) R1 R0 DLC (4 BITS) DATA (MAXIMUM 8 BYTES) CRC FIELD ACK FIELD END OF FRAME INTERFRAME SPACE CONTROL FIELD www.cypress.com 文書番号: 001-96361 Rev. ** 21 ® PSoC 3 および PSoC 5LP - CAN 入門 付録 B Interfacing with TJA1050 VDD VCC PSoC P3[2] S P3[3] TXD P3[4] RXD TJA1050 CANH To CAN BUS CANL GND GND www.cypress.com 文書番号: 001-96361 Rev. ** 22 ® PSoC 3 および PSoC 5LP - CAN 入門 改訂履歴 文書名: PSoC® 3 および PSoC 5LP - コントローラー エリア ネットワーク (CAN) 入門 文書番号: 001-96361 版 ECN 番号 変更者 発行日 ** 4669754 HZEN 03/26/2015 www.cypress.com 変更内容 これは英語版 001-52701 Rev. *I を翻訳した日本語版 001-96361 Rev. **です。 文書番号: 001-96361 Rev. ** 23 ® PSoC 3 および PSoC 5LP - CAN 入門 ワールドワイドな販売と設計サポート サイプレスは、事業所、ソリューション センター、メーカー代理店および販売代理店の世界的なネットワークを保持しています。お客様 の最寄りのオフィスについては、サイプレスのロケーション ページをご覧ください。 製品 PSoC®ソリューション 車載 cypress.com/go/automotive クロック&バッファ cypress.com/go/clocks インターフェース cypress.com/go/interface 照明&電源管理 cypress.com/go/powerpsoc cypress.com/go/plc メモリ cypress.com/go/memory PSoC cypress.com/go/psoc テクニカル サポート タッチ センシング cypress.com/go/touch cypress.com/go/support USB コントローラー cypress.com/go/usb 無線/RF cypress.com/go/wireless psoc.cypress.com/solutions PSoC 1 | PSoC 3 | PSoC 4 | PSoC 5LP サイプレス開発者コミュニティ コミュニティ | フォーラム | ブログ | ビデオ | トレーニング PSoC はサイプレス セミコンダクタ社の登録商標です。本書で言及するその他すべての商標または登録商標は、それぞれの所有者に帰属します。 Cypress Semiconductor 198 Champion Court San Jose, CA 95134-1709 Phone Fax Website : 408-943-2600 : 408-943-4730 : www.cypress.com © Cypress Semiconductor Corporation, 2009-2015. 本文書に記載される情報は予告なく変更される場合があります。Cypress Semiconductor Corporation (サイプレス セミコンダクタ社) は、サイプレス製品に組み込まれた回路以外のいかなる回路を使用することに対して一切の責任を負いません。サイプレス セミコン ダクタ社は、特許またはその他の権利に基づくライセンスを譲渡することも、または含意することもありません。サイプレス製品は、サイプレスとの書面による合意 に基づくものでない限り、医療、生命維持、救命、重要な管理、または安全の用途のために使用することを保証するものではなく、また使用することを意図したもの でもありません。さらにサイプレスは、誤動作や故障によって使用者に重大な傷害をもたらすことが合理的に予想される生命維持システムの重要なコンポーネント としてサイプレス製品を使用することを許可していません。生命維持システムの用途にサイプレス製品を供することは、製造者がそのような使用におけるあらゆる リスクを負うことを意味し、その結果サイプレスはあらゆる責任を免除されることを意味します。 このソースコード (ソフトウェアおよび/またはファームウェア) はサイプレス セミコンダクタ社 (以下「サイプレス」) が所有し、全世界の特許権保護 (米国およびそ の他の国)、米国の著作権法ならびに国際協定の条項により保護され、かつそれらに従います。サイプレスが本書面によりライセンシーに付与するライセンスは、 個人的、非独占的かつ譲渡不能のライセンスであり、適用される契約で指定されたサイプレスの集積回路と併用されるライセンシーの製品のみをサポートするカ スタム ソフトウェアおよび/またはカスタム ファームウェアを作成する目的に限って、サイプレスのソース コードの派生著作物をコピー、使用、変更そして作成す るためのライセンス、ならびにサイプレスのソース コードおよび派生著作物をコンパイルするためのライセンスです。上記で指定された場合を除き、サイプレスの 書面による明示的な許可なくして本ソース コードを複製、変更、変換、コンパイル、または表示することはすべて禁止します。 免責条項: サイプレスは、明示的または黙示的を問わず、本資料に関するいかなる種類の保証も行いません。これには、商品性または特定目的への適合性の黙 示的な保証が含まれますが、これに限定されません。サイプレスは、本文書に記載される資料に対して今後予告なく変更を加える権利を留保します。サイプレス は、本文書に記載されるいかなる製品または回路を適用または使用したことによって生ずるいかなる責任も負いません。サイプレスは、誤動作や故障によって使 用者に重大な傷害をもたらすことが合理的に予想される生命維持システムの重要なコンポーネントとしてサイプレス製品を使用することを許可していません。生命 維持システムの用途にサイプレス製品を供することは、製造者がそのような使用におけるあらゆるリスクを負うことを意味し、その結果サイプレスはあらゆる責任 を免除されることを意味します。 ソフトウェアの使用は、適用されるサイプレス ソフトウェア ライセンス契約によって制限され、かつ制約される場合があります。 www.cypress.com 文書番号: 001-96361 Rev. ** 24