80
2018 Microchip Technology Inc. DS20005678B_JP - p. 1 ハイライト 本書には以下の主要項目を記載しています。 1.0 はじめに ........................................................................................................................... 2 2.0 動作モード ....................................................................................................................... 8 3.0 設定 ................................................................................................................................ 13 4.0 メッセージの送信 .......................................................................................................... 26 5.0 送信イベント FIFO (TEF) .............................................................................................. 33 6.0 メッセージのフィルタ処理 ............................................................................................ 36 7.0 メッセージの受信 .......................................................................................................... 41 8.0 FIFO の動作 ................................................................................................................... 45 9.0 タイムスタンプ .............................................................................................................. 58 10.0 割り込み ......................................................................................................................... 59 11.0 エラー対応 ..................................................................................................................... 68 12.0 補遺 A: MCP25xxFD canfdspi API ................................................................................. 70 13.0 関連文書 ......................................................................................................................... 76 14.0 改訂履歴 ......................................................................................................................... 77 CAN FD コントローラ モジュール 注意 : この日本語版文書は参考資料としてご利用ください。 最新情報は必ずオリジナルの英語版をご参照願います。

CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

ハイライト

本書には以下の主要項目を記載しています。

1.0 はじめに ........................................................................................................................... 22.0 動作モード ....................................................................................................................... 83.0 設定 ................................................................................................................................ 134.0 メッセージの送信 .......................................................................................................... 265.0 送信イベント FIFO (TEF) .............................................................................................. 336.0 メッセージのフィルタ処理 ............................................................................................ 367.0 メッセージの受信 .......................................................................................................... 418.0 FIFOの動作 ................................................................................................................... 459.0 タイムスタンプ .............................................................................................................. 5810.0 割り込み ......................................................................................................................... 5911.0 エラー対応 ..................................................................................................................... 6812.0 補遺 A: MCP25xxFD canfdspi API ................................................................................. 7013.0 関連文書 ......................................................................................................................... 7614.0 改訂履歴 ......................................................................................................................... 77

2018 Microchip Technology Inc. DS20005678B_JP - p. 1

Page 2: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

1.0 はじめに

1.1 CAN FDと CAN 2.0CAN FDは、CANバスの帯域幅に対する要求の高まりに対応します。CAN 2.0に対する主な強化点は以下の 2つです。• データフィールドを 64データバイトに拡大 (CAN 2.0では最大 8データバイト )• データフェイズ中のビットレートを高速に切り換える事が可能 (アービトレーション ビットレートは CAN 2.0と同じ )

図 1-1に、高速化されたビットレートと拡大されたフレームあたりデータバイト数によって得られる実効ビットレートの向上を示します。このグラフでは、11ビット IDを持つ CAN FDベースフレームと 500 kbpsのアービトレーション フェイズ中ビットレートを使っています。CAN FDプロトコルは、CAN 2.0メッセージと CAN FDメッセージが同一バス上で混在する事を許容するよう定義されています。しかし、これは同一バス上で CAN FD非対応コントローラと CAN FD対応コントローラが混在できる事を意味するのではありません。CAN FD非対応コントローラは、CAN FDメッセージの受信時にエラーフレームを生成します。CAN FDプロトコル (データリンク層 )は ISO 11898-1:2015で定義されています。

図 1-1: CAN FDの実効ビットレート(ベースフレーム : 11ビット ID、定格ビットレート = 500 Kbps)

Note: 本書はデバイス データシートの補足を目的としています。本デバイスのメモリ構成とレジスタ定義については、データシートを参照してください。データシート、アプリケーション ノート、サンプルコード (MCP25xxFD canfdspi API) は、Microchip社ウェブサイト (www.microchip.com)からダウンロードできます。本書内の全てのサンプルコードは MCP25xxFD canfdspi API を使います。構造体と関数プロトタイプの説明は APIヘッダファイルを参照してください。

00 5

11 5

22 5

33 5

44 5

0 1 2 3 4 5 6 7 8 9

Effe

ctiv

e B

it R

ate/

Mbp

s

Data Bit Rate/Mbps

8 Bytes Payload 16 Bytes Payload24 Bytes Payload 32 Bytes Payload48 Bytes Payload 64 Bytes Payload

DS20005678B_JP - p. 2 2018 Microchip Technology Inc.

Page 3: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

1.2 特長

CAN FDコントローラ モジュールの主な特長は以下の通りです。全般

• SPIインターフェイスを備えた外付け CAN FDコントローラ• 最大 1 Mbpsの定格 (アービトレーション ) ビットレート• 最大 8 Mbpsのデータビットレート• CAN FDコントローラ モード

- CAN 2.0B/CAN FD混用モード- CAN 2.0Bモード

• ISO 11898-1:2015に準拠メッセージ FIFO• 31個の FIFO (送信用または受信用として設定可能 )• 1個の送信キュー (TXQ)• 32ビット タイムスタンプ機能を備えた送信イベント FIFO (TEF)メッセージ送信

• メッセージ送信の優先順位付け - 優先度ビットフィールドに基づく、および /または- 送信キュー (TXQ)を使って最低 IDを持つメッセージを最初に送信

• 自動再送信の試行を無限回数、3回に制限、無効のいずれかに設定可能メッセージ受信

• 32個の柔軟なフィルタ /マスク オブジェクト• 各オブジェクトで以下のいずれかを受け入れるフィルタを設定可能

- 標準 ID + 最初の 18データビット- 拡張 ID

• 32ビット タイムスタンプ

2018 Microchip Technology Inc. DS20005678B_JP - p. 3

Page 4: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

1.3 モジュールのブロック図

図 1-2に、CAN FDコントローラ モジュールのブロック図を示します。• CAN FDコントローラ モジュールは以下のモードを備えています。

- コンフィグレーション モード- ノーマル CAN FDモード- ノーマル CAN 2.0モード- スリープモード (ノーマル スリープモードと低消費電力モード )- リッスンオンリー モード- 制限動作モード- 内部および外部ループバック モード

• CAN FDビットストリーム プロセッサ (BSP)は、ISO 11898-1:2015が定義する CAN FDプロトコルのMAC (Medium Access Control)を実装します。BSPはビットストリームとのシリアル -パラレル変換、CAN FDフレームのエンコード /デコード、メディアアクセスの管理、フレームの肯定応答、エラーの検出 /報告を実行します。

• TX ハンドラは、送信 FIFO によって要求される送信メッセージに優先順位を付けます。TXハンドラは RAMインターフェイスを使って RAMから送信データをフェッチし、そのデータを送信用に BSPへ供給します。

• BSPは受信メッセージを RXハンドラへ提供します。RXハンドラは、アクセプタンス フィルタを使って、受信 FIFOに保存するメッセージをフィルタリングします。RXハンドラは、RAMインターフェイスを使って受信データを RAMに保存します。

• 各 FIFOは、送信 FIFOまたは受信 FIFOとして設定できます。FIFO制御は、FIFOヘッドおよびテールを追跡し、ユーザアドレスを計算します。TX FIFOの場合、ユーザアドレスは次の送信メッセージのデータが保存される RAM 内のアドレスを指します。RX FIFO の場合、ユーザアドレスは、次の受信メッセージのデータが読み出される RAM 内のアドレスを指します。ユーザ アプリケーションは、FIFOのヘッド /テールをインクリメントする事により、RAMに対してメッセージが読み書きされた事を FIFOに知らせます。

• 送信キュー (TXQ) は、キューに保存されたメッセージの ID に基づいてメッセージを送信する特殊な送信 FIFOです。

• 送信イベント FIFO (TEF)は、送信メッセージのメッセージ IDを保存します。• 受信メッセージにタイムスタンプを付けるためにフリーランニングのタイムベース カウンタを使います。TEF内のメッセージにもタイムスタンプを付ける事ができます。

• CAN FDコントローラ モジュールは、新しいメッセージを受信した時またはメッセージの送信に成功した時に、割り込みを生成します。

• CAN FD コントローラ モジュールの制御とステータスの読み出しには特殊機能レジスタ(SFR)を使います。

図 1-2: モジュールのブロック図

CAN FDBit Stream Processor

RAMInterface

TX HandlerTX Prioritization

RX HandlerAcceptance

FilterTXQ Control

TEFControl

FIFOControl

SFR

InterruptControl

ErrorHandling

Diagnostics

Time StampingTBC

ModeControl

DS20005678B_JP - p. 4 2018 Microchip Technology Inc.

Page 5: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

1.4 CAN FDメッセージ フレームISO 11898-1:2015 は、各種の CAN メッセージ フレームを詳細に定義しています。図 1-3 ~図 1-7に、メッセージと各フィールドの構造を示します。CANデータ /リモートフレームには以下の 4種類があります (図 1-4参照 )。• CANベースフレーム : 標準 IDを使う CAN 2.0フレーム• CAN FDベースフレーム : 標準 IDを使う CAN FDフレーム• CAN拡張フレーム : 拡張 IDを使う CAN 2.0フレーム• CAN FD拡張フレーム : 拡張 IDを使う CAN FDフレームCAN FDフレームにはリモートフレームはありません。従って RTRビットは RRSビットに置き換えられます ( 図 1-4 参照 )。CAN FD ベースフレーム内の RRS ビットを使って SID を12ビットに拡張できます。拡張 IDを有効にした場合、RRSビットは SID11ビット (SID<11:0>の最下位ビット )として使われます。図 1-5に、各種 CANメッセージのコントロール フィールドを示します。ISO 11898-1:2015にCAN FDが追加される前は、FDFビットは予約済みビットでした。FDFビットは、従来型 CANフォーマットと CAN FDフォーマットのどちらかを選択するために使います。BRSビットは、CAN FDフレームのデータフェイズ向けにビットレートを切り換えるかどうかを選択するために使います。

図 1-8に、エラーおよびオーバーロード フレームを示します。これらの特別なフレームは従来型の CAN から変更されていません。CAN FD フレームのデータフェイズ中にエラーが検出されると、ビットレートは定格ビットレートに戻されます。エラーフレームは常にアービトレーション ビットレートで送信されます。

1.4.1 ISO CRCと非 ISO CRC非 ISO CRCを使う ECUのシステム検証をサポートするため、CAN FDコントローラ モジュールは ISO CRC(ISO 11898-1:2015 に準拠 ) と非 ISO CRC の両方をサポートします ( 図 1-6 と図 1-7参照 )。CRCフィールドは CiCON.ISOCRCENを使って選択できます。ISO CRCフィールドはスタッフカウントを含みます。このカウントは、最初の CAN FD仕様には含まれていませんでした。これは、初期仕様のエラー検出における弱点を直すために追加されました。

CAN FDフレームは 2通りの長さのCRCを使います (16データバイト以下に対して 17ビット、16データバイト超に対して 21ビット )。通常、CAN FDでは全部で 6種類の CANデータ /リモートフレームが使われます。

図 1-3: 一般的なデータフレーム

図 1-4: アービトレーション フィールド

SOF (1b) ARBITRATION(12/32b) CTRL(6/8/9b) DATA(0 to 64B) CRC(16/18/22b)

CRC(16/22/26b) ACK(2b) EOF(7b) IFS(≥3b)IFS(≥3b)

DATA FRAME

ARBITRATION(12/32b)

SID<10:0> RTR

SID<10:0> SRR IDE EID<17:0> RTR

SID<10:0> RRSSID11

SID<10:0> SRR IDE EID<17:0> RRS

CAN BASE

CAN FD BASE

CAN EXT

CAN FD EXT

2018 Microchip Technology Inc. DS20005678B_JP - p. 5

Page 6: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 1-5: コントロール フィールド

図 1-6: ISO CRCフィールド

図 1-7: 非 ISO CRCフィールド

CTRL(6/8/9b)

IDE FDF DLC<3:0>

IDE res DLC<3:0>FDF BRS ESI

FDF r0 DLC<3:0>

res DLC<3:0>FDF BRS ESI

CAN BASE

CAN FD BASE

CAN EXT

CAN FD EXT

CRC(16/22/26b)

CRC(15b)

CRC(15b)

CRC(17/21b)

CRC(17/21b)

CRC DEL

CRC DEL

STUFFCNT (4b)

CRC DEL

STUFFCNT (4b)

CRC DEL

CAN BASE

CAN FD BASE

CAN EXT

CAN FD EXT

CRC(16/18/22b)

CRC(15b) CRC DEL

CRC(15b) CRC DEL

CRC(17/21b) CRC DEL

CRC(17/21b) CRC DEL

CAN BASE

CAN FD BASE

CAN EXT

CAN FD EXT

DS20005678B_JP - p. 6 2018 Microchip Technology Inc.

Page 7: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 1-8: エラー /オーバーロード フレーム

1.4.2 DLC (Data Length Code)DLC (Data Length Code)は、メッセージ フレームに格納するデータバイトの数を指定します。表 1-1に、DCLの値とデータバイト数の関係を示します。

表 1-1: DLC値とデータバイト数の関係

ERRFLAG(6b) ERRDEL(8b)ANYWHERE WITHIN DATA FRAME IFS(≥3b) or OVL

OVLFLAG(6b) OVLDEL(8b)EOF or ERRDEL or OVLDEL IFS(≥3b) or OVL

ERROR

OVERLOAD

フレーム DLC データバイト数

CAN 2.0/CAN FD 0 01 12 23 34 45 56 67 78 8

CAN 2.0 9~ 15 8CAN FD 9 12

10 1611 2012 2413 3214 4815 64

2018 Microchip Technology Inc. DS20005678B_JP - p. 7

Page 8: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

2.0 動作モード

CAN FDコントローラ モジュールは以下の 8通りの動作モードを備えます。• コンフィグレーション モード• ノーマル CAN FDモード : CAN FDメッセージと CAN 2.0メッセージの両方をサポートします。

• ノーマルCAN 2.0モード : CAN FDメッセージを受信した時にエラーフレームを生成します。FDF ビットは「0」に固定されます。たとえ送信メッセージ オブジェクト内の FDF ビットがセットされていても、CAN 2.0フレームだけが送信されます。

• スリープモード (ノーマル スリープモードと低消費電力モード )• リッスンオンリー モード• 制限動作モード • 内部ループバック モード• 外部ループバック モード動作モードは以下の 4つのモードグループに分類されます : コンフィグレーション、ノーマル、スリープ、デバッグ (図 2-1参照 )

2.1 モードの変更

図 2-1に、可能なモード間の移行を示します。動作モードの移行は、CiCON.REQOPへの書き込みによって要求します。動作モードは即座に移行しません。動作モードは、バスがアイドル中の場合にのみ移行します。 現在の動作モードは CiCON.OPMOD で示されます。アプリケーションは、OPMOD 変化時割り込みを有効にするか、OPMODをポーリングできます。

2.1.1 ノーマルモード同士の間の移行

あるノーマルモードから別のノーマルモードへ直接移行する事はできません。一度コンフィグレーション モードを選択した後に、新しいノーマルモードを選択できます。

2.1.2 デバッグモード同士の間の移行

あるデバッグモードから別のデバッグモードへ直接移行する事はできません。一度コンフィグレーション モード選択した後に、新しいデバッグモードを選択できます。

2.1.3 ノーマルモードの終了

実行中のメッセージ送信が終了するまで、デバイスはコンフィグレーション モードまたはスリープモードに移行しません。

2.1.4 スリープモードの開始と終了

CAN FDコントローラ モジュールは、スリープモードが要求された後にスリープモードに移行し、RXCAN のドミナントエッジまたはオシレータの有効化 (OSC.OSCDIS のクリア ) によってスリープモードを終了します。スリープの終了後は、自動的にコンフィグレーション モードに移行します。

2.1.5 INTEGRATINGCAN FD コントローラ モジュールは、コンフィグレーション モードからノーマルモードまたはデバッグモードへの移行時に、ISO 11898-1:2015に従って (11個の連続したリセッシブビットを検出した後に )バスに Integrateします。

DS20005678B_JP - p. 8 2018 Microchip Technology Inc.

Page 9: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 2-1: 動作モード

Normal FDMode

Normal 2.0Mode

External/Internal Loopback

Mode

Listen OnlyMode

“Normal” Modes “Debug” Modes

Restricted Operation

Mode

REQOP=SleepAnd OSC.LPMEN=0

WAKIF Or Assert nCS

REQOP=SleepAnd OSC.LPMEN=1

And Bus Idle

REQOP=SleepAnd OSC.LPMEN=1

REQOP=RestrictedAnd Bus Idle

No

Yes

REQOP=”Normal”

REQOP=Listen OnlyAnd Bus Idle

REQOP=Config(And Bus Idle)

REQOP=RestrictedAnd Bus Idle

Res bit=1 receivedAnd PXEDIS=0

Wait for Bus Idle

Wait for 128 Idle conditions

TXBO

System errorREQOP=”Normal”

REQOP=Config(And Bus Idle) REQOP=Listen Only

And Bus Idle

REQOP=ConfigAnd Bus Idle

REQOP=Loopback Int/ExtAnd Bus Idle(Integrating)

WAKIF Or OSC.OSCDIS=0

REQOP=SleepAnd OSC.LPMEN=0

And Bus Idle

REQOP=ConfigAnd Bus Idle

REQOP=”Normal”And Bus Idle(Integrating)

POR

ConfigurationMode

Sleep ModeClock Off

TXCAN recessive

“Normal”Modes

RX and TX

LoopbackModes

Listen OnlyMode

RX OnlyTX pin high

TXREQ ignored

Bus OffClear all TXREQ

(FRESET TX FIFOs/TXQ)

ProtocolException Event

No TX

Restricted Operation

ModeRX

TX: only ACKTXREQ ignored

c SERR2LOM==1?

LPMDigital Logic OffTXCAN recessive

2018 Microchip Technology Inc. DS20005678B_JP - p. 9

Page 10: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

2.2 コンフィグレーション モードリセット後に、CAN FD コントローラ モジュールはコンフィグレーション モードに設定されます。エラーカウンタはクリアされ、全てのレジスタにはリセット値が格納されます。 CAN FDコントローラ モジュールは動作前に初期化する必要があります。初期化はコンフィグレーション モード (OPMOD = 100) 中にのみ可能です。コンフィグレーション モードは、REQOPを「100」に設定する事により要求します。CANプロトコルに違反する設定が誤って書き込まれる事を防ぐため、CAN FDコントローラ モジュールの以下のレジスタとビットは、コンフィグレーション モード中にのみ書き込み可能です。

• CiCON: TXQEN、STEF、SERR2LOM、ESIGM、RTXAT、WAKFIL、PXEDIS、ISOCRCEN• CiNBTCFG、CiDBTCFG、CiTDC• CiTXQCON: PLSIZE、FSIZE• CiFIFOCONm: PLSIZE、FSIZE、TXEN、RXTSEN• CiTEFCON: FSIZE、TEFTSENCANバス上でのエラーを防ぐため、実行中の送受信が完了するまで CAN FDコントローラ モジュールはコンフィグレーション モードに移行しません。以下のレジスタは、コンフィグレーション モードの終了時にリセットされます。• CiTREC• CiBDIAG0• CiBDIAG1

コンフィグレーション モード中は、CiFIFOCONm / CiTXQCON / CiTEFCONIn レジスタ内のFRESETがセットされ、全ての FIFOと送信キューがリセットされます。

2.3 ノーマルモード

2.3.1 ノーマル CAN FDモードモジュールを設定した後に、REQOP = 000に設定する事によってノーマル CAN FD動作モードへの移行を要求できます。 このモードでは、モジュールは CANバス上で認識され、CAN FDモード (ビットレートの切り換えが可能、最大 64データバイトを送受信可能 )でメッセージを送受信できます。

2.3.2 ノーマル CAN 2.0モードREQOP = 110に設定する事によってノーマル CAN 2.0動作モードへの移行を要求できます。 このモードでは、モジュールは CANバス上で認識されます。これは従来の CAN 2.0モードであり、モジュールは CAN FDフレームを受信しません。モジュールはバス上で CAN FDフレームを検出した場合にエラーフレームを送信する可能性があります。TXオブジェクト内の FDF、BRS、ESIビットは無視され、「0」として送信されます。

DS20005678B_JP - p. 10 2018 Microchip Technology Inc.

Page 11: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

2.4 スリープモード

スリープモードは低消費電力モードです。このモード中はレジスタと RAMの内容が保存され、クロックは停止します。 OSC.LPMENをクリアし、かつ REQOP = 001に設定する事によってスリープモードへの移行を要求できます。

CAN バス上でのエラーを防ぐため、実行中の送受信が完了するまで本モジュールはスリープモードに移行しません。

コンフィグレーション モード中である事は OPMOD = 100によって示され、OSC.OSCDISは「1」として読み出されます。アプリケーション ソフトウェアは、スリープモードへの移行を要求した後に、これらのビット フィールドを使ってスリープモードへの移行が完了した事を確認する必要があります。モジュールがスリープモード中の時に不用意な CAN バスエラーを防ぐため、TXCANピンはリセッシブ状態に保持されます。

2.4.1 スリープモードの終了

スリープモードは以下の 2通りの方法で終了します。• OSC.OSCDISのクリア• CANバス アクティビティによる復帰割り込みどちらの場合もクロックが有効になり、CAN FD コントローラ モジュールはコンフィグレーション モードに移行します。本モジュールは、スリープモード中に RXCANピンを監視する事でバスのアクティビティを検出します。WAKIEがセットされている場合、RXCANの立ち下がりエッジで復帰割り込みが生成されます。

2.5 低消費電力モード (LPM)(Note 3)

LPM は、デバイスの大部分への給電が OFF になる超低消費電力モードです。復帰に必要なロジックにのみ給電されます。これにより高温時のデバイスのリーク電流が大幅に減少します。 LPMへの移行を要求するには、OSC.LPMENをセットし、かつ REQOP = 001に設定します。CANバス上でのエラーを防ぐため、実行中の送受信が完了するまで本モジュールは LPMモードに移行しません。

2.5.1 LPMモードの終了LPMモードは以下の 2通りの方法で終了します。• nCSのアサート• CANバス アクティビティによる復帰割り込みLPMの終了は PORと似ています。LPMの終了後に CAN FDコントローラ モジュールはコンフィグレーション モードに移行します。全てのレジスタはリセットされ、RAM データは失われます。モジュールは設定し直す必要があります。

本モジュールは、LPMモード中に RXCANピンを監視する事でバスのアクティビティを検出します。WAKIEがセットされている場合、RXCANの立ち下がりエッジで復帰割り込みが生成されます。

Note 1: CiINT レジスタの WAKIE ビットがセットされている場合、本モジュールはスリープモードまたは LPM モード中にバス アクティビティを検出した時に割り込みを生成します。オシレータは起動します。オシレータの動作が安定してデバイスがノーマルモードに切り換わるまで、復帰の原因となったメッセージの内容は失われます。

2: スリープモードおよび LPM中にRXCANピンに対してローパスフィルタを有効にできます。この機能により、RXCANピン上のグリッチによる誤ったモジュールの復帰を防ぐ事ができます。スリープモードおよび LPM中のこのフィルタ機能は、CiCONレジスタのWAKFILビットで有効または無効にできます。フィルタ時間は CiCONレジスタのWFTビットで設定します。

3: MCP2517FDは LPMを実装していません。

2018 Microchip Technology Inc. DS20005678B_JP - p. 11

Page 12: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

2.6 デバッグモード

2.6.1 リッスンオンリー モードリッスンオンリー モードはノーマル CAN FD動作モードに基づきます。ただし、リッスンオンリー モードがアクティブな場合、CANバス上のモジュールは受動的です (すなわちメッセージは受信しますが、いかなるビットも送信しません )。TXREQビットは無視されます。エラーフラグも ACK 信号も送信しません。このモードではエラーカウンタは無効です。リッスンオンリー モードは、CAN バス上の baud レートを検出するために使えます。このモードを使うには、相互に通信するノードが少なくともあと 2 つ必要です。baud レートは、メッセージが受信できるようになるまで各種の値を試す事によって検出できます。このモードは、バス動作に影響を与える事なく CANバスを監視する必要がある場合にも使えます。

2.6.2 制限動作モード

制限動作モードでは、ノードはデータとリモートフレームを受信して有効フレームに対してACKを返す事はできますが、データフレーム、リモートフレーム、エラーフレーム、オーバーロード フレームのいずれも送信しません。エラー条件またはオーバーロード条件の場合、ノードはドミナントビットを送信せず、CAN通信に自身を再同期させるためにバスがアイドル状態になるまで待機します。エラーカウンタはインクリメントしません。

2.6.3 ループバック モードループバック モードはノーマル CAN FD動作モードに基づきます。このモードでは、メッセージを送信 FIFO から受信 FIFO へ内部で転送できます。モジュールはバスを介する外部からのACKを必要としません。RXCANピンは切り離されるため、バスからメッセージを受信する事はできません。

2.6.3.1 内部ループバック モード送信信号は内部接続を介して受信され、TXCANは HIGHに駆動されます。

2.6.3.2 外部ループバック モード送信信号は内部接続を介して受信され、送信メッセージは TXCANピンで監視できます。

DS20005678B_JP - p. 12 2018 Microchip Technology Inc.

Page 13: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

3.0 設定

設定を始めるには、MCP25xxFDがリセットされてコンフィグレーション モード中である事が必要です。オシレータ、FIFO、ビット時間はコンフィグレーション モード中にのみ設定できます。これは、本モジュールが誤って CANバスの動作を妨げてしまう事を防ぐためです。

3.1 オシレータ設定

図 3-1に、オシレータのブロック図を示します。オシレータは、CAN FDコントローラ モジュール向けに SYSCLKを生成します。CAN FDは、全てのノードでサンプルポイントが同じに設定されている事を要求します。従って、40 MHzまたは 20 MHzの SYSCLKを推奨します。オシレータはクロック基準として水晶 /セラミック振動子または外部クロックを使います。オシレータの設定には OSCレジスタを使います。PLLENビットをセットして PLLを有効にする事で 4 MHzクロックを 10逓倍できます。SCLKDIVをセットすると SYSCLKは 2分周されます。クロックは CLKOピンで出力できます。このクロック出力は CLKODIVビットを使って分周できます。

オシレータはスリープモードへの移行後に無効になります。OSCDISはアプリケーションでクリアする必要があります。このビットは、スリープモードへの移行後に自動的にセットされます。OSCDIS =「1」は、モジュールがスリープモードへ移行済みである事を示します。

3.1.1 水晶振動子 /レゾネータの選定水晶振動子またはセラミック レゾネータの選定には各種要因が影響し、それらはアプリケーションに応じて異なります。『PIC32 ファミリ リファレンス マニュアル、セクション 06. オシレータ』(DS61112) の 6.7「クロック供給に関するガイドライン」および 13.0「関連文書」に記載したアプリケーション ノートを参照してください。弊社の評価用ボードでは、以下の水晶振動子と 18 pF負荷コンデンサを使って良好な動作が得られました : ABM8G-40.000MHZ-18-D2Y-T、ABM8G-20.000MHZ-18-D2Y-T

図 3-1: MCP251xFDのオシレータのブロック図

3.2 入出力ピンの設定

MCP25xxFD の入出力の設定には IOCON レジスタを使います。INT0/GPIO0/XSTBY およびINT1/GPIO1ピンは割り込みピンまたはGPIOピンとして設定できます(PM0およびPM1ビットを使って設定 )。GPIO ピンとして設定した場合、ピンの方向 ( 入力 / 出力 ) は TRIS0 およびTRIS1ビットを使って選択します。INTピンおよび割り込みピンとして設定したINT0/INT1ピンは、INTODビットを使ってプッシュ/プルまたはオープンドレイン出力として設定できます。TXCANピンも、TXCANODビットを使ってオープンドレインとして設定できます。

XSTBYENビットをセットすると、INT0/GPIO0/XSTBYピンは外部 CANトランシーバのスタンバイピンを自動的に制御します。このピンは、MCP25xxFD がスリープモードに移行するとHIGH に駆動され、スリープモードが終了すると LOW に駆動されます。低消費電力モード(LPM)では、スタンバイピンの制御は使えません。LPMでは IOCONはリセットされ、GPIO0は入力として設定されます。

OSC1

OSC2

4, 40 or 20 MHzCLKIN,

Crystal orCeramic Res.

40/20 MHz

PLLEN

OSCDIS

DivideBy 1, 2

SCLKDIV

SYSCLK

DivideBy 1, 2, 4, 10

CLKO

CLKODIV

PLLx10

2018 Microchip Technology Inc. DS20005678B_JP - p. 13

Page 14: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

IOCONレジスタ SOFビットをセットすると、CANメッセージの開始ビットが送受信されるたびに CLKO/SOFピンでパルスが出力されます。

3.3 CANの設定CiCON レジスタは、コンフィグレーション モード中にのみ設定できる各種のビットを格納しています。

3.3.1 ISO CRCイネーブル本モジュールは ISO CRC (ISO 11898-1:2015に準拠 )と非 ISO CRCをサポートします (1.4.1「ISO CRCと非 ISO CRC」参照 )。ISO CRCは、ISOCRCENビットをセットする事により有効になります。

3.3.2 プロトコル例外イベント検出の無効化

CAN FD フレーム内の FDF ビットと「res」ビットの間の立ち下がりエッジは、トランシーバ遅延の計算とハード同期にとって重要です。FDF ビットの後の「res」ビットがリセッシブとして検出された場合、CAN FDコントローラ モジュールはこれをフォームエラーとして扱います。これは、プロトコル例外イベントの検出が無効な (PXEDISビットがセットされている )場合の動作です。 プロトコル例外イベントの検出は、PXEDIS ビットをクリアする事により有効にできます。プロトコル例外イベントが発生した場合、エラーカウンタは変化せず、ハード同期は有効であり、モジュールはリセッシブビットを送信して「bus integration」ステートに移行します。

3.3.3 復帰フィルタ

RXCAN ピンのローパスフィルタは、WAKFIL ビットを使って有効または無効にします。 このフィルタは、スリープモード中にのみ動作します。フィルタ時間は WFT ビットを使って設定できます。

3.3.4 送信試行回数の制限

ISO 11898-1:2015は、調停に負けたフレーム、ACKが返されなかったフレーム、エラーによって破損したフレームが自動的に再送信される事を要求しています。オプションにより、再送信の試行回数を制限できます。 RTXATビットをセットした場合、FIFO制御レジスタ内の TXATビットを使って再送信の試行回数を制限できます。RTXATビットをクリアした場合、FIFO制御レジスタ内の TXATビットは無視され、再送信は無制限に試行されます。

3.3.5 ゲートウェイ モードでのステート インジケータ (ESI)通常、送信メッセージ内の ESIビットは、CAN FDコントローラ モジュールのエラーステータスを反映します。モジュールがエラーパッシブの時、ESI はリセッシブとして送信されます。本モジュールをゲートウェイ アプリケーションで使う場合、ゲートウェイ モジュールがエラーアクティブであっても、メッセージ内の ESIビットをリセッシブとして送信する事が必要になる場合があります。これは、ESIGMビットをセットする事により設定できます。

3.3.6 システムエラー時のモード選択

SERR2LOM ビットは、システムエラー時にモジュールをどのモードに移行させるのか選択します。モジュールは制限動作モードまたはリッスンオンリー モードのどちらかに移行できます。

3.3.7 TXキューおよび送信イベント FIFO (TEF)向けのメッセージメモリの予約TXQENビットをセットすると、TXQ向けに RAMが予約されます。TXQENビットをクリアした場合、TXQは使えません。STEFビットをセットすると、TEF向けに RAMが予約され、全ての送信メッセージは TEFに保存されます。

DS20005678B_JP - p. 14 2018 Microchip Technology Inc.

Page 15: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

3.4 CAN FDビット時間の設定帯域幅を高めるために、CAN FDフレームは 2通りのビットレートで送信されます。• 定格ビットレート (NBR): このビットレートは、アービトレーション フェイズ中 (BRS ビットのサンプルポイントまでと、CRCデリミタのサンプルポイントから EOFまで )に使われます。

• データ ビットレート (DBR): このビットレートは、データフェイズ中 ( データおよび CRCフィールド中 )に使われます。

NBRは CANネットワークの伝播遅延によって制限されます (3.4.2「伝播遅延」参照 )。データフェイズ中は 1つのトランスミッタだけが送信するため、ビットレートを上げる事ができます。送信中のノードは、送信を試みたビットと CANバス上の実際のビットを常に比較します。データフェイズ中の伝播遅延は、ビット時間より長くなる可能性があります。その場合、データビットはセカンダリ サンプルポイント (SSP)でサンプリングされます (3.4.3「伝播遅延補償 (TDC)」参照 )。NBR は、アービトレーション フェイズ中の毎秒ビット数です。これは定格ビット時間 (NBT)の逆数です (式 3-1参照 )。

式 3-1: 定格ビットレート /時間

DBR は、データフェイズ中の毎秒ビット数です。これはデータビット時間 (DBT) の逆数です(式 3-1参照 )。

式 3-2: データ ビットレート /時間

baudレートプロセッサ (BRP)は、SYSCLKを分周するために使います。分周後の SYSCLKを使ってビット時間を生成します。 プリスケーラには、定格ビットレート用の NBRPと、データ ビットレート用の DBRPがあります。各 TQ値 (NTQと DTQ)は、式 3-3と式 3-4により求まります。

式 3-3: 定格 TQ値

式 3-4: データ TQ値

CAN のビット時間は、ISO 11898-1:2015 で規定された 4 つのセグメントで構成されます(図 3-2参照 )。同期セグメント (SYNC) - CANバスに接続しているノードを同期させます。CANコントローラは、このセグメント中にビットエッジが発生する事を期待します。同期セグメントは常に 1 TQです。 伝播セグメント (PRSEG) - バスの伝播遅延を補償します。PRSEGは最大伝播遅延より長い事が必要です。

位相セグメント 1 (PHSEG1) - エッジの位相シフトによって生じる誤差を修正します。位相シフトを修正するため、このセグメントは再同期中に自動的に延長可能です。

位相セグメント 2 (PHSEG2) - エッジの位相シフトによって生じる誤差を修正します。位相シフトを修正するため、このセグメントは再同期中に自動的に短縮可能です。

NBR 1NBT-----------=

DBR 1DBT------------=

NTQ NBRP TSYSCLK NBRPFSYSCLK--------------------------= =

DTQ DBRP TSYSCLK DBRPFSYSCLK--------------------------= =

2018 Microchip Technology Inc. DS20005678B_JP - p. 15

Page 16: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

PRSEGと PHSEG1により TSEG1が構成されます。PHSEG2は TSEG2と呼びます。各セグメントは複数の TQにより構成されます。サンプルポイントは TSEG1と TSEG2の境界に位置します。

表 3-1と表 3-2に、ビット時間設定パラメータのレンジを示します。

図 3-2: ビット時間の構成

1ビット時間内の総 TQ数は設定可能であり、式 3-5と式 3-6を使って計算できます。

式 3-5: NBT内の NTQ数

式 3-6: DBT内の DTQ数

表 3-1: 定格ビットレート コンフィグレーション レジスタ

表 3-2: データ ビットレート コンフィグレーション レジスタ

3.4.1 サンプルポイント

ビットの論理レベルは、ビット時間中のサンプルポイントで読み出されて解釈されます。サンプルポイントの位置 (ビット時間に対する百分率 )は式 3-7と式 3-8を使って求まります。

式 3-7: 定格サンプルポイント (%)

セグメント Min. Max.NSYNC 1 1NTSEG1 2 256NTSEG2 1 128NSJW 1 128ビットあたりの NTQ 4 385

セグメント Min. Max.DSYNC 1 1DTSEG1 1 32DTSEG2 1 16DSJW 1 16ビットあたりの DTQ 3 49

SYNC PRSEG PHSEG1 PHSEG2

TBIT

SYNC TSEG1 TSEG2

Sample point

NBTNTQ------------ NSYNC NTSEG1 NTSEG2+ +=

DBTDTQ------------ DSYNC DTSEG1 DTSEG2+ +=

NSP 1 NTSEG1+NBTNTQ------------

--------------------------------- 100=

DS20005678B_JP - p. 16 2018 Microchip Technology Inc.

Page 17: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

式 3-8: データ サンプルポイント (%)

3.4.2 伝播遅延

図 3-3に、 バス上の 2つの CANノード間の伝播遅延を示します。この図では、ノード Aが CANメッセージを送信します。送信ビットは、CANノード Aから送信側 CANトランシーバ、CANバス、受信側 CANトランシーバを経て CANノード Bに伝播します。トランスミッタはCANメッセージのアービトレーション フェイズ中にCANバスをサンプリングし、送信ビットと受信ビットが一致するかどうかを確認します。送信ノードは、サンプルポイントを最大伝播遅延より後に配置する必要があります。 式 3-9 に、最大伝播遅延の式を示します。 式中の tTXD-RXD はトランシーバの伝播遅延 (ISO11898-1:2015に従い最大 255 ns)、TBUSは CANバスでの遅延 (約 5 ns/m)です。係数の 2は、最悪条件 (ノード Aからからのビットがノード Bに届くと同時にノード Bが送信を開始した場合 )に基づきます。

式 3-9: 最大伝播遅延

図 3-3: 伝播遅延

DSP 1 DTSEG1+DBTDTQ------------

--------------------------------- 100=

TPROP 2 tTXD RXD– TBUS+ =

TPROP TPROPAB TPROPBA+ 2 tTXD RXD– TBUS+ = =

Node A

TXCAN

RXCAN

CANH

CANLNode B

RXCAN

TXCAN

CANH

CANL

Delay: Node A to B (TPROPAB)

CAN bus (TBUS)Transceiver Propagation

Delay (tTXD-RXD)

Delay: Node B to A (TPROPBA)

Transceiver Propagation Delay (tTXD-RXD)

2018 Microchip Technology Inc. DS20005678B_JP - p. 17

Page 18: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

3.4.3 伝播遅延補償 (TDC)CAN FD送信のデータフェイズ中は、1つのノードだけが送信します (他のノードは全て受信 )。従って、最大データレートは伝播遅延によって制限されません。 CAN FDコントローラ モジュールは、モジュール内の CANトランシーバが TXCANピンを介して送信している時に、RXCAN ピンを介してその送信データを受信します。受信データは、CAN トランシーバのループ遅延によって遅れます。この遅延が 1+DTSEG1 より大きい場合、エラーが検出されます。 トランシーバのループ遅延より短いデータフェイズ ビット時間を可能にするため、トランスミッタ遅延補償 (TDC) が実装されています。CAN FD メッセージのデータフェイズ中は、DTSEG1の直後でサンプリングするのではなく、計算したセカンダリ サンプルポイント (SSP)でサンプリングします。

図 3-4にトランシーバ ループ遅延の計測方法を示し、式 3-10に SSPの計算式を示します。

式 3-10: セカンダリ サンプルポイント (SSP)

図 3-4: トランシーバ遅延 (TDCV)の計測

3.4.4 同期

CAN バス上のノードとノードの間のオシレータ周波数偏差によって生じる位相シフトを修正するため、各 CANコントローラは受信信号の対応するエッジに同期できる必要があります。 CANコントローラは、同期 (SYNC)セグメント中に受信信号でエッジが発生する事を期待します。リセッシブからドミナントへのエッジだけが同期用に使われます。

同期には以下の 2通りの方式があります。• ハード同期 - リセッシブからドミナントへのエッジが発生した時点を同期セグメントとして認識します。ビット時間カウンタは、その同期セグメントからカウントを再開始します。

• 再同期 - リセッシブからドミナントへのエッジが同期セグメントの外で発生した場合、PHSEG1または PHSEG2の長さを調整します。

SSP TDCV TDCO+=

TXCAN

FDF res BRS ESI DLC

Arbitration Phase Data Phase

RXCAN Arbitration Phase Data Phase

Transmitter Delay

Start Stop

Transmitter Delay Measurement

TDCO

Secondary Sample Point (SSP)

FDF

DS20005678B_JP - p. 18 2018 Microchip Technology Inc.

Page 19: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

CAN同期の詳細は ISO 11898-1:2015を参照してください。

3.4.5 同期ジャンプ幅

同期ジャンプ幅 (SJW)は、再同期中に許容する PHSEG1と PHSEG2の最大調整幅です。SJWは設定可能です (表 3-1と表 3-2参照 )。

3.4.6 オシレータ偏差

オシレータ周波数の許容レンジは、オシレータ偏差 (df)と公称周波数 (fnom)を使って式 3-11の通りに定義されます。

式 3-12~式 3-16に、オシレータ最大偏差の条件を示します。

式 3-11: オシレータ偏差

式 3-12: 条件 1

式 3-13: 条件 2

式 3-14: 条件 3

式 3-15: 条件 4

式 3-16: 条件 5

1 df– fnom FSYSCLK 1 df+ fnom

df NSJW

2 10 NBTNTQ------------

----------------------------------

df min NPHSEG1 NPHSEG2,

2 13 NBTNTQ------------ NPHSEG2–

-------------------------------------------------------------------------

df DSJW

2 10 DBTDTQ------------

----------------------------------

df min NPHSEG1 NPHSEG2,

2 6 DBTDTQ------------ DPHSEG2–

DBRPNBRP---------------- 7 NBT

NTQ------------+

--------------------------------------------------------------------------------------------------------------------------------

dfDSJW max 0 NBRP

DBRP---------------- 1– ,

2 2 NBTNTQ------------ HNSEGP2

NBRPDBRP---------------- DPHSEG2 4 DBT

DTQ------------+ +

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

2018 Microchip Technology Inc. DS20005678B_JP - p. 19

Page 20: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

3.4.7 ビット時間の推奨設定

ビット時間を設定する際は、以下の推奨事項を考慮する必要があります。

• できるだけ高い CANクロック周波数を選択する- TQを短くする事で、サンプルポイントを高分解能で選択できます。- SYSCLKには 20または 40 MHzを使います。

• NBRPと DBRPをできるだけ小さくする- BRPを小さくするほど TQは短くなります。- NSYNCと DSYNCが短くなり、量子化誤差が減少します。- 受信ノードはより正確に送信ノードに同期できます。

• NBRPと DBRPを同じ値に設定する- 両方のフェイズの TQを同じにする事で、ビットレート切り換え中の量子化誤差を防ぎます。

• CAN FDネットワーク上の全てのノードで同じ定格サンプルポイント (NSP)を使うCAN FDネットワーク上の全てのノードで同じデータ サンプルポイント (DSP)を使う- ノードによってサンプルポイントが異なると、BRSおよび CRCデリミタビットの長さが異なるために、ビットレートの切り換え時に位相誤差が生じます。

- NSPと DSPは同じでなくても構いません。- SSPは CAN FDノードごとに異なっていても構いません。

• できるだけ大きな NSJWと DSJWを選択する- オシレータの許容偏差を最大化します。- 受信ノードが送信ノードに迅速に同期できるようにします。

• 1 Mbps以上の DBRに対して自動 TDCを有効にする- 自動 TDC計測はトランスミッタ遅延の変動を補償します。

3.4.8 ビット時間の設定例

以下に、CAN FDビット時間レジスタの設定例を示します。この例では、車載 CAN FDネットワーク向けに以下のパラメータを想定しています。

• NBR: 500 kbps (サンプルポイント位置は 80%)• DBR: 2 Mbps (サンプルポイント位置は 80%)• 最小バス長 : 40 m表 3-3と表 3-4に、ビット時間パラメータの計算方法を示します。パラメータは各種の制約と計算式によって決まり、試算を繰り返す必要があるため、スプレッドシートの使用を推奨します。

表 3-5に、計算で求めた各パラメータ値に対応するレジスタ値を示します。CAN FDコントローラ モジュールでトランスミッタ遅延補償値 (TDCV)を計算する事を推奨します。そうするには、CiTDC.TDCMOD = 10 (自動モード )に設定します。SSPを 80%に設定するため、TDCOの値を (DBRP×DTSEG1)に設定します。

DS20005678B_JP - p. 20 2018 Microchip Technology Inc.

Page 21: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

表 3-3: 定格ビットレートの設定手順

表 3-4: データ ビットレートの設定手順

表 3-5: ビット時間レジスタの初期化 (500k/2M)

パラメータ 制約 値 単位 計算式と注釈

NBT NBT ≥ 1 µs 2 µs 式 3-1FSYSCLK FSYSCLK ≤ 40 MHz 40 MHz 水晶振動子またはレゾネータの周波数 (通常は 40

MHzまたは 20 MHz)を選択します。NBRP 1~ 256 1 分解能を高くするため、できるだけ小さな BRP値

を選択します。

NTQ NBT、FSYSCLK 25 ns 式 3-3NBT/NTQ 4~ 385 80 式 3-5NSYNC 固定 1 NTQ ISO 11898-1:2015で定義NPRSEG NPRSEG > TPROP 47 NTQ 式 3-9

TPROP = 910 ns、 最小 NPRSEG = TPROP/NTQ = 36.4 NTQ47を選択する事で、最大 60 mのバス長を許容します。

NTSEG1 2~ 256 NTQ 63 NTQ 式 3-780% NSPが得られる NTSEG1を選択します。

NTSEG2 1~ 128 NTQ 16 NTQ NBT/NTQ = 80とするには、あと 16 NTQが必要です。

NSJW 1~ 128 NTQSJW ≤ min(NPHSEG1, NPHSEG2)

16 NTQ NSJWを最大化する事でオシレータ偏差の要件を緩和します。

パラメータ 制約 値 単位 計算式と注釈 DBT DBT ≥ 125 ns 500 ns 式 3-2DBRP 1~ 256 1 NBTと同じプリスケーラ値を選択します。そうす

る事で、ビットレートの切り換え時に TQ分解能は変化しません。

DTQ DBT、FSYSCLK 25 ns 式 3-4DBT/DTQ 3~ 49 20 式 3-6DSYNC 固定 1 DTQ ISO 11898-1:2015で定義DTSEG1 1~ 32 DTQ 15 DTQ 式 3-7

80% DSPが得られる DTSEG1を選択します。DTSEG2 1~ 16 DTQ 4 DTQ DBT/DTQ = 20とするには、あと 4 DTQが必要で

す。

DSJW 1~ 16 DTQSJW ≤ min(DPHSEG1, DPHSEG2)

4 DTQ DSJWを最大化する事でオシレータ偏差の要件を緩和します。

オシレータ偏差

条件 1~ 5条件 1~ 5の最小値 0.78 % 式 3-11~式 3-16

CiNBTCFG 値 CiDBTCFG 値 CiTDC 値

BRP 0 BRP 0 TDCMOD 2TSEG1 62 TSEG1 14 TDCO 15TSEG2 15 TSEG2 3 TDCV 0

SJW 15 SJW 3

2018 Microchip Technology Inc. DS20005678B_JP - p. 21

Page 22: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

3.5 メッセージメモリの設定 送信イベント FIFO、送信キュー、送信 FIFO、受信 FIFO のメッセージ オブジェクトは RAM内に配置されます (図 3-5参照 )。アプリケーションは、FIFO内のメッセージ オブジェクトの数 (1~ 32)と、各 FIFO内のメッセージ オブジェクトのペイロード サイズを設定する必要があります。この設定により、RAM内のメッセージ オブジェクトの格納位置が決まります。RAMの割り当ては、コンフィグレーション モード中にのみ設定できます。RAMの使用を最適化するため、アプリケーションは TFEから始めて TXQ、FIFO 1、FIFO 2、FIFO 3... の順番で RAM の割り当てを設定する必要があります。ユーザ アプリケーションがTEF、TXQ、16個の FIFOを必要とする場合、TEFを最初に設定し、次に TXQを設定し、その後に FIFO 1~ FIFO 16を設定します。未使用の FIFO 17~ 31を設定する必要はありません。

図 3-5: メッセージメモリの構成

3.5.1 送信イベント FIFO (TEF)の設定TEF向けにRAM内の空間を予約するには、CiCON.STEFをセットする必要があります。TEF内のメッセージ オブジェクトの数は、CiTEFCON.FSIZEを使って設定します。CiTEFCON.TEFTSENをセットする事により、送信メッセージにタイムスタンプを付ける事ができます。

3.5.2 送信キュー (TXQ)の設定TXQ向けにRAM内の空間を予約するには、CiCON.TXQENをセットする必要があります。TXQ内のメッセージ オブジェクトの数は、CiTXQCON.FSIZEを使って設定します。TXQ内の全てのオブジェクトは同じペイロードサイズ ( データバイト数 ) を持ちます。このサイズはCiTXQCON.PLSIZEを使って設定します。

3.5.3 送信 FIFOの設定FIFO 1~ FIFO 31は、 CiFIFOCONmレジスタの TXENをセットする事により送信 FIFOとして設定できます。各送信 FIFO 内のメッセージ オブジェクトの数は、CiFIFOCONm.FSIZE を使って設定します。1つの送信 FIFO内の全てのオブジェクトは同じペイロードサイズ (データバイト数 )を持ちます。このサイズは CiFIFOCONm.PLSIZEを使って設定します。

3.5.4 受信 FIFOの設定FIFO 1~FIFO 31は、 CiFIFOCONmレジスタのTXENをクリアする事により受信FIFOとして設定できます。各受信 FIFO 内のメッセージ オブジェクトの数は、CiFIFOCONm.FSIZE を使って設定します。1つの受信 FIFO内の全てのオブジェクトは同じペイロードサイズ (データバイト数 )を持ちます。このサイズはCiFIFOCONm.PLSIZEを使って設定します。CiFIFOCONm.RXTSENをセットする事により、受信メッセージにタイムスタンプを付ける事ができます。

TEF

TX Queue

FIFO 1

FIFO 3

FIFO 2: Message Object 0

FIFO 2: Message Object 1

FIFO 2: Message Object n

FIFO 31

DS20005678B_JP - p. 22 2018 Microchip Technology Inc.

Page 23: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

3.5.5 メッセージメモリの必要サイズの計算

必要な RAM容量は、各 FIFOの設定によって決まります。式 3-17~式 3-19に TEF、TXQ、各FIFOのサイズ (バイト数 )の計算式を示します。TEFまたは TXQを使わない場合、それらのサイズは 0です。内蔵 RAM の容量は限られているため、ユーザはメモリ設定が RAM に収まる事を確認する必要があります。MCP25xxFDはメモリ設定の整合性を確認しません。RAMの総使用量 (バイト数 )は式 3-20により求まります。TEF オブジェクトのサイズは、タイムスタンプを有効にするかどうかによって異なります。TEFTSENをセットした場合は tefts = 4、クリアした場合は tefts = 0です。PayLoad(i)はデータバイト数です。RX FIFOのメッセージ オブジェクトのサイズは、タイムスタンプを有効にするかどうかによって異なります。FIFO(i)に対して RXTSEN = 1かつ TXEN = 0の場合は rxts(i) = 4、それ以外の場合は rxts(i) = 0です。Nは、TEFと TXQに追加して使う FIFOの数です。

式 3-17: TEFのサイズ

式 3-18: TXQのサイズ

式 3-19: FIFOのサイズ

式 3-20: RAMの総使用量

STEF NElements TEF tefts 8+ =

STXQ NElements TXQ 8 PayLoad TXQ + =

SFIFO i NElements i rxts i 8 PayLoad i + + =

SRAM STEF STXQ SFIFO i

i 1=

N

+ +

=

2018 Microchip Technology Inc. DS20005678B_JP - p. 23

Page 24: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

3.6 設定のためのサンプルコード

例 3-1のサンプルコードに、MCP25xxFDを設定する方法を示します。手順は以下の通りです。

• MCP25xxFDをリセットする• オシレータと CLKOピンを設定する• I/Oピンを設定する• CAN制御レジスタを設定する• ビット時間レジスタを設定する• TEF、TXQ、TX/RX FIFOを設定する

例 3-1: 基本的な設定

DS20005678B_JP - p. 24 2018 Microchip Technology Inc.

Page 25: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

この設定により、デバイスはノーマルモードへ移行可能となります。例 3-2のサンプルコードに、ECCを有効にし、RAMを初期化してノーマルモードを選択する方法を示します。常に実際の RAM使用量を計算し、RAMに収まる事を確認する必要があります。

例 3-2: RAMの初期化とノーマルモードの選択

2018 Microchip Technology Inc. DS20005678B_JP - p. 25

Page 26: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

4.0 メッセージの送信

アプリケーションは、FIFO または TXQ を送信用に使う前に、それらを設定する必要があります (3.5.3「送信 FIFOの設定」と 3.5.2「送信キュー (TXQ) の設定」参照 )。

4.1 送信メッセージ オブジェクト表 4-1に、TXQと送信 FIFOが使う送信メッセージ オブジェクトの詳細を示します。送信オブジェクトはメッセージ ID、制御ビット、ペイロードを格納します。• SID: 標準 ID (またはベース ID)• EID: IDの拡張部• DLC: データ長コード : 送信するデータバイトの数を指定します (1.4.2「DLC (Data Length

Code)」参照 )。• IDE: 拡張 ID の選択 : このビットをクリアした場合はベースフレームを送信し、セットした場合は拡張フレームを送信します。

• RTR: リモート送信要求 : このビットは、CAN 2.0フレーム内でのみ指定されます。このビットをセットする事で、受信中ノードに対して送信を要求します。

• FDF: FDフォーマットの選択 : このビットがセットされていれば CAN FDフレームが送信され、クリアされていれば CAN 2.0 フレームが送信されます。ノーマル CAN 2.0 モードが選択されている場合、このビットは無視され、CAN 2.0フレームのみが送信されます。

• BRS: ビットレート切り換え : このビットがセットされている場合、CAN FDフレームのデータフェイズは DBR を使って送信されます。このビットがクリアされている場合、フレーム全体が NBRを使って送信されます。

• ESI: エラーステート インジケータ : 通常、ESIビットは送信中ノードのエラーステータスを反映します。CAN FDフレーム内のリセッシブの ESIビットは送信中ノードがエラーパッシブである事を示し、ドミナントの ESIビットは送信中ノードがエラーアクティブである事を示します。CiCON.ESIGM = 0 の場合、オブジェクト内のこのビットは無視されます。CiCON.ESIGM = 1の場合、CAN FDコントローラ モジュールがエラーパッシブであるかメッセージ オブジェクト内の ESIビットがセットされていれば、送信メッセージ内の ESIビットはリセッシブで送信されます。ゲートウェイ アプリケーションは、これを使って送信中ノードの ESIビットがセットされた事を示します。

• SEQ: シーケンス番号 : SEQは CANバス上へ送信されません。これは送信したメッセージを記録するために使われます。SEQは TEFメッセージ オブジェクト内で保存されます。

• 送信バッファデータ : メッセージのペイロードを格納します。DLCによって指定された数のデータバイトだけが送信されます。バイト 0、バイト 1、バイト 2、....の順番で送信されます。

4.2 送信 FIFOへのメッセージの書き込みアプリケーションは、FIFOにメッセージを書き込む前に FIFOがフルではない事を確認する必要があります。CiFIFOSTAm.TFNRFNIF がセットされている場合、FIFO には空き位置があります。フルの FIFO にメッセージを書き込むと、送信中のメッセージを破壊する可能性があります。

FIFOユーザアドレスは、次の送信メッセージ オブジェクトの RAM内のアドレスを指します。アプリケーションは、そこにメッセージを保存する必要があります。RAM内の実際のアドレスは、式 4-1により求まります。送信メッセージ オブジェクトは T0、T1、T2...の順番で書き込まれます。データバイトの最大数は、設定されたペイロードによって制限されます。DLC によって指定された数のデータバイトだけを FIFOに書き込む必要があります。

式 4-1: 次のメッセージ オブジェクトのアドレス

メッセージ オブジェクトが RAMに書き込まれた後に、CiFIFOCONm.UINCをセットする事によって FIFO をインクリメントする必要があります。これにより、CAN FD コントローラ モジュールは FIFOのヘッドをインクリメントし、CiFIFOUAmを更新します。以上によりメッセージは送信可能となり、次のメッセージを新しいアドレスに書き込む事ができます。

A 0x400 CiFIFOUAm+=

DS20005678B_JP - p. 26 2018 Microchip Technology Inc.

Page 27: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

4.3 送信キューへのメッセージの書き込み

TXQへの送信メッセージ オブジェクトの書き込み方法は、送信 FIFOへのメッセージ オブジェクトの書き込みと同様です。アプリケーションは、CiTXQSTA を読み出す事で TXQ 内に空き位置がある事を確認し、CiFIFOUAm の代わりに CiTXQUA を使ってメッセージの書き込み先アドレスを計算し、CiTXQCON.UINC をセットする事によって TXQ のヘッドをインクリメントする必要があります。

表 4-1: 送信オブジェクト (TXQ、TX FIFO)ワード

Bit31/2315/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

T0 31:24 -— -— SID11 EID<17:6>23:16 EID<12:5>15:8 EID<4:0> SID<10:8>7:0 SID<7:0>

T1 31:24 SEQ<22:15>23:16 SEQ<14:7>15:8 SEQ<6:0> ESI7:0 FDF BRS RTR IDE DLC<3:0>

T2 (1) 31:24 送信データバイト 323:16 送信データバイト 215:8 送信データバイト 17:0 送信データバイト 0

T3 31:24 送信データバイト 723:16 送信データバイト 615:8 送信データバイト 57:0 送信データバイト 4

Ti 31:24 送信データバイト n23:16 送信データバイト n-115:8 送信データバイト n-27:0 送信データバイト n-3

bit T0.31-30 未実装 : 「x」として読み出しbit T0.29 SID11: CAN FDモードでは、r1を使って標準 IDを 12ビットに拡張できます。bit T0.28-11 EID<17:0>: 拡張 IDbit T0.10-0 SID<10:0>: 標準 IDbit T1.31-9 SEQ<22:0>: 送信イベント FIFO内の送信メッセージを追跡するためのシーケンス番号 (2)

bit T1.8 ESI: エラーステータス インジケータ CAN to CANゲートウェイ モード (CiCON.ESIGM = 1)では、送信される ESIフラグは T1.ESIと CANコントローラのエラーパッシブ状態の論理和 (OR)です。 ノーマルモードの ESIはエラーステータスを示します。1 = 送信中のノードはエラーパッシブ0 = 送信中のノードはエラーアクティブ

bit T1.7 FDF: FDフレーム : CANフォーマットと CAN FDフォーマットを区別します。bit T1.6 BRS: ビットレート切り換え : データ ビットレートを切り換えるかどうか選択します。bit T1.5 RTR: リモート送信要求 : CAN FDでは使いません。bit T1.4 IDE: ID拡張フラグ : 標準フォーマットと拡張フォーマットを区別します。bit T1.3-0 DLC<3:0>: データ長コードNote 1: データバイト0~n: ペイロードサイズは制御レジスタ(CiFIFOCONm.PLSIZE<2:0>)で別々に設定します。

2: MCP2517FDは SEQ<22:7>を実装していません。

2018 Microchip Technology Inc. DS20005678B_JP - p. 27

Page 28: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

4.4 送信 FIFO内のメッセージの送信要求メッセージは、送信 FIFO に書き込まれた後に送信可能となります。アプリケーションは、CiFIFOCONm.TXREQまたはCiTXREQレジスタ内の対応するビットをセットする事によってFIFO内の全てのメッセージの送信を開始します。全てのメッセージが送信されると、TXREQはクリアされます。アプリケーションは同時に複数の FIFOと TXQの送信を要求できます。最高優先度を持つ FIFOまたは TXQが最初に送信を開始します。FIFO内のメッセージは、先入れ先出しで送信されます。

FIFOが送信中であっても、その FIFOに新しいメッセージを書き込む事ができます。FIFOがエンプティになると TXREQ は自動的にクリアされるため、メッセージを追加した後にCiFIFOCONmレジスタの UINCと TXREQを同時にセットする必要があります。これにより、追加したメッセージを含む FIFO内の全てのメッセージが確実に送信されます。

4.5 送信キュー内のメッセージの送信要求

メッセージは、TXQ に書き込まれた後に送信可能となります。アプリケーションは、CiTXQCON.TXREQ をセットする事によってキュー内の全てのメッセージの送信を開始します。全てのメッセージが送信されると、TXREQはクリアされます。アプリケーションは、TXQと複数の FIFOの送信を同時に要求できます。CiTXQCONレジスタで最高優先度に設定されている TXQまたは FIFOが最初に送信を開始します。TXQ内のメッセージは、それらの IDに基づいて送信されます。最高優先度の ID (最低 ID値 )を持つメッセージが最初に送信されます。TXQ がメッセージを送信中であっても、TXQ に新しいメッセージを書き込む事ができます。TXQがエンプティになると TXREQは自動的にクリアされるため、メッセージを追加した後にCiTXQCONレジスタの UINCと TXREQを同時にセットする必要があります。これにより、追加したメッセージを含む TXQ内の全てのメッセージが確実に送信されます。

4.6 CiTXREQレジスタCiTXREQレジスタは TXQと全ての TX FIFOの TXREQビットを格納します。このレジスタは以下の 2つの目的で使います。• ユーザ アプリケーションは、CiTXREQレジスタ内の対応するビットをセットする事により、

1つの SPI命令だけで TXQと 1つまたは複数の TX FIFOの送信を要求できます。CiTXREQレジスタ内のビットをクリアしても送信は中止されません。

• CiTXREQレジスタを読み出す事で、どの送信 FIFOで送信が保留中なのか確認する事ができます。

CiTXREQ<0>は TXQに割り当てられ、CiTXREQ<n>は TX FIFO n (n = 1~ 31)に割り当てられています。

4.7 送信優先度

CiFIFOCONm.TXPRI と CiTXQCON.TXPRIを使って、FIFOと TXQの送信優先度を設定する必要があります。 メッセージを送信する前に、送信待ちの TXQと TX FIFOの優先度が比較されます。最高優先度を持つ FIFOまたは TXQが最初に送信されます。例えば、送信 FIFO 1の優先度が FIFO 3よりも高い場合、FIFO 1内の全てのメッセージが最初に送信されます。複数の FIFOが同じ優先度を持つ場合、最も高い番号を持つ FIFO が送信されます。 例えば、FIFO 1 と FIFO 3 の優先度が同じである場合、FIFO 3 内の全てのメッセージが最初に送信されます。TXQ と 1 つまたは複数の FIFOの優先度が同じである場合、TXQ内の全てのメッセージが最初に送信されます。送信の優先順位は、1つのメッセージが送信されるたびに再計算されます。

4.7.1 1つの FIFO内のメッセージの送信優先順位その名が示す通り、FIFO (First-In-First-Out) 内のメッセージは先入れ先出し方式で送信されます。

DS20005678B_JP - p. 28 2018 Microchip Technology Inc.

Page 29: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

4.7.2 TXQ内のメッセージの送信優先順位TXQ内のメッセージは、メッセージ IDに基づいて送信されます。最低メッセージ ID (最高優先度 )を持つメッセージが最初に送信されます。

4.7.3 IDに基づく送信優先順位IDに基づく CANメッセージの送信の目的は、「内部での優先順位の逆転」を防ぐ事です。低優先度メッセージがバス トラフィック (調停 )のために送信を待機中である場合、より高優先度のメッセージの送信が抑止される可能性があります。TXQは、ID (優先度 )に基づいてキュー内のメッセージの優先順序を付け直す事により、この問題を解消します。

4.8 送信帯域幅の共有

帯域幅の共有は以下の通りに働きます。

• 1 つのメッセージが正常に送信された後、本モジュールは次のメッセージの送信を開始する前に nアービトレーション ビット時間のアイドル期間を挿入します。これにより、次の送信は延期されます。

• メッセージの受信後は、バスがアイドルになり次第、モジュールは直ちに次のメッセージを送信できます。

これにより、バス上の他のノードは、たとえそれらの優先度が低くてもメッセージを送信できます。

送信と送信の間に挿入するアービトレーション ビット時間は、CiCON.TXBWS を使って設定できます。

4.9 再送信の試行

再送信の試行回数は以下の通りに設定できます。

• 再送信の試行を無効にする• 再送信を 3回だけ試行する• 再送信を無制限に試行する再送信の試行は CiCON.RTXAT をセットする事により制限できます。再送信の試行回数は、CiFIFOCONm.TXATとCiTXQCON.TXATを使って各送信FIFOとTXQで別々に設定できます。CON.RTXAT = 0 の場合、全ての送信 FIFO と TXQ で再送信が無制限に試行され、TXAT は無視されます。

4.9.1 再送信の試行を無効にした場合

メッセージの送信が試行された後に TXREQはクリアされます。調停に敗れるかエラーによってメッセージの送信に失敗した場合、CiFIFOSTAm内の TXATIFまたは CiTXQSTAがセットされます。

4.9.2 再送信を 3回だけ試行する場合送信中にエラーが検出されると、CAN FDコントローラ モジュールは残りの試行回数を 1つデクリメントし、バスが次にアイドルになった時にメッセージの再送信を試行します。調停に負けた場合、残りの試行回数はデクリメントしません。試行回数を全て使い果たした場合、TXREQがクリアされ、CiFIFOSTAm/CiTXQSTA内の TXATIFがセットされます。メッセージを再送信する前に、送信優先度が再計算されます。別の TX FIFOまたは TXQが送信用に選択された場合、または直近の送信試行の後にメッセージを受信した場合、再送信の試行回数は再初期化されます。

4.9.3 再送信を無制限に試行する場合

TX FIFO または TXQ 内の全てのメッセージの送信に成功した後にのみ TXREQ がクリアされます。

2018 Microchip Technology Inc. DS20005678B_JP - p. 29

Page 30: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

4.10 送信の中止

保留中の送信は、メッセージの送信が開始される前 (SOFの前 )にのみ中止可能です。特定 FIFO の送信は、オブジェクト制御レジスタ内の TXREQ をクリアする事によって中止できます。CiTXREQレジスタ内のビットをクリアしても中止はできません。CiTXREQレジスタ内のビットに「0」を書き込んでも無視されます。中止に成功すると、FIFO制御レジスタ内のTXABTビットがセットされます。TXREQは、メッセージが中止または正常に送信されるまでセットされたままです。

CiCON.ABATをセットすると、全ての FIFO内の全ての保留中メッセージの送信が中止されます。全ての TXREQ ビットがクリアされた後に新しいメッセージの送信を開始するには、CiCON.ABATをクリアする必要があります。送信 FIFOの TXREQをクリアすると、その FIFO内の全ての送信の中止が試みられます。メッセージが送信された場合、FIFO インデックスは通常通りに更新されます。送信の中止に成功した場合、FIFOインデックスは変化しません。内部インデックス (CiFIFOSTAx.FIFOCI)を使うと、どのメッセージが送信済みなのか確認できます。FRESETをセットすると、送信 FIFOのインデックスをリセットして全ての保留中メッセージを消去できます。その後に、FIFOに新しい送信メッセージを書き込む事ができます。

4.11 リモート送信要求

CANバスシステムは、マスタノードから他のノードに対してデータの送信を要求するための手段を提供します。マスタは、RTRビットをセットしたメッセージを送信します。このメッセージはデータを一切含まず、フィルタ一致をトリガするためのアドレスだけを格納します。 リモートフレームは CAN 2.0 フレーム向けにのみ定義されており、CAN FD フレームではサポートされません。

リモート送信要求に応答するよう設定されたフィルタのポインタは、送信用に設定された FIFOを指します (その FIFOの RTRENはセットされている必要があります )。自動リモートデータ要求は、MCUの介入を必要とせずに処理可能です。FIFOが正しく設定されていれば、フィルタが一致してポインタがその FIFO を指した時に、その FIFO は送信待ちのキューに入ります。 FIFOは以下の通りに設定しておく必要があります。• TXENを「1」にセットします。• フィルタを有効にして、照合するメッセージ IDを書き込みます。• そのフィルタのバッファポインタは TX FIFOを指す必要があります (通常、フィルタは RX

FIFOを指す )。• RTRを有効にするために RTRENビットを「1」にセットします。• FIFOには、あらかじめ送信メッセージを少なくとも 1つ書き込んでおく必要があります。リモート送信要求メッセージが受信され、正しく設定された送信 FIFO を指しているフィルタにそのメッセージが一致した場合、TXREQ がセットされます。これにより、そのオブジェクトは優先度に従って送信待ちのキューに入ります。

FIFOは、TXENと RTRENがセットされ、かつ非エンプティである場合にのみ送信されます。FIFO がエンプティの時にリモート送信要求が発生した場合、そのイベントはオーバーフローとして扱われ、RXOVIFビットがセットされます。

4.12 送信時の DLCとペイロードサイズの不一致PLSIZE は、送信 FIFO 内で特定のバイト数を予約します。CAN FD コントローラ モジュールは、DLC (データ長コード )とペイロードサイズの不一致を以下の通りに処理します。• DLCが予約されたペイロードより小さい場合、DLCが指定している数のデータバイトが送信されます。

• DLC が予約されたペイロードより大きい場合、本モジュールはメッセージを送信せずに、CiINT.IVMIF および CiBDIAG1.DLCMM フラグをセットし TXREQ フラグをクリアします。アプリケーションは TEFを使って、どのメッセージが送信されなかったか調べる事ができます。

DS20005678B_JP - p. 30 2018 Microchip Technology Inc.

Page 31: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

4.13 送信ステート図

図 4-1 に、メッセージが送信待ちのキューに入る様子を示します。 この図は、重要な送信フラグの動作 (セット /クリア )を示しています。• TXREQフラグのセットにより、メッセージは送信待ちのキューに入ります。• 送信順位が決定されます。最高優先度の TXPRIフラグを持つ FIFOまたは TXQが選択されます。FIFOまたは TXQ内の TXメッセージのインデックスが計算されます。

• TXメッセージの送信は保留されます。• 送信はバスがアイドルの時にのみ開始できます。• 保留中の送信は、SOFが送信される前にのみ中止可能です。• メッセージの送信中に、CAN FDコントローラ モジュールは以下を確認します。

- アービトレーション フィールド中の調停結果- 送信エラー

• TXREQは、TE FIFOまたは TXQ内の全てのメッセージが送信された後にのみクリアされます。各メッセージの送信後に、FIFO または TXQ のステータスフラグが更新されます。CiCON.STEF がセットされている場合、メッセージは TEF に保存され、タイムスタンプ機能が有効であればメッセージにタイムスタンプが付けられます。

• 調停に負けた場合、TX FIFOまたは TXQの TXLARBがセットされ、モジュールはメッセージの受信動作に切り換わります (7.0「メッセージの受信」参照 )。

• メッセージの送信中にエラーが検出された場合、エラーフレームが送信されると共に、適切なエラーフラグがセットされます。メッセージは、4.9「再送信の試行」の通りに再送信されます。

図 4-1: 送信ステート図

No

Abort: Set ABAT

Yes

Any TXREQ

IDLE

CalculateTX PriorityResult: Idx

TX Pending[Idx]Wait for Suspend

Time

TX In ProgressSOF

Transmit[Idx]

TX ERRSet TXERRIF flag

TX Attempts--

TX SuccessfulSet TXIF[Idx]

Clr TXREQ[Idx]

cSTEF==1?

Save Msg to TEF

TX ABORTSet TXABT[Idx]

ABORT ALLClr All TXREQSet All TXABT

Lost ArbitrationSet LARB[Idx]

Clr TXREQ[Idx]Set TXATIF[Idx]

RX Message

cTX Attempts Exhausted?

Re-Init TX Attempts

Based on new Idx

c

New TX Idx or Received a message?

2018 Microchip Technology Inc. DS20005678B_JP - p. 31

Page 32: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

4.14 送信 FIFOのリセットFIFOは以下によってリセットできます。• CiFIFOCONm.FRESETをセットする、または• モジュールをコンフィグレーション モードにする (OPMOD = 100)FIFOのリセットにより、ヘッドおよびテール ポインタと CiFIFOSTAmレジスタがリセットされます。CiFIFOCONmレジスタ内の設定は変更されません。FRESET を使って TX FIFO をリセットする前に、保留中の送信が存在しない事を確認する必要があります。

4.15 送信キュー (TXQ)のリセットTXQは以下によってリセットできます。• CiTXQCON.FRESETをセットする、または• モジュールをコンフィグレーション モードにする (OPMOD = 100)TXQのリセットにより、ヘッドおよびテール ポインタと CiTXQSTAレジスタがリセットされます。CiTXQCONレジスタ内の設定は変更されません。FRESET を使って TXQ をリセットする前に、保留中の送信が存在しない事を確認する必要があります。

4.16 メッセージ送信のサンプルコード

例 4-1のサンプルコードに、メッセージを送信する方法を示します。手順は以下の通りです。• FIFOが非フルである事を確認する• FIFOにメッセージを書き込む• FIFOをインクリメントしてフラッシュする

UINCと TXREQは同時にセットします。これにより、送信中の FIFOに新しいメッセージが追加された場合でも、FIFOから全てのメッセージが確実に送信されます。

例 4-1: TX FIFOからのメッセージ送信

DS20005678B_JP - p. 32 2018 Microchip Technology Inc.

Page 33: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

5.0 送信イベント FIFO (TEF)送信イベント FIFO (TEF)を使うと、メッセージが送信された順番と時刻を記録できます。TEFは受信 FIFOに似た動作をします。TEFは受信メッセージを保存する代わりに送信メッセージを保存します。メッセージは CiCON.STEFがセットされている場合にのみ保存されます。送信メッセージのシーケンス番号 (SEQ) が TEF オブジェクトに保存されます。ペイロードデータは保存されません。TEFTSEN がセットされている場合、送信メッセージにタイムスタンプが付けられます。

表 5-1 に TEF オブジェクトの詳細を示します。TEF オブジェクトの最初の 2 ワードは、送信メッセージ オブジェクトの複製を格納します。オプションにより、メッセージが送信された時のタイムスタンプを TEFオブジェクトに格納できます。

5.0.1 TEFオブジェクトの読み出しTEFオブジェクトを読み出す前に、アプリケーションは CiTEFSTAを読み出す事によって TEFがエンプティではない事を確認する必要があります。TEFNEIFがセットされていれば、TEFは非エンプティです。

TEF ユーザ アドレスは、次に読み出す TEF オブジェクトの RAM 内のアドレスを示します。RAM内の実際のアドレスは、式 5-1により求まります。TEFオブジェクトは TE0、TE1、TE2...の順番で読み出されます。

式 5-1: 次の TEFオブジェクトのアドレス

RAMから TEFオブジェクトが読み出された後に、CiTEFCON.UINCをセットする事によってTEFをインクリメントする必要があります。これにより、CAN FDコントローラ モジュールはFIFOのテールをインクリメントし、CiTEFUAを更新します。この時点で、TEFから次のメッセージを読み出せます。

5.0.2 送信イベント FIFO (TEF)のリセットTEFは以下によってリセットできます。• CiTEFCON.FRESETをセットする、または• モジュールをコンフィグレーション モードにする (OPMOD = 100)TEF のリセットにより、ヘッドおよびテール ポインタと CiTEFSTA レジスタがリセットされます。CiTEFCONレジスタ内の設定は変更されません。

A 0x400 CiTEFUA+=

2018 Microchip Technology Inc. DS20005678B_JP - p. 33

Page 34: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

表 5-1: 送信イベント FIFO (TEF)オブジェクトワード

Bit31/2315/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

TE0 31:24 -— -— SID11 EID<17:6>23:16 EID<12:5>15:8 EID<4:0> SID<10:8>7:0 SID<7:0>

TE1 31:24 SEQ<22:15>23:16 SEQ<14:7>15:8 SEQ<6:0> ESI7:0 FDF BRS RTR IDE DLC<3:0>

TE2 (1) 31:24 TXMSGTS<31:24>23:16 TXMSGTS<23:16>15:8 TXMSGTS<15:8>7:0 TXMSGTS<7:0>

bit TE0.31-30 未実装 : 「x」として読み出しbit TE0.29 SID11: CAN FDモードでは、r1を使って標準 IDを 12ビットに拡張できます。bit TE0.28-11 EID<17:0>: 拡張 IDbit TE0.10-0 SID<10:0>: 標準 IDbit TE1.31-9 SEQ<22:0>: 送信メッセージを追跡するためのシーケンス番号 (2)

bit TE1.8 ESI: エラーステータス インジケータ 1 = 送信中のノードはエラーパッシブ0 = 送信中のノードはエラーアクティブ

bit TE1.7 FDF: FDフレーム : CANフォーマットと CAN FDフォーマットを区別します。bit TE1.6 BRS: ビットレート切り換え : データ ビットレートを切り換えるかどうか選択します。bit TE1.5 RTR: リモート送信要求 : CAN FDでは使いません。bit TE1.4 IDE: ID拡張フラグ : 標準フォーマットと拡張フォーマットを区別します。bit TE1.3-0 DLC<3:0>: データ長コードbit TE2.31-0 TXMSGTS<31:0>: 送信メッセージ タイムスタンプNote 1: TE2 (TXMSGTS)は、CiFIFOCONm.TEFTSENがセットされているオブジェクトでのみ利用可能です。

2: MCP2517FDは SEQ<22:7>を実装していません。

DS20005678B_JP - p. 34 2018 Microchip Technology Inc.

Page 35: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

5.1 TEFのサンプルコード例 5-1のサンプルコードに、TEFからメッセージを読み出す方法を示します。手順は以下の通りです。

• TEFが非フルである事を確認する• TEFからメッセージを読み出す• UINCをセットする事によって TEFをインクリメントする• TEFメッセージを処理する

例 5-1: TEFからのメッセージの読み出し

2018 Microchip Technology Inc. DS20005678B_JP - p. 35

Page 36: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

6.0 メッセージのフィルタ処理

CAN ネットワーク上の全てのメッセージは全てのノードによって受信されます。必要なメッセージだけを処理するために、ハードウェア フィルタ機能が実装されています。CAN FDコントローラ モジュールは、必要なメッセージのみ受信するよう設定できます。本モジュールは32個のアクセプタンス フィルタを内蔵しています。各アクセプタンス フィルタは、フィルタオブジェクトとマスク オブジェクトを備えます。ユーザ アプリケーションは、フィルタ オブジェクトとマスク オブジェクトを設定する事により、指定した ID を持つメッセージだけを受信できます。

6.1 フィルタの設定

フィルタは CiFLTCONmレジスタで制御します。フィルタまたはマスク オブジェクトを変更するには、あらかじめ FLTEN ビットをクリアする事によってフィルタを無効にしておく必要があります。モジュールをコンフィグレーション モードにする必要はありません。フィルタ オブジェクトを変更した後に、バッファポインタ (FnBP) を初期化する必要があります。その後に、FLTEN ビットをセットする事によってフィルタを有効にできます。バッファポインタは、フィルタに一致した受信メッセージの保存先 FIFOを指します。

6.2 受信メッセージのフィルタ処理

CAN FD コントローラ モジュールは、メッセージのアービトレーション フィールドと最初の3 データバイトを受信した後にアクセプタンス フィルタ処理を開始します。図 6-1 に、メッセージのフィルタ処理のフローを示します。

本モジュールは、フィルタ 0 ( 最高優先度のフィルタ ) から順番に全てのフィルタを適用します。受信メッセージ アセンブリ バッファ (RXMAB)内のメッセージがフィルタおよびマスクと比較されます。メッセージがフィルタに一致し、かつエラーなしで受信された場合、そのメッセージは FnBP が指している RX FIFO に保存されます。アクセプタンス フィルタ処理は停止し、対応する RFIFがセットされます。リモート送信要求 (RTR)を受信した場合、FnBPTXが指している TX FIFOの TXREQビットがセットされます。

フィルタ処理は次のフィルタを使って続行され、以下のいずれかが発生すると RXOVIFがセットされます。

• フィルタは一致したが RX FIFOがフルであった• 同じメッセージに対して複数のフィルタが一致し、かつ一致した全ての RX FIFO がフルであった場合、最高優先度のフィルタが指している FIFOの RXOVIFのみがセットされます。

• RTR中に TX FIFO (TXEN = 1、RTREN = 1)がエンプティであった場合、RXVOIFがセットされます。

どのフィルタも一致しなかった場合、受信メッセージは破棄されます。

Note: フィルタに一致するメッセージを受信したものの、対応する FIFOが TX FIFO (TXEN = 1、RTREN = 0)であった場合、モジュールは受信メッセージを破棄します。

DS20005678B_JP - p. 36 2018 Microchip Technology Inc.

Page 37: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 6-1: メッセージ フィルタ処理のフロー

6.2.1 標準フレームまたは拡張フレームのフィルタ処理

図 6-2に、1つのフィルタ オブジェクトと RXMAB内の受信メッセージの間の照合フローを示します。

フィルタ オブジェクトは標準フレームのみ、拡張フレームのみ、両方のフレームを受け入れるよう設定できます。MIDE がクリアされている場合、標準フレームと拡張フレームの両方を受け入れます。

標準フレームのみを受け入れる場合、MIDEをセットし、EXIDEをクリアする必要があります。拡張フレームのみを受け入れる場合、MIDEと EXIDEの両方をセットする必要があります。

6.2.2 マスクビット

マスク オブジェクトは、受信 ID の中の一部のビットを無視するために使います。RXMAB 内のマスクアウトされたビット (マスク値が「0」のビット )は、フィルタ オブジェクト内のビットと比較されません。例えば、ID = 0/1/2/3の全てのメッセージを受信する必要がある場合、IDの下位2ビットをマスクアウトするためにマスク オブジェクトの対応するビットをクリアします。

Match Filter Object 0

Match Filter Object 1

No

FIFO Not Full?Idx = F0BP

Yes and Not RTR

No

Accept Message:Receive rest of Message

Store in FIFO [Idx]

Yes

FIFO Not Full?Idx = F1BP

Yes and Not RTR

No

Yes

Match Filter Object 31

FIFO Not Full?Idx = F31BP

Yes and Not RTR

No

Yes

Match Filter Object 2-30Do the same

No

Discard Message

Done

No

Yes and RTR

FIFO Not Empty AndTXEN==1 and RTREN==1?

Idx = F0BPNo

Set TXREQ[Idx]

Yes

Yes and RTR

FIFO Not Empty AndTXEN==1 and RTREN==1?

Idx = F1BP

Yes and RTR

FIFO Not Empty AndTXEN==1 and RTREN==1?

Idx = F31BP

No

No

Yes

Yes

Arbitration Done and Required Data Bytes

Received

2018 Microchip Technology Inc. DS20005678B_JP - p. 37

Page 38: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 6-2: フィルタ一致

Start Matching

CiMASKm.MIDE Set?

Check IDE:CiFLTOBJm.EXIDE == RXMAB.IDE?

Yes

NO Match

Match

No

RXMAB.IDE == 0?

Base Format:CiFLTOBJm.SID == RXMAB.SID,CiMASKm.MSID[i] = 0 are Don’t

Care

Yes

Extended Format:CiFLTOBJm.SID == RXMAB.SID,CiMASKm.MSID[i] = 0 are Don’t

Care

No

No

Yes

NO Match NO MatchNo No

CiFLTOBJm.EID == RXMAB.EID,CiMASKm.MEID[i] = 0 are Don’t

Care

Yes

NO MatchNoSID11:

CiTDC.SID11EN and CiMASKm.MSID11

Check SID11:CiFLTOBJ.SID11 ==

RXMAB.SID11?

Yes

Yes

Yes

Data Bytes:CiCON.DNCNT > 0 ?

No

Yes NO MatchNo

No

Calculate number of bits to compare:N = DNCNT

Calculate index:M = 18-N

Assemble Receive Data Bytes:RXDB = {RXMAB.DB0, RXMAB.DB1, RXMAB.DB2<7:6>}

Compare:CiFLTOBJm.EID<0:N> == RXDB<17:M> ?

CiMASKm.MEID[i] = 0 are Don’t Care

Yes

NO MatchNo

Match

Yes

DS20005678B_JP - p. 38 2018 Microchip Technology Inc.

Page 39: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

6.2.3 データバイトのフィルタ処理

標準フレームを受信するようフィルタを設定する場合、フィルタとマスクの EID部をデータバイトのフィルタ処理用に選択できます。CiCON内の DNCNTを使って、データバイト内で比較するデータビットの数を選択します。表 6-1 に、DNCNT の設定値の一覧を示します。この値により、比較されるデータビットの数 ( 比較されるフィルタビットとデータビット ) が決まります。

DNCNT = 0の場合、データバイトのフィルタ処理は無効です。DNCNTが非 0の場合、フィルタ処理は DNCNTで指定された数のデータビットに対して適用されます。フィルタが一致するには、SIDビットが一致し、かつn個のデータビットがEID<0:17>ビットと一致する必要があります。常にデータバイト 0<7>は EID<0>、データバイト 0<6>はEID<1>、データバイト 2<6>は EID<17>と比較されます。DNCNTが 18より大きい場合 (ユーザが EIDビットの総数を超えるビット数を指定した場合 )、フィルタの比較はデータの 18番目のビットで終了します。DNCNTが 16より大きく、かつ受信メッセージの DLC = 2 (ペイロードは 2データバイト )である場合、フィルタの比較はデータの 16番目のビットで終了します。DNCNTが 8より大きく、かつ受信メッセージの DLC = 1 (ペイロードは 1データバイト )である場合、フィルタの比較はデータの 8番目のビットで終了します。DNCNTが 0よりも大きく、かつ受信メッセージの DLC = 0 (データ ペイロードなし )である場合、フィルタの比較は IDで終了します。

6.2.4 12ビット標準 IDCiTDC.SID11EN をセットした場合、RSS を SID の bit 12 (LSb) として使う事ができます。12ビット SIDモードは、CAN FD ベースフレーム向けにのみ使えます。フィルタは SID11 とMSID11によって拡張されます。このモードでもデータバイトをフィルタ処理できます。

表 6-1: データバイト フィルタの設定

DNCNT<4:0> 比較される受信メッセージ データビット(Byte<bit>)

アクセプタンス フィルタに使う EIDビット

00000 比較しない 比較しない

00001 データバイト 0<7> EID<0>00010 データバイト 0<7:6> EID<0:1>00011 データバイト 0<7:5> EID<0:2>00100 データバイト 0<7:4> EID<0:3>00101 データバイト 0<7:3> EID<0:4>00110 データバイト 0<7:2> EID<0:5>00111 データバイト 0<7:1> EID<0:6>01000 データバイト 0<7:0> EID<0:7>01001 データバイト 0<7:0>とデータバイト 1<7> EID<0:8>01010 データバイト 0<7:0>とデータバイト 1<7:6> EID<0:9>01011 データバイト 0<7:0>とデータバイト 1<7:5> EID<0:10>01100 データバイト 0<7:0>とデータバイト 1<7:4> EID<0:11>01101 データバイト 0<7:0>とデータバイト 1<7:3> EID<0:12>01110 データバイト 0<7:0>とデータバイト 1<7:2> EID<0:13>01111 データバイト 0<7:0>とデータバイト 1<7:1> EID<0:14>10000 データバイト 0<7:0>とデータバイト 1<7:0> EID<0:15>10001 データバイト 0<7:0>、データバイト 1<7:0>、

データバイト 2<7>EID<0:16>

10010~ 11111 データバイト 0<7:0>、データバイト 1<7:0>、データバイト 2<7:6>

EID<0:17>

2018 Microchip Technology Inc. DS20005678B_JP - p. 39

Page 40: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 6-3に、受信メッセージ データペイロードの最初の 18データビットがメッセージ アクセプタンス フィルタ (CiFLTOBJm.EID)の対応する EIDビットと比較される様子を示します。受信メッセージの IDEビットは「0」である事が必要です。

図 6-3: DeviceNet™フィルタ処理を使った CAN動作

6.3 フィルタ設定のサンプルコード

例 6-1のサンプルコードに、SID = 0x300~ 0x30Fを持つ標準フレームと一致するフィルタを設定する方法を示します。手順は以下の通りです。

• フィルタを無効にする• フィルタ オブジェクトを設定する : SIDの指定、EXIDEのクリア• マスク オブジェクトを設定する : MSIDの指定、MIDEのセット (標準フレームのみ受け入れ )• フィルタを RX FIFOに割り当て、フィルタを有効にする

例 6-1: 標準フレームと一致するフィルタの設定

Note: 図に示した EIDビットに対する DeviceNet™ フィルタ処理の設定は DNCNT4:0 = 10010です。

SID10 SID9

SOF

IDENTIFIER11 Bits

EOF7 Bits 3 Bits

SID0

Accept/Reject Message

IFSDATA BYTE 0 DATA BYTE 1 DATA BYTE 2

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0Data Byte 0 Data Byte 1 Data Byte 2MESSAGE SID<10:0>

SID10 SID9 SID0 EID0 EID1 EID7 EID8 EID9 EID15 EID16 EID17

STANDARD MESSAGE DATA FRAME

MESSAGE ACCEPTANCE FILTERSID<10:0>

MESSAGE ACCEPTANCE FILTEREID<0:17>

DS20005678B_JP - p. 40 2018 Microchip Technology Inc.

Page 41: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

7.0 メッセージの受信

アプリケーションは、RX FIFO を受信用に使う前に、その FIFO を設定する必要があります(3.5.4「受信 FIFOの設定」と参照 )。加えて、アプリケーションは、少なくとも 1つのフィルタを設定して有効にする必要があります (6.1「フィルタの設定」参照 )。CAN FDコントローラ モジュールは CANバスを絶えず監視します。フィルタに一致するメッセージは、フィルタのポインタが指す RX FIFOに保存されます (6.2「受信メッセージのフィルタ処理」参照 )。メッセージデータは、受信メッセージ オブジェクト内に保存されます。

7.1 受信メッセージ オブジェクト表 7-1に、RX FIFOが使う受信メッセージ オブジェクトの詳細を示します。受信オブジェクトはメッセージ ID、制御ビット、ペイロードにより構成されます。• SID: 標準 ID (またはベース ID)• EID: IDの拡張• DLC: データ長コード : フレーム内のデータバイトの数を指定します (1.4.2「DLC (Data

Length Code)」参照 )。• IDE: ID拡張選択 : IDE = 0はベースフレームを受信した事を示し、IDE = 1は拡張フレームを受信した事を示します

• RTR: リモート送信要求 : このビットは、CAN 2.0フレーム内でのみ指定されます。このビットがセットされている場合、モジュールはフレームを送信する事で応答する必要があります。

• FDF: FDフォーマット選択 : このビットがセットされていれば CAN FDフレームを受信した事を意味します。クリアされていれば CAN 2.0フレームを受信した事を意味します。

• BRS: ビットレート切り換え : このビットがセットされている場合、DBRを使って CAN FDフレームを受信した事を意味します。このビットがクリアされている場合、NBRを使ってフレーム全体を受信した事を意味します。

• ESI: エラーステート インジケータ : ESIビットは送信ノードのエラーステータスを反映します。CAN FDフレーム内のリセッシブの ESIビットは送信中ノードがエラーパッシブである事を示し、ドミナントのESIビットは送信中ノードがエラーアクティブである事を示します。

• FILHIT: 受信メッセージが一致したフィルタの番号を示します。• RXMSGTS: 受信メッセージのタイムスタンプです。タイムスタンプは、CiFIFOCONm.RXTSENを使って各 RX FIFOで別々に有効にできます。タイムスタンプが無効の場合、受信メッセージ オブジェクトは RXMSGTSを格納しません。

• 受信バッファデータ : メッセージのペイロードを格納します。最大ペイロードサイズはCiFIFOCONm.PLSIZEで設定します。

7.1.1 受信メッセージ オブジェクトの読み出し受信メッセージ オブジェクトを読み出す前に、アプリケーションは CiFIFOSTAm レジスタを読み出す事によって RX FIFOがエンプティではない事を確認する必要があります。TFNRFNIFがセットされていれば、RX FIFOは非エンプティです。RX FIFOユーザ アドレスは、次に読み出す受信メッセージ オブジェクトの RAM内のアドレスを示します。RAM内の実際のアドレスは、式 7-1により求まります。受信メッセージ オブジェクトは R0、R1、R2...の順番で読み出されます。

式 7-1: 次のメッセージ オブジェクトのアドレス

受信メッセージ オブジェクトが RAMから読み出された後に、CiFIFOCONm.UINCをセットする事によって RX FIFO をインクリメントする必要があります。これにより、CAN FD コントローラ モジュールは FIFOのテールをインクリメントし、CiFIFOUAmを更新します。この時点で、アプリケーションは RX FIFOから次のメッセージを読み出す事ができます。

A 0x400 CiFIFOUAm+=

2018 Microchip Technology Inc. DS20005678B_JP - p. 41

Page 42: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

表 7-1: 受信メッセージ オブジェクトワード

Bit31/2315/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

R0 31:24 -— -— SID11 EID<17:6>23:16 EID<12:5>15:8 EID<4:0> SID<10:8>7:0 SID<7:0>

R1 31:24 -— -— -— -— -— -— -— -—23:16 -— -— -— -— -— -— -— -—15:8 FILHIT<4:0> -— -— ESI7:0 FDF BRS RTR IDE DLC<3:0>

R2 (2) 31:24 RXMSGTS<31:24>23:16 RXMSGTS<23:16>15:8 RXMSGTS<15:8>7:0 RXMSGTS<7:0>

R3 (1) 31:24 受信データバイト 323:16 受信データバイト 215:8 受信データバイト 17:0 受信データバイト 0

R4 31:24 受信データバイト 723:16 受信データバイト 615:8 受信データバイト 57:0 受信データバイト 4

Ri 31:24 受信データバイト n23:16 受信データバイト n-115:8 受信データバイト n-27:0 受信データバイト n-3

bit R0.31-30 未実装 : 「x」として読み出しbit R0.29 SID11: CAN FDモードでは、r1を使って標準 IDを 12ビットに拡張できます。bit R0.28-11 EID<17:0>: 拡張 IDbit R0.10-0 SID<10:0>: 標準 IDbit R1.31-16 未実装 : 「x」として読み出しbit R1.15-11 FILTHIT<4:0>: フィルタ一致 : 一致したフィルタの番号bit R1.10-9 未実装 : 「x」として読み出しbit R1.8 ESI: エラーステータス インジケータ

1 = 送信中のノードはエラーパッシブ0 = 送信中のノードはエラーアクティブ

bit R1.7 FDF: FDフレーム : CANフォーマットと CAN FDフォーマットを区別します。bit R1.6 BRS: ビットレート切り換え : データ ビットレートが切り換えられたかどうかを示します。bit R1.5 RTR: リモート送信要求 : CAN FDでは使いません。bit R1.4 IDE: ID拡張フラグ : 標準フォーマットと拡張フォーマットを区別します。bit R1.3-0 DLC<3:0>: データ長コードbit R2.31-0 RXMSGTS<31:0>: 受信メッセージ タイムスタンプNote 1: RXMOBJ: データバイト 0~ n: ペイロードサイズは各 FIFO制御レジスタ (CiFIFOCONm.PLSIZE<2:0>)で

別々に設定します。2: R2 (RXMSGTS)は、CiFIFOCONm.RXTSENがセットされているオブジェクトでのみ利用可能です。

DS20005678B_JP - p. 42 2018 Microchip Technology Inc.

Page 43: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

7.2 受信ステート図

図 7-1に、メッセージが受信される様子を示します。この図は、重要な受信フラグの動作 (セット /クリア )を示しています。• SOFが検出されるまで、CAN FDコントローラ モジュールはアイドルのままです。• SOFが検出された後に、モジュールはアービトレーション フィールドとコントロール フィールドを受信します。

• DNCNT と受信した DLC に基づいて、アクセプタンス フィルタ処理が始まります。詳細は図 6-1を参照してください。

• どのフィルタも一致しない場合、メッセージは受信されますが保存されません。• フィルタが一致した場合、デバイスはフィルタのポインタが指している受信オブジェクトがフルかどうかを確認します。

• 受信オブジェクトがフルであった場合、RXOVIFがセットされます。• 受信オブジェクトが非フルであった場合、残りのデータバイトが受信されて受信オブジェクトに保存されます。

• メッセージが完全に受信されて保存されると、タイムスタンプが付加され、受信フラグがセットされます。FIFOステータスフラグは更新され、FIFOヘッドがインクリメントします。

• メッセージの受信中にエラーが検出された場合、エラーフレームが送信され、適切なエラーフラグがセットされます。

図 7-1: 受信ステート図

Error

Yes

IDLE

ReceiveARBITRATION and CTRL field

Transmit Error Frame

Set Error Flags

cFilter Match?

Store Message to Object

Set FIFO status flags

cObject Full?

Set RXOVIF

cDNCNT>0 and DLC>0?

ReceiveDATA BYTE 0-3

Receive remaining

DATA BYTESAnd Store them

Receive Rest of Message

Receive Rest of Message

2018 Microchip Technology Inc. DS20005678B_JP - p. 43

Page 44: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

7.3 受信 FIFOのリセットFIFOは以下によってリセットできます。• CiFIFOCONm.FRESETをセットする、または• モジュールをコンフィグレーション モードにする (OPMOD = 100)FIFOのリセットにより、ヘッドおよびテール ポインタと CiFIFOSTAmレジスタがリセットされます。CiFIFOCONmレジスタ内の設定は変更されません。FRESETを使って RX FIFOをリセットする前に、有効などのフィルタもその FIFOを保存先として指定していない事を確認する必要があります。

7.4 受信中の DLCとペイロードサイズの不一致PLSIZEは、受信メッセージ オブジェクト内で特定のバイト数を予約します。本モジュールは、DLC (データ長コード )とペイロードサイズの不一致を以下の通りに処理します。• DLCの指定するバイト数が PLSIZEの指定するバイト数より小さい場合、受信メッセージバイトはパディングなしでメッセージ オブジェクトに保存されます。

• DLC の指定するバイト数が PLSIZE の指定するバイト数より大きい場合、受信メッセージ オブジェクトに収まるデータバイトだけが保存されます。受信メッセージ オブジェクトに収まり切らないデータバイトは破棄されます。本モジュールは、RAM 内の次のメッセージ オブジェクトが上書きされる事を防ぎます。本モジュールはメッセージを受信オブジェクトに保存し、RX FIFO ステータスフラグが更新されます。加えて、CiINT.IVMIF および CiBDIAG1.DLCMMフラグがセットされます。

7.5 メッセージ受信のサンプルコード

例 7-1のサンプルコードに、メッセージを受信する方法を示します。手順は以下の通りです。

• FIFOが非エンプティである事を確認する• FIFOからメッセージを読み出す• UINCをセットする事によって FIFOをインクリメントする• 受信メッセージを処理する

例 7-1: メッセージの受信

DS20005678B_JP - p. 44 2018 Microchip Technology Inc.

Page 45: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

8.0 FIFOの動作以下では、3.6「設定のためのサンプルコード」で使った設定に基づいて FIFOの動作を説明します。MCP25xxFDは表 8-1の通りに設定されていると想定します。TEFと TXQは有効です。FIFO1 は TX FIFO として設定され、FIFO2 は RX FIFO として設定されます。その他の FIFOは全て未設定です。 FIFO 内のオブジェクト数とペイロードサイズに基づいて開始アドレスが計算されます。TEFは常にアドレス 0x400から始まります。

表 8-1: FIFOの設定例

8.1 FIFOステータスフラグFIFO 1 ~ 31 は、送信 FIFO または受信 FIFO として設定できます。送信用にも受信用にもCiFIFOSTAm 内の同じステータスフラグが使われます。これらのステータスフラグの動作は、選択された設定に応じて異なります。

8.1.1 TX FIFOのステータスフラグ送信ステータスフラグには以下の 3つがあります。• TFEIF (TFERFFIF): 送信 FIFOエンプティ割り込みフラグ - FIFOがエンプティの時にセット• TFHIF (TFHRFHIF): 送信 FIFOハーフエンプティ割り込みフラグ - FIFOが 1/2フルに満たない時にセット

• TFNIF (TFNRFNIF): 送信 FIFO非フル割り込みフラグ - FIFOがフルではない時にセット送信 FIFO のステータスフラグは、FIFO に新しいメッセージ オブジェクトを書き込むための空き位置がある場合にセットされます。FIFOがリセットされた後、最初のメッセージ オブジェクトが書き込まれるまで、全てのステータスフラグはセットされています。FIFO がフルまで書き込まれると、全てのフラグがクリアされます。

8.1.2 RX FIFOのステータスフラグ受信ステータスフラグには以下の 3つがあります。• RFFIF (TFERFFIF): 受信 FIFOフル割り込みフラグ - FIFOがフルの時にセット• RFHIF (TFHRFHIF): 受信 FIFOハーフフル割り込みフラグ - FIFOが 1/2フル以上の時にセット• RFNIF (TFNRFNIF): 受信FIFO非エンプティ割り込みフラグ - FIFO内に1つ以上のメッセージが存在する時にセット

受信 FIFO のステータスフラグは、FIFO 内に受信メッセージが存在する時にセットされます。FIFO がリセットされた後、最初のメッセージが受信されるまで、全てのステータスフラグはクリアされています。FIFOがフルになると、全てのフラグがセットされます。

FIFOFIFO内のオブジェ

クト数

オブジェクト

あたりの

ペイロード

タイム

スタンプ

オブジェクト内

のバイト数

FIFO内のバイト数

開始アドレス

TEF 12 N/A Yes 12 144 0x400TXQ 8 32 N/A 40 320 0x490

FIFO1 5 64 N/A 72 360 0x5D0FIFO2 16 64 Yes 76 1216 0x738FIFO3 N/A 0xBF8

2018 Microchip Technology Inc. DS20005678B_JP - p. 45

Page 46: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

8.1.3 TXQステータスフラグTXQステータスフラグには以下の 2つがあります。• TXQEIF: TXQエンプティ割り込みフラグ - TXQがエンプティの時にセット• TXQNIF: TXQ非フル割り込みフラグ - FIFOがフルではない時にセットTXQのステータスフラグは、TXQに新しいメッセージ オブジェクトを書き込むための空き位置がある場合にセットされます。TXQ がリセットされた後、最初のメッセージ オブジェクトが書き込まれるまで、全てのステータスフラグはセットされています。TXQがフルまで書き込まれると、全てのフラグがクリアされます。

8.1.4 TEFステータスフラグTEFステータスフラグには以下の 4つがあります。• TEFFIF: TEFフル割り込みフラグ - TEFがフルの時にセット• TEFHIF: TEFハーフフル割り込みフラグ - TEFが 1/2フル以上の時にセット• TEFNEIF: TEF非エンプティ割り込みフラグ - TEF内に 1つ以上のメッセージが存在する時にセット

TEFのステータスフラグは、TEF内に送信メッセージが存在する時にセットされます。TEFがリセットされた後、最初のメッセージが保存されるまで、全てのステータスフラグはクリアされています。TEFがフルになると、全てのフラグがセットされます。

DS20005678B_JP - p. 46 2018 Microchip Technology Inc.

Page 47: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

8.2 送信 FIFOの動作FIFO 1が TX FIFOとして設定されていると想定します。C1FIFOCON1がこの FIFOを制御します。この FIFOのステータスフラグとインデックス (FIFOCI)は、C1FIFOSTA1に格納されます。次に書き込まれる送信メッセージ オブジェクトのユーザアドレスは、C1FIFOUA1に格納されます。 実際の RAMアドレスは式 4-1を使って求まります。図 8-1~図 8-6に、ステータスフラグ、ユーザアドレス、FIFOインデックスが更新される様子を示します。

図 8-1は、リセット後の FIFO 1の状態を示しています。メッセージ オブジェクト MO0~ MO4はエンプティです。全てのステータスフラグはセットされています。ユーザアドレスと FIFOインデックスはMO0を指しています。図 8-1: FIFO 1 - 初期状態

図 8-2 に、最初のメッセージ (MSG0) が書き込まれた後の FIFO 1 の状態を示します。MSG0はMO0に格納されます。ユーザ アプリケーションが C1FIFOCON1.UINCをセットする事で、FIFOヘッドが 1つ進みます。この時点でユーザ アドレスは MO1を指します。FIFOが非エンプティになったので、TFEIFはクリアされます。ユーザ アプリケーションは TXREQをセットする事でMSG0の送信を要求できます。

図 8-2: FIFO 1 - 最初のメッセージが書き込まれる

図 8-3に、MSG0 が送信された後の FIFO 1の状態を示します。FIFOは再びエンプティです。TFEIFはセットされ、TXREQはクリアされます。FIFOCIは MO1 (ユーザアドレス 0x218)を指します。

図 8-3: FIFO 1 - 最初のメッセージが送信される

MO0

MO1

MO2

MO3

MO4

C1FIFOUA1 = 0x1D0

C1FIFOSTA1:FIFOCI = 0TFEIF = 1TFHIF = 1TFNIF = 1

C1FIFOCON1:TXREQ = 0

MO0 / MSG0

MO1

MO2

MO3

MO4

C1FIFOUA1 = 0x218

C1FIFOSTA1:FIFOCI = 0TFEIF = 0TFHIF = 1TFNIF = 1

C1FIFOCON1:TXREQ = 1

MO1

MO2

MO3

MO4

C1FIFOUA1 = 0x218

C1FIFOSTA1:FIFOCI = 1TFEIF = 1TFHIF = 1TFNIF = 1

C1FIFOCON1:TXREQ = 0

MO0

2018 Microchip Technology Inc. DS20005678B_JP - p. 47

Page 48: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 8-4に、後続の 3個のメッセージ (MSG1~ MSG3)が書き込まれた後の FIFO 1の状態を示します。この時点でユーザ アドレスは MO4を指します。FIFOは 1/2フルを超えたため TFHIFはクリアされます。

図 8-4: FIFO 1 - 後続の 3個のメッセージが書き込まれる

図 8-5に、さらに 2個のメッセージ (MSG4と MSG5)が書き込まれた後の FIFO 1の状態を示します。この時点で C1FIFOUA1 は MO1 を指します。FIFO がフルになったので、全てのステータスフラグはクリアされます。ユーザアドレスと FIFOインデックスは MO1を指します。ユーザ アプリケーションは TXREQをセットする事でMSG1~MSG5の送信を要求できます。

図 8-5: FIFO 1 - FIFOがフルになるまで書き込まれる

図 8-6 に、MSG1 ~ MSG5 が送信された後の FIFO 1の状態を示します。FIFO は再びエンプティです。全てのステータスフラグがセットされ、TXREQ はクリアされます。ユーザアドレスと FIFOインデックスは再び MO1を指します。

図 8-6: FIFO 1 - FIFO内の全てのメッセージが送信される

MO1 / MSG1

MO2 /MSG2

MO3 / MSG3

MO4

C1FIFOUA1 = 0x2F0

C1FIFOSTA1:FIFOCI = 1TFEIF = 0TFHIF = 0TFNIF = 1

C1FIFOCON1:TXREQ = 0

MO0

MO1 / MSG1

MO2 / MSG2

MO3 / MSG3

MO4 / MSG4

C1FIFOUA1 = 0x218

C1FIFOSTA1:FIFOCI = 1TFEIF = 0TFHIF = 0TFNIF = 0

C1FIFOCON1:TXREQ = 1

MO0 / MSG5

MO1

MO2

MO3

MO4

C1FIFOUA1 = 0x218

C1FIFOSTA1:FIFOCI = 1TFEIF = 1TFHIF = 1TFNIF = 1

C1FIFOCON1:TXREQ = 0

MO0

DS20005678B_JP - p. 48 2018 Microchip Technology Inc.

Page 49: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

8.3 受信 FIFOの動作FIFO 2が RX FIFOとして設定されていると想定します。C1FIFOCON2がこの FIFOを制御します。この FIFOのステータスフラグとインデックス (FIFOCI)は、C1FIFOSTA2に格納されます。次に読み出されるメッセージ オブジェクトのユーザアドレスは、C1FIFOUA2に格納されます。 実際の RAMアドレスは式 7-1を使って求まります。図 8-7~図 8-14に、ステータスフラグ、ユーザアドレス、FIFOインデックスが更新される様子を示します。

図 8-7は、リセット後の FIFO 2の状態を示しています。メッセージ オブジェクトMO0~MO15はエンプティです。全てのステータスフラグはクリアされています。ユーザアドレスと FIFOインデックスはMO0を指します。

図 8-7: FIFO 2 - 初期状態

図 8-8に、最初のメッセージ (MSG0)を受信した後の FIFO 2の状態を示します。MSG0は MO0に格納されます。この時点で FIFOインデックスは MO1を指します。FIFOが非エンプティになったので、RFNIFはセットされます。

図 8-8: FIFO 2 - 最初のメッセージを受信する

図 8-9に、MSG0が読み出された後の FIFO 2の状態を示します。ユーザ アプリケーションはRAM からメッセージを読み出して C1FIFOCON2.UINC をセットします。ユーザ アドレスは1 つインクリメントして MO1 を指します。FIFO インデックスは変化しません。FIFO は再びエンプティです。全てのフラグはクリアされます。

図 8-9: FIFO 2 - 最初のメッセージが読み出される

MO0

MO1

MO2

MO15

C1FIFOUA2 = 0x338

C1FIFOSTA2:FIFOCI = 0RFFIF = 0RFHIF = 0RFNIF = 0RXOVIF = 0

MO0 / MSG0

MO1

MO2

MO15

C1FIFOUA2 = 0x338

C1FIFOSTA2:FIFOCI = 1RFFIF = 0RFHIF = 0RFNIF = 1RXOVIF = 0

MO1

MO2

MO15

C1FIFOUA2 = 0x384

C1FIFOSTA2:FIFOCI = 1RFFIF = 0RFHIF = 0RFNIF = 0RXOVIF = 0

MO0

2018 Microchip Technology Inc. DS20005678B_JP - p. 49

Page 50: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 8-10に、後続の 8個のメッセージ (MSG1~ MSG8)を受信した後の FIFO 2の状態を示します。ユーザ アドレスは MO1 を指したままです。FIFO が 1/2 フルになったので、RFNIF とRFHIFがセットされます。この時点で FIFOインデックスはMO9を指します。

図 8-10: FIFO 2 - 1/2フルになる

図 8-11に、さらに 7個のメッセージ (MSG5~ MSG15)を受信した後の FIFO 2の状態を示します。ユーザ アドレスは MO1 を指したままです。FIFO インデックスは MO0 を指します。RFNIFと RFHIFはセットされたままです。

図 8-11: FIFO 2 - 空き位置があと 1つになる

図 8-12に、さらに 1個のメッセージ (MSG16)を受信した後の FIFO 2の状態を示します。FIFOがフルになったので、全てのステータスフラグがセットされます。ユーザアドレスと FIFO インデックスはMO1を指します。

図 8-12: FIFO 2 - フルになる

MO1 / MSG1

MO2 / MSG2

MO9

C1FIFOUA2 = 0x384

C1FIFOSTA2:FIFOCI = 9RFFIF = 0RFHIF = 1RFNIF = 1RXOVIF = 0

MO0

MO8 / MSG8

MO15

MO10

MO1 / MSG1

MO2 / MSG2

C1FIFOUA2 = 0x384

C1FIFOSTA2:FIFOCI = 0RFFIF = 0RFHIF = 1RFNIF = 1RXOVIF = 0

MO0

MO15 / MSG15

MO1 / MSG1

MO2 / MSG2

C1FIFOUA2 = 0x384

C1FIFOSTA2:FIFOCI = 1RFFIF = 1RFHIF = 1RFNIF = 1RXOVIF = 0

MO0 / MSG16

MO15 / MSG15

DS20005678B_JP - p. 50 2018 Microchip Technology Inc.

Page 51: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 8-13に、フルの状態でさらに 1個のメッセージを受信した後の FIFO 2の状態を示します。FIFO 2 は既にフルであるため、オーバーフローが発生します。受信したメッセージは破棄され、RXOVIFがセットされます。ユーザアドレスと FIFOインデックスは変化しません。

図 8-13: FIFO 2 - オーバーフローが発生する

図 8-14 に、アプリケーションが RXOVIF をクリアして、2 個のメッセージを読み出した後のFIFO 2の状態を示します。FIFOはフルではなくなったため、RFFIFはクリアされます。ユーザ アドレスはMO3を指します。FIFOインデックスは変化しません。

図 8-14: FIFO 2 - 2個のメッセージが読み出される

MO1 / MSG1

MO2 / MSG2

C1FIFOUA2 = 0x384

C1FIFOSTA2:FIFOCI = 1RFFIF = 1RFHIF = 1RFNIF = 1RXOVIF = 1

MO0 / MSG16

MO15 / MSG15

MO3 / MSG3

MO4 / MSG4

C1FIFOUA2 = 0x41C

C1FIFOSTA2:FIFOCI = 1RFFIF = 0RFHIF = 1RFNIF = 1RXOVIF = 0

MO0 / MSG16

MO15 / MSG15

MO1

MO2

2018 Microchip Technology Inc. DS20005678B_JP - p. 51

Page 52: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

8.4 送信キュー (TXQ)の動作C1TXQCON が TXQ を制御します。TXQ のステータスフラグとインデックス (TXQCI) は、C1TXQSTA に格納されます。次に書き込まれる送信メッセージ オブジェクトのユーザアドレスは、C1TXQUAに格納されます。 CAN FD コントローラ モジュールは、TXQCI を使って、次に送信するメッセージを決定します。TXQCIは直線的にインクリメントしません。1つのメッセージが送信されるか TXREQがセットされるたびに、TXQCIが再計算されます。実際の RAMアドレスは式 4-1を使って求まります。図 8-15~図 8-20に、ステータスフラグとユーザアドレスが更新される様子を示します。ユーザ アプリケーションは TXQCIを使う必要がないため、図には TXQCIを示していません。図 8-15に、リセット後の TXQの状態を示します。メッセージ オブジェクト MO0~ MO7はエンプティです。全てのステータスフラグはセットされています。ユーザ アドレスはMO0を指します。

図 8-15: TXQ - 初期状態

図 8-16に、最初のメッセージ (MSG0)が書き込まれた後の TXQの状態を示します。MSG0はMO0に格納されます。ユーザ アプリケーションが C1TXQCON.UINCをセットする事で、FIFOヘッドが 1つ進みます。この時点でユーザ アドレスは MO1を指します。TXQはエンプティではなくなったため、TXQEIFはクリアされます。ユーザ アプリケーションは TXREQをセットする事でMSG0の送信を要求できます。

図 8-16: TXQ - 最初のメッセージが書き込まれる

MO0

MO1

MO2

MO7

C1TXQUA = 0x090

C1TXQSTA:TXQEIF = 1TXQNIF = 1

C1TXQCON:TXREQ = 0

MO0 / MSG0

MO1

MO2

MO7

C1TXQUA = 0x0B8

C1TXQSTA:TXQEIF = 0TXQNIF = 1

C1TXQCON:TXREQ = 1

DS20005678B_JP - p. 52 2018 Microchip Technology Inc.

Page 53: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 8-17 に、MSG0 が送信された後の TXQ の状態を示します。TXQ は再びエンプティです。TFEIFはセットされ、TXREQはクリアされます。UINCがセットされなかったため、ユーザアドレスはMO1を指したままです。

図 8-17: TXQ - 最初のメッセージが送信される

図 8-18に、MSG1が書き込まれ、UINCがセットされた後の TXQの状態を示します。この時点でユーザアドレスは次の空きメッセージ オブジェクト (MO0)を指します。

図 8-18: TXQ - 次のメッセージが書き込まれる

図 8-19に、さらに 6個のメッセージ (MSG2-MSG7)が書き込まれた後の TXQの状態を示します。この時点でユーザアドレスは次の空きメッセージ オブジェクト (MO7)を指します。

図 8-19: TXQ - さらに 6個のメッセージが書き込まれる

MO0

MO1

MO2

MO7

C1TXQUA = 0x0B8

C1TXQSTA:TXQEIF = 1TXQNIF = 1

C1TXQCON:TXREQ = 0

MO0

MO1 / MSG1

MO2

MO7

C1TXQUA = 0x090

C1TXQSTA:TXQEIF = 0TXQNIF = 1

C1TXQCON:TXREQ = 0

MO0 / MSG2

MO1 / MSG1

MO2 / MSG3

C1TXQUA = 0x1A8

C1TXQSTA:TXQEIF = 0TXQNIF = 1

C1TXQCON:TXREQ = 0

MO7

MO3 / MSG4

MO4 / MSG5

MO5 / MSG6

MO6 / MSG7

2018 Microchip Technology Inc. DS20005678B_JP - p. 53

Page 54: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 8-20に、MSG8が書き込まれ、UINCがセットされた後の TXQの状態を示します。TXQはフルになり、全てのフラグがクリアされます。ユーザ アドレスはMO0を指します。ユーザ アプリケーションが TXREQをセットします。各メッセージは、その IDの優先度に基づいて送信されます。

図 8-20: TXQ - フルになる

MO0 / MSG2

MO1 / MSG1

MO2 / MSG3

C1TXQUA = 0x090

C1TXQSTA:TXQEIF = 0TXQNIF = 0

C1TXQCON:TXREQ = 1

MO7 / MSG8

MO3 / MSG4

MO4 / MSG5

MO5 / MSG6

MO6 / MSG7

DS20005678B_JP - p. 54 2018 Microchip Technology Inc.

Page 55: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

8.5 送信イベント FIFO (TEF)の動作C1TEFCON が TEF を制御します。ステータスフラグは C1TEFSTA に格納されます。次に読み出されるメッセージ オブジェクトのユーザアドレスは、C1TEFUAに格納されます。 実際の RAMアドレスは式 5-1を使って求まります。図 8-21~図 8-28に、ステータスフラグとユーザアドレスが更新される様子を示します。TEFは送信されたメッセージを保存します。従って、フラグの動作は RX FIFOに似ています。図 8-21に、リセット後の TEFの状態を示します。メッセージ オブジェクトMO0~ MO11はエンプティです。全てのステータスフラグはクリアされています。ユーザ アドレスはMO0を指します。

図 8-21: TEF - 初期状態

図 8-22 に、最初の送信メッセージが書き込まれた後の TEF の状態を示します。MO0 は ID0(MSG0の ID)を格納します。TEFが非エンプティになったので、TEFNEIFはセットされます。ユーザ アドレスはMO0を指します。

図 8-22: TEF - 最初の送信メッセージが保存される

図 8-23に、ID0が読み出された後の TEFの状態を示します。ユーザ アプリケーションは、RAMから IDを読み出して C1TEFCON.UINCをセットします。ユーザ アドレスは 1つインクリメントしてMO1を指します。TEFは再びエンプティです。全てのフラグはクリアされています。

図 8-23: TEF - 最初の IDを読み出す

MO0

MO1

MO2

MO11

C1TEFUA = 0x000

C1TEFSTA:TEFFIF = 0TEFHIF = 0TEFNEIF = 0TEFOVIF = 0

MO1

MO2

MO11

C1TEFUA = 0x000

C1TEFSTA:TEFFIF = 0TEFHIF = 0TEFNEIF = 1TEFOVIF = 0

MO0 / ID0

MO0

MO1

MO2

MO11

C1TEFUA = 0x00C

C1TEFSTA:TEFFIF = 0TEFHIF = 0TEFNEIF = 0TEFOVIF = 0

2018 Microchip Technology Inc. DS20005678B_JP - p. 55

Page 56: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 8-24に、後続の 6個の送信メッセージ (MSG1-MSG6)が書き込まれた後の TEFの状態を示します。ユーザ アドレスは MO0 を指します。FIFO が 1/2 フルになったので、TEFNEIF とTEFHIFがセットされます。

図 8-24: TEF - 1/2フルになる

図 8-25に、さらに 5 個の送信メッセージ (MSG7-MSG11) が書き込まれた後の TEF の状態を示します。ユーザ アドレスは MO1を指したままです。TEFNEIFと TEFHIFはセットされたままです。

図 8-25: TEF - 空き位置があと 1つになる

図 8-26に、さらにもう 1個の送信メッセージ (MSG12)が書き込まれた後の TEFの状態を示します。TEFがフルになったので、全てのステータスフラグはセットされます。ユーザ アドレスはMO1を指します。

図 8-26: TEF - フルになる

MO1 / ID1

MO7

MO6 / ID6

MO8

MO0

MO11

C1TEFUA = 0x00C

C1TEFSTA:TEFFIF = 0TEFHIF = 1TEFNEIF = 1TEFOVIF = 0

MO2 / ID2

MO1 / ID1

MO11 / ID11

C1TEFUA = 0x00C

C1TEFSTA:TEFFIF = 0TEFHIF = 1TEFNEIF = 1TEFOVIF = 0

MO2 / ID2

MO0

MO1 / ID1

MO11 / ID11

C1TEFUA = 0x00C

C1TEFSTA:TEFFIF = 1TEFHIF = 1TEFNEIF = 1TEFOVIF = 0

MO2 / ID2

MO0 / ID12

DS20005678B_JP - p. 56 2018 Microchip Technology Inc.

Page 57: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 8-27に、フルの状態でさらに 1個の送信メッセージが書き込まれた後の TEFの状態を示します。TEFは既にフルであったため、オーバーフローが発生します。IDは破棄され、TEFOVIFがセットされます。ユーザアドレスは変化しません。

図 8-27: TEF - オーバーフローが発生する

図 8-28に、アプリケーションが TEFOVIFをクリアして、1個のメッセージを読み出した後のTEFの状態を示します。TEFはフルではなくなったため、TEFFIFはクリアされます。ユーザアドレスはMO2を指します。

図 8-28: TEF - フルの状態から 1個の IDを読み出す

MO1 / ID1

MO11 / ID11

C1TEFUA = 0x00C

C1TEFSTA:TEFFIF = 1TEFHIF = 1TEFNEIF = 1TEFOVIF = 1

MO2 / ID2

MO0 / ID12

MO11 / ID11

C1TEFUA = 0x018

C1TEFSTA:TEFFIF = 0TEFHIF = 1TEFNEIF = 1TEFOVIF = 0

MO2 / ID2

MO0 / ID12

MO1

MO3 / ID3

2018 Microchip Technology Inc. DS20005678B_JP - p. 57

Page 58: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

9.0 タイムスタンプ

CAN FDコントローラ モジュールはタイムベース カウンタ (TBC)を内蔵しています。TBCは32ビットのフリーランニング カウンタであり、SYSCLKの整数倍の周期でインクリメントし、0へロールオーバーします。• TBCのプリスケーラは CiTSCON.TBCPREで設定します。• CiTSCON.TBCENをセットすると TBCが有効になります。• TBCENをクリアすると TBCは停止してリセットされます。• CiTBCに書き込む前に、CiTSCON.TBCENをクリアする事によって TBCを無効にしておく必要があります。

• 送信イベント FIFO (TEF)内のメッセージにタイムスタンプを付けるには、CiTEFCON.TEFTSENをセットする必要があります。

• RX FIFO 内のメッセージにタイムスタンプを付けるには、その FIFO に対応するCiFIFOCONm.RXTSENをセットする必要があります。

• アプリケーションはいつでも CiTBC を読み出せます。どのようなマルチバイト カウンタでもそうですが、カウンタの 1つのバイトを読み出してから次のバイトを読み出すまでの間にカウンタがインクリメントしてしまう可能性があるため、アプリケーションはこの事に配慮する必要があります。

全てのタイプスタンプは 32ビットであるため、高分解能のシステム時刻同期用に使えます。TBCIETBCがセットされている場合、TBCがロールオーバーすると割り込みが生成されます。 メッセージのタイムスタンプはフレームの開始時または終了時に付ける事ができます。これはCiTSCON.TSEOFによって選択します。TSEOF = 0 の場合、CiTSCON.TSRESを使って CANFDフレームのタイムスタンプの位置 (SOFまたは resビット )を選択します。表 9-1に、タイムスタンプの基準点を示します。基準点で TBC の値 (CiTBC) がキャプチャされ、以下の通りにメッセージ オブジェクト内に保存されます。• 受信メッセージ オブジェクトの場合 : TBC値は RXMSGTSに保存されます (表 7-1)参照。• TEFオブジェクトの場合 : TBC値は TXMSGTSに保存されます (表 5-1参照 )。

表 9-1: タイムスタンプの基準点

9.1 TBC設定のサンプルコード例 9-1のサンプルコードに、TBCを設定する方法を示します。手順は以下の通りです。• TBCを無効にする• プリスケーラを設定する• 必要に応じて TBCを特定の値に設定する• TBCを有効にする

例 9-1: TBCの設定

フレーム CAN 2.0 CAN FD

TX開始時 SOFのサンプルポイント SOFのサンプルポイントまたは FDFの次のビットのサンプルポイント

RX開始時 SOFのサンプルポイント SOFのサンプルポイントまたは FDFの次のビットのサンプルポイント

TX有効時 EOFの最終ビットまでエラーなし EOFの最終ビットまでエラーなしRX有効時 EOFの最後から 2番目のビットま

でエラーなしEOFの最後から 2番目のビットまでエラーなし

DS20005678B_JP - p. 58 2018 Microchip Technology Inc.

Page 59: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

10.0 割り込み

割り込みは複数の階層に分類できます。下層の複数の割り込みは、上層で 1つの割り込みに統合されます。図 10-1に、割り込みの階層を示します。1. FIFO個別割り込み (FIFO Individual Interrupts)2. FIFO統合割り込み (FIFO Combined Interrupts)3. メイン割り込み (Main Interrupts)これらの割り込みは、以下の 3つのモジュール割り込みに統合されます。1. 受信割り込み (RX Interrupt)2. 送信割り込み (TX Interrupt)3. 情報割り込み (Info Interrupt)全てのモジュール割り込みは保持されます。すなわち、割り込み要求を解除するには、割り込みの原因となった条件をモジュール内でクリアする必要があります。

加えて、MCP25xxFDは以下のイベントによる割り込みを生成します。• SPI CRCエラー : フォーマットおよび CRCエラー• ECCエラー : シングルビット エラー訂正 (SEC)、ダブルビット エラー検出 (DED)

2018 Microchip Technology Inc. DS20005678B_JP - p. 59

Page 60: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

図 10-1: 割り込みの階層

31x

RFFIERFFIF

RFHIERFHIF

RFNIERFNIF

31 FIFOS

31xCiRXIF.RFIF<31:1>

CiTXQCON, CiTXQSTACiFIFOCONm, CiFIFOSTAm

CiINT.RXIECiINT.RXIF

31x

TFEIETFEIF

TFHIETFHIF

TFNIETFNIF

31 FIFOS

32xCiTXIF.TFIF<31:1>

CiINT.TXIECiINT.TXIF

31xRXOVIERXOVIF

31 FIFOS 31xCiRXOVIF.RFOVIF<31:1>

CiINT.RXOVIECiINT.RXOVIF

31xTXATIETXATIF

31 FIFOS 32xCiTXATIF.TFATIF<31:1>

CiINT.TXATIECiINT.TXATIF

TEFFIETEFFIF

TEFHIETEFHIF

TEFNEIETEFNEIF

1 FIFO CiINT.TEFIECiINT.TEFIF

CiINT.IVMIECiINT.IVMIF

CiINT.WAKIECiINT.WAKIF

CiINT.CERRIECiINT.CERRIF

CiINT.MODIECiINT.MODIF

CiINT.TBCIECiINT.TBCIF

CiINT.SERRIECiINT.SERRIF

FIFO Individual Interrupts

FIFO Combined Interrupts

Main Interrupts Interrupt Pins

TEFOVIETEFOVIF

RX Interrupt

TX Interrupt

Info Interrupt

CiTEFCONCiTEFSTA

CiINT.SPICRCIE

CiINT.ECCIECiINT.ECCIF

OR

FERRIEFERRIF

CRCERRIECRCERRIF

SECIESECIF

DEDIEDEDIF

MCP25xxFD

MCP25xxFD

1x

TXQEIETXQEIF

TXQNIETXQNIF

CiTXIF.TFIF<0>

1xTXATIETXATIF

1 TXQ CiTXATIF.TFATIF<0>

1 TXQ

CiINT.SPICRCIF

DS20005678B_JP - p. 60 2018 Microchip Technology Inc.

Page 61: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

10.1 FIFO個別割り込みCiFIFOCONmは FIFOの割り込みイネーブルビットを格納し、CiFIFOSTAmは FIFOの割り込みフラグを格納します。各 FIFOは、これらのレジスタを別々に備えます。

10.1.1 送信キュー (TXQ)割り込みCiTXQCON は TXQ の割り込みイネーブルビットを格納し、CiTXQSTA は TXQ の割り込みフラグを格納します。

TXQ割り込みは、TXQのステータスが変化した時に生成されます。TXQは以下の 2つの割り込み要因を備えます。

• TXQ非フル割り込み - TXQNIF• TXQエンプティ割り込み - TXQEIFこれらの割り込みは別々に有効にできます。アプリケーションによってこれらの割り込みをクリアする事はできません。これらの割り込みは、TXQの割り込み条件が終了した時にクリアされます。

これらの割り込み要因の論理和 (OR)が CiTXIF.TFIF<0>フラグに反映されます。

10.1.2 受信 FIFO割り込み - RFIF受信 FIFO割り込みは、受信 FIFOのステータスが変化した時に生成されます。受信 FIFOは以下の 3つの割り込み要因を備えます。• 受信 FIFOフル割り込み - RFFIF• 受信 FIFOハーフフル割り込み - RFHIF• 受信 FIFO非エンプティ割り込み - RFNIFこれらの割り込みは別々に有効にできます。アプリケーションによってこれらの割り込みをクリアする事はできません。これらの割り込みは FIFO の割り込み条件が終了した時にクリアされます。

これらの割り込み要因の論理和 (OR)が CiRXIF.RFIF<m>フラグに反映されます。

10.1.3 送信 FIFO割り込み - TFIF送信 FIFO割り込みは、送信 FIFOのステータスが変化した時に生成されます。送信 FIFOは以下の 3つの割り込み要因を備えます。• 送信 FIFO非フル割り込み - TFNIF• 送信 FIFOハーフエンプティ割り込み - TFHIF• 送信 FIFOエンプティ割り込み - TFEIFこれらの割り込みは別々に有効にできます。アプリケーションによってこれらの割り込みをクリアする事はできません。これらの割り込みは FIFO の割り込み条件が終了した時にクリアされます。

これらの割り込み要因の論理和 (OR)が CiTXIF.TFIF<m>フラグに反映されます。

10.1.4 受信 FIFOオーバーラン割り込み - RXOVIFメッセージを正常に受信したものの FIFOがフルであった場合、その FIFOに対応する RXOVIFがセットされます。このフラグはアプリケーションによってクリアする必要があります。

10.1.5 送信 FIFO再送信失敗割り込み - TXATIFメッセージの再送信がエラーによって失敗した場合、または設定された試行回数を使い果たしても再送信に成功しなかった場合、TXATIF がセットされます。このフラグはアプリケーションによってクリアする必要があります。

10.1.6 送信イベント FIFO割り込み - TEFIF送信イベント FIFO (TEF) 割り込みは、TEF のステータスが変化した時に生成されます。TEFは以下の 4つの割り込み要因を備えます。• TEFフル割り込み - TEFFIF• TEFハーフフル割り込み - TEFHIF• TEF非エンプティ割り込み - TEFNEIF• TEFオーバーラン割り込み - TEFOVIF

2018 Microchip Technology Inc. DS20005678B_JP - p. 61

Page 62: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

TEF割り込みは、受信 FIFO割り込みに似た動作をします。これらの割り込みは別々に有効にできます。 TEFFIF、TEFHIF、TEFNEIFをアプリケーションによってクリアする事はできません。これらの割り込みは TEFの割り込み条件が終了した時にクリアされます。TEFOVIFは、アプリケーションによってクリアする必要があります。これら 4つの割り込み要因の論理和 (OR)が CiINT.TEFIFフラグに反映されます。

10.2 MCP25xxFD SPI CRC割り込みCRCレジスタは、割り込みイネーブルビット (FERRIEおよび CRCERRIE)と割り込みステータスフラグ (FERRIFおよび CRCERRIF)を格納します。これらのステータスフラグはアプリケーションによってクリアする必要があります。

10.3 MCP25xxFD RAM ECC割り込みECCCONレジスタは、割り込みイネーブルビット (DEDIEと SECIE)を格納します。ECCSTAレジスタは、割り込みステータスフラグ (DEDIFと SECIF)を格納します。これらのステータスフラグは、アプリケーションによってクリアする必要があります。

10.4 FIFO個別割り込み以下の割り込みは FIFO個別割り込みです。• 全ての FIFOと TXQ: RFIF、TFIF、RFOVIF、TFATIFこれらの割り込みは、それぞれ以下のステータス レジスタにまとめて格納されます。 • CiRXIF、CiTXIF、CiRXOVIF、CiTXATIFこれらのステータス レジスタ内のビットは、以下の通りに各 FIFOに割り当てらます。 Bit 0: TXQ、Bit n: FIFO n (n = 1~ 31)Bit 0は TXQに割り当てられるため、CiRXIFと CiRXOVIFの Bit 0は予約済みビットです。アプリケーションは 1つのレジスタを読み出す事で、特定の割り込み (例 : RFIFのペンディング )に関する全ての FIFOのステータスを確認できます。FIFO割り込みは CiFIFOCONm内で有効にします。TXQ割り込みは CiTXQCON内で有効にします。FIFO割り込みのクリア方法は 10.1「FIFO個別割り込み」に記載しています。

10.5 メイン割り込み

CiINT レジスタは、全てのメイン割り込みを格納します。以下の割り込みは、全ての FIFO を論理和によって統合したメイン割り込みです。

RXIF、TXIF、RXOVIF、TXATIFこれらのフラグは読み出し専用であり、下層の割り込みを全てクリアする事によってのみクリアできます。

TEFIF は送信イベント FIFO で生成されます。このフラグは読み出し専用であり、下層の割り込みを全てクリアする事によってのみクリアできます。

CiINT内の全ての割り込みは別々に有効にできます。

10.5.1 無効メッセージ割り込み - IVMIFCAN バスエラーまたは DLC 不一致が直前のメッセージの送受信中に検出された場合、IVMIFがセットされます。CiBDIAG1 レジスタは、個々のエラーに対応するフラグを格納します。これらのフラグは、アプリケーションによってクリアする必要があります。

以下の CANバスエラーは、エラーフレームが送信された場合に割り込みをトリガします。 CRCエラー、スタッフビット エラー、フォームエラー、ビットエラー、ACKエラー受信メッセージの ESIがセットされていた場合、フラグはセットされません。

DS20005678B_JP - p. 62 2018 Microchip Technology Inc.

Page 63: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

10.5.2 復帰割り込み - WAKIFモジュールがスリープモード中の時にバス アクティビティが検出されると、WAKIF がセットされます。このフラグはアプリケーションによってクリアする必要があります。

10.5.3 CANバスエラー割り込み - CERRIFCiTRECレジスタは、ISO 11898-1:2015に従って、送受信中のエラーをカウントします。CERRIFフラグは、エラーカウンタ値に基づいてセットされます。このフラグは、アプリケーションによってクリアする必要があります。

CERRIFは、以下の条件によって TEC/RECカウンタがしきい値を超えるたびにセットされます。• TECまたは RECがエラー警告ステートしきい値を超えた• トランスミッタまたはレシーバがエラーパッシブ ステートへ移行した• トランスミッタがバス OFFステートへ移行した• トランスミッタまたはレシーバがエラーパッシブからエラーアクティブ ステートへ移行した• バスOFFからの復帰シーケンス後にモジュールがバスOFFからエラーアクティブ ステートへ移行した

ユーザが CERRIFをクリアすると、次にカウンタがしきい値を超えるまで、CERRIFはクリアされたままです。

10.5.4 CANモード変化割り込み - MODIFOPMOD ビットが変化すると、MODIF フラグがセットされます。このフラグは、アプリケーションによってクリアする必要があります。

10.5.5 CANタイマ割り込み - TBCIFタイムベース カウンタがロールオーバーすると、TBCIFがセットされます。このフラグは、アプリケーションによってクリアする必要があります。

10.5.6 システムエラー割り込み - SERRIFバス帯域幅エラー : バス帯域幅エラーは送受信中に発生します。 次のメッセージが届く前にモジュールが受信済みCANメッセージをRAMに書き込めなかった場合、受信メッセージ アセンブリ バッファ (RX MAB)でオーバーフローが発生します。 モジュールが送信メッセージ アセンブリ バッファ(TX MAB)に十分高速に書き込めないためにビットストリーム プロセッサに対して一貫したデータを提供できない場合、TX MAB のアンダーフローが発生します。

SERRIFフラグがセットされ、CiVEC.ICODEビットが 100 0101に設定されます。RX MABオーバーフロー エラーの処理 : 車載 OEMは RX MABオーバーフローを許容しません。オーバーフローを防ぐため、フレームフィルタ処理とデータ保存はできるだけ早期に (遅くとも受信メッセージのCRCフィールドが始まる時点で )開始します。FIFOステータスの更新は、EOF フィールドの 7番目のビットが始まるまで待つ必要があります。なぜなら、受信フレームはこの時点で初めて有効となるからです。次のメッセージのアービトレーション フィールドが終わる前に、メッセージを完全に保存して FIFOを更新する必要があります。RX MABオーバーフローが発生した場合、その原因となった新しいメッセージは破棄されます。モジュールは、既に受信およびフィルタ処理済みのメッセージの保存を続けます。その後に、モジュールはバス上の新しいメッセージを受信できるようになります。SERRIFにより、エラーの発生がアプリケーションに知らされます。

SERRIFは、CiINT.SERRIFに「0」を書き込む事によってクリアします。これにより、ICODEからの SERRIF条件もクリアされます。TX MABアンダーフロー エラーの処理 :ISO 11898-1:2015 は、MAC データの一貫性を要求しています。すなわち、送信メッセージは一貫性のあるデータを格納している必要があります。ECC エラーまたは TX MAB アンダーフローによってデータエラーが発生した場合、送信を開始しない事が必要です。送信が既に実行中である場合、送信を停止し、モジュールは制限動作モードまたはリッスンオンリー モード(CiCON.SERR2LOMで選択 )に移行する必要があります。本モジュールは、送信を停止して制限動作モードまたはリッスンオンリー モードに移行する事により、これらのエラーに対処します。TXCAN ピンは HIGH に固定されます。加えて、全ての TXREQ は無視されます。SERRIFにより、エラーの発生がアプリケーションに知らされます。モジュールはメッセージの受信を続けます。

2018 Microchip Technology Inc. DS20005678B_JP - p. 63

Page 64: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

10.5.7 SPI CRC割り込み - SPICRCIF個別の SPI CRCエラー割り込みは、SPICRCIFに統合されます。このフラグは読み出し専用であり、下層の割り込みを全てクリアする事によってのみクリアできます。

10.5.8 ECC割り込み - ECCIF個別の EEC エラー割り込みは、ECCIF に統合されます。このフラグは読み出し専用であり、下層の割り込みを全てクリアする事によってのみクリアできます。

10.6 割り込み処理

CAN FDコントローラ モジュールの割り込みは、以下の 2通りの方法で効率的に処理できます。• CiVECレジスタを使ってルックアップ テーブルを実装する• ステータス レジスタを使って最初に処理する割り込みを決定するアプリケーションは、これら 2つの方法を組み合わせて使う事もできます。

10.6.1 割り込みルックアップ テーブルCiVEC レジスタの ICODE および FILTHIT ビットにより、アプリケーションはルックアップテーブルを使って割り込みサービスルーチンを実装できます。

以下のビットフィールドにより、3本の割り込みピンをフルに活用できます。• TXCODE: どのオブジェクトで送信割り込みが保留中になっているのか示します。• RXCODE: どのオブジェクトで受信割り込みが保留中になっているのか示します。 送信割り込みと受信割り込み用に別々のルックアップ テーブルを実装する事もできます。複数のオブジェクトで割り込みが保留中である場合、番号の最も大きな割り込みまたは FIFOが RXCODE、TXCODE、ICODEで示されます。最高優先度の割り込みがクリアされると、次に優先度の高い割り込みが CiVECで示されます。RXCODE、TXCODE、ICODEは複数の割り込みフラグを入力とする組み合わせロジックを使って実装されています。

10.6.2 割り込みステータス レジスタCAN FDコントローラ モジュールは 31個の FIFOと 1個の TXQを備えています。割り込み優先度はモジュールによって決められているため、ICODEを使うと柔軟性に欠ける場合があります。従って、効率的な割り込み処理を可能にするため、本モジュールは以下の手段を提供します。

• CiINT は全てのメイン割り込み要因を格納します。アプリケーションは、どのカテゴリの割り込みが保留中なのか調べて、最初に処理する割り込み (例 : RXIF)を決定できます。

• 全ての FIFOの全てのカテゴリの割り込みは、以下のレジスタに統合されます。 CiRXIF、CiTXIF、CiRXOVIF、CiTXATIFアプリケーションは、1 つのレジスタを読み出す事によって、どの RFIF が保留中なのか調べる事ができます。これは TFIF、RXOVIF、TXATIFでも同じです。

• レジスタマップにおいて、割り込みステータス レジスタは 1つのブロック内に配置されています (CiVECを先頭に CiINT、CiRXIF、CiTXIF、CiRXOVIF、CiTXATIFの順番で配置 )。このため、1回の SPI読み出しアクセスで全てのステータス レジスタを読み出せます。

DS20005678B_JP - p. 64 2018 Microchip Technology Inc.

Page 65: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

10.7 割り込みフラグ

表 10-1に割り込みフラグの一覧を示します。この表は、割り込みのクリア方法も示しています。

表 10-1: 割り込みフラグ

フラグ レジスタ カテゴリモジュールによるクリア (1)

アプリケーションによるクリア

読み出し専用 (2) 概要

RFFIFRFHIFRFNIF

CiFIFOSTAm FIFO 〇 — — RX FIFO

TFNIFTFHIFTFEIF

CiFIFOSTAm FIFO 〇 — — TX FIFO

TXQNIFTXQEIF

CiTXQSTA TXQ 〇 — — 送信キュー

RXOVIF CiFIFOSTAm FIFO — 〇 — RXオーバーランTXATIF CiFIFOSTAm

CiTXQSTAFIFOTXQ

— 〇 — TX試行

TEFFIFTEFHIFTEFNEIF

CiTEFSTA FIFO 〇 — — TEF

TEFOVIF CiTEFSTA FIFO — 〇 — TEFオーバーランRFIF CiRXIF 統合 — — 〇 全 RX FIFOTFIF CiTXIF 統合 — — 〇 全 TX FIFORFOVIF CiRXOVIF 統合 — — 〇 全 RX FIFOの

オーバーラン

TFATIF CiTXATIF 統合 — — 〇 全 TX FIFOの試行FERRIFCRCERRIF

CRC MCP25xxFD — 〇 — SPI CRCエラー

SECIFDEDIF

ECCSTA MCP25xxFD — 〇 — ECCエラー

RXIF CiINT メイン — — 〇 RX TXIF CiINT メイン — — 〇 TX RXOVIF CiINT メイン — — 〇 RXオーバーランTXATIF CiINT メイン — — 〇 TX試行TEFIF CiINT メイン — — 〇 TEFIVMIF CiINT メイン — 〇 — 無効メッセージ

WAKIF CiINT メイン — 〇 — 復帰

CERRIF CiINT メイン — 〇 — CANバスエラーMODIF CiINT メイン — 〇 — モード変化

TBCIF CiINT メイン — 〇 — タイムベース カウンタ

SERRIF CiINT メイン — 〇 — システムエラー

SPICRCIF CiINT メイン — — 〇 SPI CRCエラーECCIF CiINT メイン — — 〇 RAM ECCエラーNote 1: これらのフラグは、CiFIFOCONm.UINC によって生じた FIFO の割り込み条件が終了した時点でクリアさ

れます。

2: これらのフラグは、下層の割り込みでクリアされる必要があります。

2018 Microchip Technology Inc. DS20005678B_JP - p. 65

Page 66: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

10.8 割り込みを設定および処理するためのサンプルコード

例 10-1のサンプルコードに、TXおよび RX割り込みを設定する方法を示します。手順は以下の通りです。

• モジュール割り込みをクリアするTX および RX 割り込みは、FIFO の割り込み条件が終了した時にクリアされます。従って、これらの割り込みをアプリケーションでクリアする事はできません。

• 送信キュー割り込みを有効にする• 受信 FIFO割り込みを有効にする• CiINT内で RXおよび TX割り込みを有効にする

例 10-1: 割り込みの設定

例 10-2のサンプルコードに、TX割り込みピン (INT0)を使って TXQが送信準備を完了しているかどうか確認する方法を示します。手順は以下の通りです。

• TXQが非フルである事を確認する• TXQにメッセージを書き込む• TXQをインクリメントおよびフラッシュする

UINCと TXREQは同時にセットされます。これにより、送信中の TXQにメッセージが追加された場合でも、TXQから全てのメッセージが確実に送信されます。

例 10-2: TX割り込みピンを使って TXQが送信準備を完了しているか確認する

DS20005678B_JP - p. 66 2018 Microchip Technology Inc.

Page 67: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

例 10-3のサンプルコードに、RX割り込みピン (INT1)を使って FIFO 2内に受信メッセージが存在するかどうか確認する方法を示します。手順は以下の通りです。

• FIFOが非エンプティである事を確認する• FIFOからメッセージを読み出す• UINCをセットする事によって FIFOをインクリメントする• 受信メッセージを処理する

例 10-3: RX割り込みピンを使って FIFO 2が新しいメッセージを格納しているか確認する

2018 Microchip Technology Inc. DS20005678B_JP - p. 67

Page 68: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

11.0 エラー対応

全ての CANコントローラは、バス上のメッセージの以下のエラーを確認します。 ビットエラー、スタッフエラー、CRCエラー、フォームエラー、ACKエラーコントローラがエラーを検出するとエラーフレームが送信され、通常はバス上のメッセージが破損します。エラーフレームは、常に定格ビットレートを使って送信されます。

エラーの検出と障害の切り離しは ISO 11898-1:2015で規定されています。CiTRECはエラーカウンタ (TEC と REC) を格納します。このレジスタはエラー警告ビットとエラーステートビットも格納します。TECと RECは ISO 11898-1:2015に従ってインクリメント /デクリメントします。 図 11-1 に、CAN FD コントローラ モジュールの各種エラーステートを示します。モジュールはエラーアクティブ ステートで起動します。TECまたは RECが 127を超えると、モジュールはエラーパッシブ ステートに移行します。TECが 255を超えると、モジュールはバス OFFステートに移行します。

エラーアクティブ ステート中にモジュールはアクティブエラー フレームを送信します。エラーパッシブ ステート中にモジュールはパッシブエラー フレームを送信します。モジュールがバス OFFステート中である場合、TXCANは常時 HIGHに駆動され、ドミナントビットは送信されません。

エラーパッシブ ステートへの移行を防ぐため、TECまたは REC が 96に達するとモジュールは CERRIF割り込みフラグを使ってアプリケーションに警告します (10.5.3「CANバスエラー割り込み - CERRIF」参照 )。これにより、アプリケーションはモジュールがエラーパッシブ ステートに移行する前に対応を取る事ができます。

図 11-1: エラーステート

バス診断レジスタは、CANバスの状態に関する追加の情報を提供します。• CiBDIAG0は、受信 /送信および定格 /データビットレート向けに個別のエラーカウンタを格納しています。これらのカウンタは、CiTREC レジスタ内のカウンタとは異なった動作をします。これらのカウンタはエラーのたびに 1つずつインクリメントするだけで、デクリメントはしません。しかし、レジスタに 0を書き込む事によってカウンタをクリアできます。

• CiBDIAG1 は、このレジスタが最後にクリアされた後に発生したエラーを追跡します。このレジスタはエラーなしメッセージ カウンタも格納します。このレジスタに 0を書き込む事によってフラグとカウンタをクリアできます。

エラーなしメッセージ カウンタは、エラーカウンタおよびエラーフラグと共に、バスの品質を判定するために使えます。

TEC> 255

ErrorActive

Error Passive Bus Off

DS20005678B_JP - p. 68 2018 Microchip Technology Inc.

Page 69: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

11.1 バス OFFステートからの復帰TECが 255を超えると、CiTREC.TXBOと CiINT.CERRIFがセットされます。モジュールはバス OFFステートに移行し、バス OFF復帰シーケンスを開始します。 バス OFF 復帰シーケンスは自動的に開始します。モジュールは、アイドル条件を 128 回検出した後にのみバス OFF ステートから復帰します (「ISO11898-1:2015: Bus Off Management」参照 )。モジュールは、バス OFFステートへの移行時に全ての送信 FIFOの FRESETをセットする事で、再送信が無制限に試行される事を防ぎます。アプリケーションは CERRIFによってバス OFFステートへの移行を検知し、必要に応じて新しいメッセージを送信待ちのキューに入れる事ができます。

モジュールは CERRIF によって、および CiBDIAG1.TXBOERR のセットによって、バス OFFステートの終了を知らせます。加えて、CiTRECがリセットされます。

2018 Microchip Technology Inc. DS20005678B_JP - p. 69

Page 70: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

12.0 補遺 A: MCP25xxFD canfdspi API

12.1 はじめに

API (Application Programming Interface) は MCP25xxFD 向けのファームウェア ライブラリを提供します。この APIは、以下のタスク向けに型定義と関数を提供する事により、CAN FDアプリケーションの開発を簡素化します。

• 設定 : ビット時間、FIFO、フィルタ、マスク• モード選択• メッセージ送信• メッセージ受信• イベント (割り込み )処理• エラーステートの追跡本 API は、SPI 転送向けに周辺モジュール ライブラリまたはドライバを使う事により、MCUに依存しません。本 APIは、1つのハードウェア依存 SPI関数 DRV_SPI_TransferDataだけを呼び出します。アプリケーションは SPI初期化関数と DRV_SPI_TransferDataを MCUに実装する必要があります。

12.2 抽象化モデル

本 API は、CAN FD コントローラ モジュールのハードウェア抽象化モデルを C 言語インターフェイスと一緒にアプリケーションに提供します (図 12-1参照 )。 また、CAN FD コントローラ モジュールと連携するためのインターフェイス ルーチンを提供します。1つのチャンネル (FIFO)は送信チャンネルまたは受信チャンネルのどちらかとして使えます。CANメッセージのペイロードのサイズは、8~ 64バイトに設定できます。1つのチャンネルのメッセージ オブジェクトの数 (FIFO内のメッセージの数 )は、1~ 32に設定できます。本 API は、ライブラリ インターフェイスを介してこれらのチャンネルとメッセージ オブジェクトへのアクセスを提供します。 メッセージを受信するために、アプリケーションはメッセージ アクセプタンス フィルタを設定して有効にする必要があります。これらのフィルタは、受信メッセージの IDフィールドと設定値を比較し、IDが一致した場合にメッセージを受け入れます。そのメッセージは、選択可能な受信チャンネルに保存されます。メッセージを受信するには、少なくとも 1つのメッセージアクセプタンス フィルタ オブジェクトとマスク オブジェクトを CAN FD コントローラ モジュール向けに有効にする必要があります。マスクを使う事で、比較処理中に無視するビットを指定できます。これにより、フィルタは特定レンジの IDを持つメッセージを受け入れる事ができます。 本 APIは、イベント (割り込み )を設定および処理するための関数を提供します。イベントはチャンネルレベルとモジュールレベルで生成できます。チャンネル イベントは、送信チャンネルと受信チャンネルによって生成されます。モジュール イベントは、CAN FDコントローラ モジュール内の各種要因 ( チャンネルを含む ) によって生成されます。各イベントは、個別に有効または無効にできます。いずれかのチャンネル イベントを有効にすると、CAN FD コントローラ モジュールはモジュール イベントを生成します。有効にされたモジュールレベル イベントにより、MCP25xxFD は 1 つまたは複数の割り込みピンをアサートします。MCP25xxFDの割り込みピンは、MCU の入力ピンに接続します。アプリケーションは割り込みピンをポーリングするか、これらの入力に対して外部割り込みを設定する事ができます。

DS20005678B_JP - p. 70 2018 Microchip Technology Inc.

Page 71: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

図 12-1: ハードウェア抽象化モデル

MCP25xxFD

DRV_SPI DMA TMRISR

SYS

CS

CANXCR

TXCANRXCAN

INT0:2SCKSDISDO

INT0:2

XSTBY

I/OPLIB

DRV_CANFDSPI

CAN FD Application

XSTBY

MCU Firmware

2018 Microchip Technology Inc. DS20005678B_JP - p. 71

Page 72: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

12.3 SPI通信の開始方法アプリケーションは、少なくとも以下の 2つの SPI関数をMCUに実装する必要があります。• 初期化 : この関数は SPIモジュールを初期化します。SPIの詳細な設定は、デバイス データシート内の「SPIインターフェイス」を参照してください。

• データ転送 : この関数は、nCSをアサートし、n個のデータバイトを読み書きし、nCSをディアサートします。

SPI転送時間を最小化するため、アプリケーションは SPI FIFOバッファまたは DMAを使ってSPIにデータを供給する必要があります。

12.3.1 SPI初期化サンプルコード例 12-1に、PIC32MX470F512H向けの初期化関数を示します。このコードは、MBLAB HarmonyConfigurator を使って生成しました。SPI はモード 0,0 のマスタとして設定されます。アプリケーションは、拡張バッファリング モードを使って SPI転送時間を最小化します。

例 12-1: SPI初期化関数

Note: SCK の周波数は、SYSYCLK の 1/2 以下である事が必要です。これは、SCK とSYSCLKが正しく同期するために必要です。

DS20005678B_JP - p. 72 2018 Microchip Technology Inc.

Page 73: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

12.3.2 SPIデータ転送のサンプルコード例 12-2 に、PIC32MX470F512H 向けのデータ転送関数を示します。このコードは、MBLABHarmony Configuratorを使って生成し、少し変更しました。この関数は 16バイトの SPI FIFOバッファを使います。最初に送信バッファに最大 16 バイトを書き込み、送信した数のバイトを読み戻す事で、SPIバイトと SPIバイトの間のデッドタイムを最小化します。アプリケーションは SpiTxDataポインタを使って送信データをこの関数に渡します。この関数は、読み出したデータをアプリケーションに返します (データは SpiRxDataが指す配列に格納されます )。全部で spiTransferSize個のバイトが転送されます。

例 12-2: SPIデータ転送関数

2018 Microchip Technology Inc. DS20005678B_JP - p. 73

Page 74: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

12.3.3 SPI読み書きアクセス関数例 12-3 に、一部の SPI アクセス関数を示します。これらのアクセス関数は、DRV_SPI_TransferDataを使ってMCP25xxFDに読み書きコマンドを送信します。これらの関数は、MCU と MCP25xxFD の間の通信用に使える他、DRV_SPI_TransferData 関数のテスト用に使えます。

例 12-3: SPIアクセス関数

DS20005678B_JP - p. 74 2018 Microchip Technology Inc.

Page 75: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

12.3.4 SPI通信の検証例 12-4のサンプルコードに、RAMに対する読み書きが正しく実行される事を検証する方法を示します。全ての SPIアクセス関数は DRV_SPI_TransferDataを使うため、DRV_SPI_TransferDataの検証には 1つのアクセス関数だけで済みます。

例 12-4: RAMアクセスを使った SPI通信の検証

例 12-5のサンプルコードに、レジスタに対する読み書きが正しく実行される事を検証する方法を示します。

例 12-5: レジスタアクセスを使った SPI通信の検証

2018 Microchip Technology Inc. DS20005678B_JP - p. 75

Page 76: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

13.0 関連文書

本書に関連する参考文書を以下に記載します。一部の文書は MCP25xxFDデバイスファミリ向けではありません。ただし概念は共通しており、変更が必要な場合や制限事項が存在する場合があるものの適用は可能です。以下は CAN FDコントローラ モジュールに関連する最新の文書です。

タイトル 文書番号

PIC32 ファミリ リファレンス マニュアル、セクション 34. コントローラ エリア ネットワーク(CAN) DS61154

PIC32 ファミリ リファレンス マニュアル、セクション 6. オシレータ DS61112Crystal Oscillator Basics and Crystal Selection for rfPIC® and PIC® MCU Devices DS00826Basic PIC® Microcontroller Oscillator Design DS00849Practical PIC® Microcontroller Oscillator Analysis and Design DS00943Making Your Oscillator Work DS00949

Note: MCP25xxFDデバイスファミリ関連アプリケーション ノートとサンプルコードはMicrochip社のウェブサイト (www.microchip.com)でご覧になれます。

DS20005678B_JP - p. 76 2018 Microchip Technology Inc.

Page 77: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

CAN FDコントローラ モジュール

14.0 改訂履歴

リビジョン B(2018年 5月 )• MCP2518FDを追加しました。• LPMの説明を追加しました。• 送信メッセージおよび TEFオブジェクトの SEQフィールドを増やしました。

リビジョン A (2017年 9月 )• 本書の初版です。

2018 Microchip Technology Inc. DS20005678B_JP - p. 77

Page 78: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

MCP25xxFDファミリ リファレンス マニュアル

NOTE:

DS20005678B_JP - p. 78 2018 Microchip Technology Inc.

Page 79: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

2018 Microchip Technology Inc. DS20005678B_JP - p. 79

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-5224-3042-1

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

Page 80: CAN FD コントローラ モジュール - Microchip …ww1.microchip.com/downloads/jp/DeviceDoc/20005678B_JP.pdf2018 Microchip Technology Inc. DS20005678B_JP - p. 3 CAN FDコントローラ

DS20005678B_JP - p. 80 2018 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

オースティン (TX)Tel:512-257-3370

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトNovi, MI Tel:248-848-4000

ヒューストン (TX) Tel:281-894-5983

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

ニューヨーク (NY) Tel:631-435-6000

サンノゼ (CA) Tel:408-735-9110

カナダ - トロントTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2943-5100Fax:852-2401-3431

オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 東莞

Tel:86-769-8702-9880

中国 - 杭州Tel:86-571-8792-8115 Fax:86-571-8792-8116

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

アジア / 太平洋

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - デュッセルドルフTel:49-2129-3766400

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

ドイツ - プフォルツハイムTel:49-7231-424750

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

イタリア - ベニスTel:39-049-7625286

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

ポーランド - ワルシャワTel:48-22-3325737

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

スウェーデン - ストックホルムTel:46-8-5090-4654

イギリス - ウォーキンガムTel:44-118-921-5800Fax:44-118-921-5820

各国の営業所とサービス

01/27/15