注意 : この日本語版文書は参考資料としてご利用ください 最新情報は必ずオリジナルの英語版をご参照願います AN1817 クラス B アプリケーションで拡張コア PIC16F1XXX のハードウェアまたはソフトウェア CRC を使う方法 著者 : 1.0 はじめに Corey Simoncic Microchip Technology Inc. 安全が重視されるアプリケーションでフォルトを検出するためにマイクロコントローラでクラス B 安全規格ライブラリルーチンを使う機会が増えています マイクロコントローラのプログラムメモリのフォルトは 主に IEC 60730 規格で定義された巡回冗長検査 (CRC) を使って検出します CRC を使って周期的なチェックを実行する事により プログラムメモリの破損によるアプリケーションフォルトを防止できます 本書では クラス B 安全規格ソフトウェアライブラリに含まれるソフトウェア CRC と一部のマイクロコントローラ ( 本書で取り上げるのは PIC16F161X ファミリ ) が内蔵するハードウェア CRC を実装する方法について説明します 本書で紹介するどちらの方法も IEC 60730 規格 H.2.19.3.2 の要件を満たしており 不変メモリのテストで全ての 1 ビットフォルトを 99.6% の網羅率で検出できます クラス B の詳細と完全なサンプルコードについては 下記 URL を参照してください www.microchip.com/classb CRC アルゴリズムの詳細は A Painless Guide on CRC Algorithms (Ross N. Williams 著 1993 年 8 月 19 日 ) を参照してください 1.1 巡回冗長検査 (CRC) CRC は多項式の長除法に似た計算方法を使い 多項式の長除法での剰余にあたるチェック値を求めます 除数には CRC 多項式と呼ばれるものを使います CRC 多項式には 個々のデータストリームでエラーを最大限検出できるような多項式を選びます 本書では 図 2 に示す CRC-16-ANSI を CRC 多項式として使います これ以外の有名な CRC アルゴリズムとして CRC-16-CCITT があります このアルゴリズムは主に通信用 CRC として使います チェック値をクラス B アプリケーションで使う場合 最初に CRC を実行し その後周期的に CRC を実行してチェック値が変化しない事を確認します 1.2 CRC の実装 CRC の一般的な実装方法にはいくつか種類があります CRC のハードウェア実装として最も一般的なのは線形帰還シフトレジスタ (LFSR) です CRC-16-ANSI の LFSR を図 2 に示します この実装では CRC アルゴリズムに応じた適切な位置に XOR ゲートを配置し データストリームを CRC に入力します CRC のソフトウェア実装にはテーブルを使う方法が一般的です しかしこの手法は多くのメモリを使うため メモリ容量の小さい PIC16 では効率が良くありません クラス B 安全規格ソフトウェアライブラリでは ソフトウェア CRC を実行するのに並列計算法を使っています これは 複数形態のパリティによって決まるビットに対して XOR を選択的に実行します 1.3 CRC エラー検出 CRC 計算に使う多項式は なるべく多くのビットエラーを検出できるものを選びます CRC-16-CCITT や CRC-16-ANSI 等の一般的な CRC 多項式は エラー検出の網羅率が最大となるように設計されています これらの多項式は 1 ビットエラー 2 ビットエラー 奇数ビットエラー バーストエラーを全て検出できるように設計されています これら以外のエラーに対する有効性についてはまだ結論が出ておらず 本稿では取り上げません 1.4 CRC の用語 多項式 CRC アルゴリズムで使う除数です CRC は主に多項式の違いで区別します 初期値 CRC 計算を開始する値です エラーを最大限に検出できるようにするため ほとんどの CRC アルゴリズムには定義済みの初期値があります ゼロ付加 データシーケンスの末尾にゼロを付加して CRC 計算を行います エンディアン CRC 計算式に入力するビット順を決定します MSb ファーストと LSb ファーストがあります チェック値 CRC 計算で求める値で チェックサムまたは剰余とも呼びます 2015 Microchip Technology Inc. DS00001817A_JP - p.1
1.5 クラス B で使う CRC 図 1: クラス B フローチャート 本書では CRC で使う用語を以下のように定義します 多項式 : CRC-16-ANSI 初期値 : 0xFFFF ゼロ付加 : 使う エンディアン : MSb ファースト 1.6 クラス B 組み込みアプリケーションでの CRC の利用 PIC16F1613 等を使った組み込みアプリケーションのプログラムメモリを検査する方法として CRC は高い精度と信頼性を備えます 図 1 に 代表的なアプリケーションで CRC( およびその他のクラス B テスト ) を使う場合の基本フローを示します 本書と一緒に提供している CRC 計算コードを使ってチェックサムを計算し デバイスに書き込みます チェック値はプログラムメモリの最後の 2 つのアドレスに書き込みます CRC を計算するたびに このチェック値と比較します CLASS B Start-up Tests CRC entire Memory Range except last 2 words (1) Is Check Value Correct? Yes No Application Initialization Application Main Loop CLASS B Periodic Tests CRC entire Memory Range except last 2 words (1) Error: Set Application in controlled state and set appropriate error flags Is Check Value Correct? No Yes Note 1: 最後の 2 つのアドレスにチェック値を格納します 図 2: CRC LFSR Data in Linear Feedback Shift Register for CRC-16-ANSI x 16 + x 15 + x 2 + 1 Augmentation Mode ON b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 Augmentation Mode OFF Data in b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 DS00001817A_JP - p.2 2015 Microchip Technology Inc.
2.0 クラス B アプリケーションでの CRC モジュールの使い方 PIC16F161X ファミリはハードウェア CRC モジュールを内蔵しています このセクションでは クラス B アプリケーションで CRC モジュールを使う方法を サンプルコードを示しながら手順を追って説明します PIC16F161X の CRC モジュールはメモリスキャナを備えています このメモリスキャナを使うと デバイスのフラッシュプログラムメモリから CRC モジュールに直接データを書き込めます PIC16F1613 のハードウェア CRC を使うには まず CRC とメモリスキャナのレジスタを設定する必要があります 詳細は PIC16F1613 のデータシート (DS40001737) セクション 11.0 を参照してください 2.1 CRC モジュールの設定 CRC-16 の多項式 : CRCXORH = 0b10000000; CRCXORL = 0b00000101; 最上位ビットは必ず 1 であるため モジュールが自動的に実装します 初期値 : CRCACCH = 0b11111111; CRCACCL = 0b11111111; ゼロ付加有効 : CRCCON0bits.ACCM = 1; エンディアン (MSb から順にシフト ): CRCCON0bits.SHIFTM = 0; この CRC モジュールは 多項式の種類とデータストリングの長さを幅広くサポートする柔軟な設計を採用しています このため CRC モジュールで使う多項式の長さとデータ長を設定しておく必要があります 多項式の長さが 16 ビット : CRCCON1bits.PLEN = 0b1111; データ長が 16 ビット : CRCCON1bits.DLEN = 0b1111; Note: PIC16F1613 のプログラムメモリの実際のデータ長は 14 ビットです ここで 16 ビットの長さを選択しているのは チェック値を CRC カリキュレータおよびソフトウェア CRC と比較できるようにするためです このため プログラムメモリの各ワードに 0 を 2 つ追加して 16 ビットワードとしています 詳細は例 1 を参照してください 2015 Microchip Technology Inc. DS00001817A_JP - p.3
2.2 メモリスキャナの設定 CRC は安全が重視されるタスクであるため メモリスキャナはバーストモードで使います つまり CRC 実行中はCPUの全機能が停止します 例えば8 MHz FOSC の場合 メモリパネル全体 (2000 プログラムワード ) に対して CRC を実行すると 4.086 ms の間 CPU が停止します バーストモード : SCANCON0bits.MODE = 0b01; 4.086 ms が長過ぎる場合 以下のスキャナ制御ビットをセットすると割り込み中はスキャナが停止します こうすると 安全に関連する重要な割り込みを処理できます オプションの割り込みサービス : SCANCON0bits.INTM = 1; メモリスキャナ設定の最後は 開始アドレスと終了アドレスを設定します SCANLADRH:L レジスタペアがスキャン開始アドレスを格納します SCANHADRH:L レジスタペアがスキャン終了アドレスを格納します スキャン中 SCANLADR レジスタペアがインクリメントして現在取得中のアドレスを示します 例 1 では 最後の 2 つのアドレスに計算で求めたチェック値を格納しています 開始アドレス : SCANLADRH = 0x00; SCANLADRL = 0xFD; 終了アドレス : SCANHADRH = 0x07; SCANHADRL = 0xFB; 例 1: CRC モジュールのコード uint16_t HWCRC (uint16_t lastaddress) { uint16_t HWCRCresult; CRCACCL = 0xFF; //Seed with 0xFFFF CRCACCH = 0xFF; CRCXORH = 0x80; //using CRC-16-ANSI 0x8005 CRCXORL = 0x05; CRCCON1bits.DLEN = 15; //using 16 bit data length to match the Software CRC //the most-significant 2 bits will be treated as 0. CRCCON1bits.PLEN = 15; //using the maximum 17-bit polynomial (-2) CRCCON0bits.ACCM = 1; //turn on augmented zeros CRCCON0bits.SHIFTM = 0; //MSb-first (normal) SCANCON0bits.MODE = 0b01; //turn on "Burst mode" to stop all //other execution until CRC complete SCANLADRH = 0x00; //set the first address for memory scan SCANLADRL = 0x00; SCANHADRH = lastaddress >> 8; //set the last address for memory scan SCANHADRL = lastaddress; SCANCON0bits.EN = 1; CRCCON0bits.EN = 1; CRCCON0bits.CRCGO = 1; //Turn on the CRC SCANCON0bits.SCANGO = 1; //Turn on the scan to begin the CRC //This should halt CPU Execution until the Scanner is complete and the final //memory location is in the CRC while(crccon0bits.busy); } HWCRCresult = ((CRCACCH<<8) CRCACCL); return HWCRCresult; DS00001817A_JP - p.4 2015 Microchip Technology Inc.
2.3 CRC の実行 以上で CRC とスキャナの両方が指定メモリ領域に対して CRC-16-ANSI アルゴリズムを実行できるように設定しました 次に CRC およびスキャナモジュールを有効にします まず CRCGO ビットをセットして CRC を開始し 次に SCANGO ビットをセットします スキャナがバーストモードに設定されているため CPU は通常のコード実行を停止します ( ただし前述のように割り込みを有効にした場合を除く ) CPU は約 4.086 ms の間シャットダウンします CRC の動作が完了するとCRCCON0レジスタのBUSYビットがハードウェアによってクリアされます このビットがクリアされていれば最終的なチェック値が CRCACCH:L レジスタペアに格納されています 2.4 CRC モジュールのタイミング CRC モジュールのタイミングは データ幅 FOSC スキャン対象のアドレスの数で異なります 16 ビットデータ幅の場合 CRC はプログラムメモリ 1 ワードのテストに 4 命令サイクルを必要とします フラッシュメモリの 2046 アドレスをテストする場合 2046*4 命令サイクルに加え 呼び出しとリターンのための命令もいくつか必要です 本書の例では 8 MHz で 8211 命令サイクルを必要とし 4 ms 強かかります このタイミングは デバイス内蔵の信号計測タイマ (SMT) を使って求めました SMT を使って CRC またはその他のモジュールのタイミングを取得する方法は補遺 B: SMT のタイミング を参照してください 2015 Microchip Technology Inc. DS00001817A_JP - p.5
3.0 CRC カリキュレータ 本書では 複数の多項式および CRC モジュールの全機能をサポートした使いやすい CRC カリキュレータも取り上げます このツールを使って CRC モジュールとクラス B 安全規格ソフトウェアライブラリによる CRC 計算結果を検証します 3.1 特長 この CRC カリキュレータは CRC モジュールの全機能を備えています 複数の多項式をサポートし ゼロ付加モードとエンディアンを変更できる他 オプションでデータとアキュムレータの幅も設定できます CRC カリキュレータにデータを入力する方法は 2 通りあり ます 1 つは右側の [Data] 列にデータを手入力する方法です もう 1 つは MPLAB X IDE 等から 16 進数値ファイルをインポートする方法です (Section 3.3 MPLAB X IDE を使ってデータを入力する 参照 ) 3.2 CRC-16-ANSI 用の設定 CRC カリキュレータを CRC-16-ANSI 向けに設定するには カリキュレータの設定をいくつか既定値から変える必要があります まず [Polynomial] プルダウンメニューで 0xC002/0x8005 ANSI-16 16bits を選択します 次に [Accumulator] の下の [F] ボタンを押して初期値を 0xFFFF に設定します 最後に [Data Width] を 16 に設定します その他は既定値のままとします ( 図 3 参照 ) 図 3: CRC-16-ANSI 用の CRC カリキュレータの設定 3.3 MPLAB X IDE を使ってデータを入力する MPLAB X IDE のプログラムメモリ表示を使うと CRC カリキュレータの [Data] 列に簡単に入力できます まず MPLAB X IDE でプログラムメモリ表示を開きます ( 図 4 参照 ) 次に 必要なオペコードを選択し コピー (Windows の場合は Ctrl+C) します ( 図 5 参照 ) クリップボードにコピーされたオペコードをテキストファイルにペーストします ( 図 6 参照 ) このファイルを保存し CRC カリキュレータを開いて [File]>[Import File] を選択します ( 図 7 参照 ) 上で保存したファイルを選択すると MPLAB X IDE プロジェクトからコピーしたオペコードが [Data] 列に入力されます DS00001817A_JP - p.6 2015 Microchip Technology Inc.
図 4: プログラムメモリ表示 図 5: プログラムメモリからオペコードをコピー 2015 Microchip Technology Inc. DS00001817A_JP - p.7
図 6: オペコードリスト 図 7: ファイルのインポート DS00001817A_JP - p.8 2015 Microchip Technology Inc.
3.4 チェック値の計算 [Data] 列に必要な情報を入力したら [Accumulate] ボタンをクリックします すると [Accumulator (hex)] テキストボックスにチェック値が表示されます [Values] 欄には CRC を使って計算した総ワード数が表示されます [Data Entry] セクションの [Accum] 列は 各データワードを CRC に入力した後のアキュムレータの値を表示します この情報はデバッグ時に便利です ( 図 8 参照 ) 図 8: CRC カリキュレータを使った最終チェック値生成 2015 Microchip Technology Inc. DS00001817A_JP - p.9
4.0 クラス B 安全規格ソフトウェアライブラリの CRC 関数の使い方 このセクションでは ライブラリからフラッシュプログラムメモリの CRC 関数を実装する方法について説明します クラス B 安全規格ソフトウェアライブラリは フラッシュプログラムメモリと EEPROM をテストするためのソフトウェア実装 CRC 関数を提供しています CRC モジュールとは異なり ソフトウェア CRC は CRC-16-ANSI アルゴリズムのみをサポートします クラスB 安全規格ソフトウェアライブラリの使い方は DS00001799 を参照してください この関数には 3 つの引数 ( テスト開始アドレス テスト長 CRC アルゴリズムのシード値 ) があります CRC モジュールと同じ動作とするため 引数に以下の値を設定します uint16_t FlashAddress = 0x00 uint16_t Flashlength = 0x07FC uint16_t crcseed = 0xFFFF Note: テストの長さは 開始アドレスを含む値を指定します テストの戻り値は 16 ビットのチェック値です 詳細は例 2 を参照してください 4.1 API フラッシュメモリ全体に CRC テストを実行するには 以下の関数を呼び出します CLASSB_CRCFlashTest( ); 例 2: CRC ライブラリのコード uint16_t flashaddress = 0x00; uint16_t flashlength = 0x07FC; uint16_t crcseed = 0xFFFF; uint16_t CRC-libraryResult; CRC_libraryResult = CLASSB_CRCFlashTest(myAddress,length,crcSeed); 4.2 ソフトウェア CRC のタイミング CRC モジュールで 8172 命令サイクルを必要とするメモリ量の場合 ソフトウェア CRC では 216,956 命令サイクルが必要です これは 108.478 ms に相当します DS00001817A_JP - p.10 2015 Microchip Technology Inc.
5.0 チェック値を使ったエラーの検出方法 CRC カリキュレータを使うと 参照チェック値をデバイスにプログラミングできます この参照チェック値を CRC モジュールまたはクラス B 安全規格ソフトウェアライブラリの CRC 関数で求めたチェック値と周期的に比較します これら 2 つの値が一致した場合 プログラムメモリに障害が発生していないと判断できます これら 2 つの値が一致しなかった場合 メモリが破損した事を意味しており対処が必要です 校正またはその他のランタイム値がプログラムメモリに格納されていて参照チェック値を使えない場合 2 回 CRC を実行して 2 つのチェック値を比較する事もできます その場合 1 回目のチェック値を PIC MCU の自己書き込み機能を使ってフラッシュプログラムメモリまたは SRAM に格納します CRC アルゴリズムの性質上 エラー発生箇所は特定できません アプリケーションに応じて いくつか対処方法が考えられます エラーフラグをセットして動作を停止する デバイスをリセット状態に保持する デバイスを無限ループに移行させてその他全ての動作を停止する エラー信号を送信してコンシューマにエラーを通知する 5.1 参照チェック値 CRC カリキュレータを使って求めた参照チェック値 (Section 3.0 CRC カリキュレータ 参照 ) は プログラミング時にconst 変数を使ってプログラムメモリに書き込めます 例えば 計算で求めた参照チェック値が 0x1234 の場合 以下のように書き込みます const uint16_t CRC_checkValue @ 0x7FE = 0x1234 これでアドレス 0x7FE に 0x3434 アドレス 0x7FF に 0x3412 を書き込みます MSB に 0x34 が含まれるのは これが RETLW 命令のオペコードであるためです 表 1 にこれを示します 表 1: プログラムメモリに格納されるチェック値 行番号 アドレス オペコード アセンブリ 2047 7FE 3434 RETLW 0x34 2048 7FF 3412 RETLW 0x12 2015 Microchip Technology Inc. DS00001817A_JP - p.11
次に この参照チェック値とライブラリまたは CRC モジュールを使って計測したチェック値を比較します ( 例 3 例 4 参照 ) 例 3: ライブラリを使って計測したチェック値との比較 if (CRC_checkValue == CRC_libraryResult) { // do nothing, check value matches } else { ErrorMode(); } 例 4: CRC モジュールを使って計測したチェック値との比較 if ((CRC_checkValue >> 8) == CRCACCH) { if ((CRC_checkValue & 0x00FF) == CRCACCL) { // do nothing, check value matches } else { ErrorMode(); } } else { ErrorMode(); } DS00001817A_JP - p.12 2015 Microchip Technology Inc.
補遺 A: ウィンドウ付きウォッチドッグタイマ (WWDT) ウィンドウ付きウォッチドッグタイマはPIC16F161X ファミリが内蔵するモジュールで 通常のウォッチドッグタイマよりもタイムスロットの監視に適しています ウィンドウ付きウォッチドッグタイマは クロック速度が遅過ぎる場合も早過ぎる場合も検出できます ウィンドウの前にプログラムがタイマをクリアしようとした場合も CLRWDT 命令を発行できなかった場合もリセットが発生します この機能を使うには 実行中のプロセスに正確なタイミングが必要です CRC モジュールは 正確なタイミングを提供するモジュールの 1 つです (Section 2.4 CRC モジュールのタイミング 参照 ) このウィンドウのタイミングを 参照クロック ( この場合は LFINTOSC) の公差に合わせて調整する必要があります 温度と電圧に対する LFINTOSC の仕様上の誤差は +-15% です つまり このオシレータ周波数レンジをカバーできるだけのガードバンドをウィンドウに追加する必要があります 例えば CRC モジュールが PIC16F1613 のメモリレンジ全体 (2K ワード ) をテストするには 4 ms が必要です ( バーストモード 8 MHz の場合 ) つまり CRC モジュールが途中で終了した場合 不正に呼び出された場合 プログラムカウンタに障害が発生した場合にエラーとなるようにウォッチドッグタイマにウィンドウを追加する必要があります そのため WDT 周期を 8 ms として 87.5% のウィンドウを設定します このようにウィンドウを拡張する事で LFINTOSC の許容誤差に対して十分なガードバンドを確保しつつ高いエラー検出率を維持できます 図 A-1: ウォッチドッグタイマのウィンドウ CLRWDT Instruction (or other WDT reset) Window Period Window Closed Window Open Window Delay (window violation can occur) Time-out Event 2015 Microchip Technology Inc. DS00001817A_JP - p.13
補遺 B: SMT のタイミング 信号計測タイマ (SMT) を使うと PIC16F161X ファミリの周辺モジュールまたはその他のソフトウェアイベントに対して正確なタイミングを取得できます Timer 1 が 16 ビットタイマであるのに対し SMT モジュールは 24 ビットタイマであるため 特に低速なアプリケーションで便利です FOSC/4 クロックを使って動作タイミングを計測する場合の SMT 設定方法は 例 B-1 を参照してください 例 B-1: SMT の初期化 SMT2CON0 = 0b10100000; //SMT enabled, rising edges, prescaler 1:1, //counter will halt at PR SMT2CLKbits.CSEL = 0b001; // Fosc/4 SMTxPR = 0xFFFFFF; PR レジスタを最大値に設定すると SMT の 24 ビットレンジ全体を使う事ができます STP ビット (bit 5) をセットすると SMTxPRの値でカウンタが停止します こうすると オーバーフローを使わなくてもイベントのタイミングを SMT の 24 ビットレンジに制限できます 例 B-1 に示した方法で SMT の初期化が完了したら SMTxCON1レジスタのSMTxGOビットを使ってSMT を有効または無効にできます イベントのタイミング 情報を取得するにはイベント発生前に SMTxGO ビットをセットし イベント直後に SMTxGO ビットをクリアします 時間は SMTxTMRU:H:L レジスタに格納されます 格納される値の単位は 命令サイクル (FOSC/4) 数です 例 B-2 に この CRC サンプルコードを示します 例 B-2: SMT のタイミング SMT2CON1bits.SMT2GO = 1; // start SMT timing //start the Hardware CRC check here. HW_CRC(LASTCRCADDRESS); SMT2CON1bits.SMT2GO = 0; // finish SMT timing DS00001817A_JP - p.14 2015 Microchip Technology Inc.
Microchip 社製デバイスのコード保護機能に関して以下の点にご注意ください Microchip 社製品は 該当する Microchip 社データシートに記載の仕様を満たしています Microchip 社では 通常の条件ならびに仕様に従って使用した場合 Microchip 社製品のセキュリティレベルは 現在市場に流通している同種製品の中でも最も高度であると考えています しかし コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です 弊社の理解では こうした手法は Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります このような行為は知的所有権の侵害に該当する可能性が非常に高いと言えます Microchip 社は コードの保全性に懸念を抱いているお客様と連携し 対応策に取り組んでいきます Microchip 社を含む全ての半導体メーカーで 自社のコードのセキュリティを完全に保証できる企業はありません コード保護機能とは Microchip 社が製品を 解読不能 として保証するものではありません コード保護機能は常に進歩しています Microchip 社では 常に製品のコード保護機能の改善に取り組んでいます Microchip 社のコード保護機能の侵害は デジタルミレニアム著作権法に違反します そのような行為によってソフトウェアまたはその他の著作物に不正なアクセスを受けた場合 デジタルミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があります 本書に記載されているデバイスアプリケーション等に関する情報は ユーザの便宜のためにのみ提供されているものであり 更新によって無効とされる事があります お客様のアプリケーションが仕様を満たす事を保証する責任は お客様にあります Microchip 社は 明示的 暗黙的 書面 口頭 法定のいずれであるかを問わず 本書に記載されている情報に関して 状態 品質 性能 商品性 特定目的への適合性をはじめとする いかなる類の表明も保証も行いません Microchip 社は 本書の情報およびその使用に起因する一切の責任を否認します 生命維持装置あるいは生命安全用途に Microchip 社の製品を使用する事は全て購入者のリスクとし また購入者はこれによって発生したあらゆる損害 クレーム 訴訟 費用に関して Microchip 社は擁護され 免責され 損害を受けない事に同意するものとします 暗黙的あるいは明示的を問わず Microchip 社が知的財産権を保有しているライセンスは一切譲渡されません 商標 Microchip 社の名称とロゴ Microchip ロゴ dspic FlashFlex KEELOQ KEELOQ ロゴ MPLAB PIC PICmicro PICSTART PIC 32 ロゴ rfpic SST SST ロゴ SuperFlash UNI/O は 米国およびその他の国におけるMicrochip Technology Incorporated の登録商標です FilterLab Hampshire HI-TECH C Linear Active Thermistor MTP SEEVAL Embedded Control Solutions Company は 米国におけるMicrochip Technology Incorporatedの登録商標です Silicon Storage Technology は 他の国における Microchip Technology Inc. の登録商標です 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 Certified ロゴ MPLIB MPLINK mtouch Omniscient Code Generation PICC PICC-18 PICDEM PICDEM.net PICkit PICtail REAL ICE rflab Select Mode SQl Serial Quad I/O Total Endurance TSHARC UniWinDriver WiperLock ZENA および Z-Scale は 米国およびその他の Microchip Technology Incorporated の商標です SQTP は 米国における Microchip Technology Incorporated のサービスマークです GestIC および ULPP は Microchip Technology Inc. の子会社である Microchip Technology Germany II GmbH & Co. & KG 社の他の国における登録商標です その他本書に記載されている商標は各社に帰属します 2015, Microchip Technology Incorporated, All Rights Reserved. ISBN: 978-1-63276-863-6 Microchip 社では Chandler および Tempe ( アリゾナ州 ) Gresham ( オレゴン州 ) の本部 設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949: 2009 認証を取得しています Microchip 社の品質システムプロセスおよび手順は PIC MCU および dspic DSC KEELOQ コードホッピングデバイス シリアル EEPROM マイクロペリフェラル 不揮発性メモリ アナログ製品に採用されています さらに 開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています 2015 Microchip Technology Inc. DS00001817A_JP - p.15
各国の営業所とサービス 北米本社 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel: 480-792-7200 Fax: 480-792-7277 技術サポート : http://www.microchip.com/ support URL: 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-8323 Fax: 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 Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel: 852-2943-5100 Fax: 852-2401-3431 オーストラリア - シドニー Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 中国 - 北京 Tel: 86-10-8569-7000 Fax: 86-10-8528-2104 中国 - 成都 Tel: 86-28-8665-5511 Fax: 86-28-8665-7889 中国 - 重慶 Tel: 86-23-8980-9588 Fax: 86-23-8980-9500 中国 - 杭州 Tel: 86-571-8792-8115 Fax: 86-571-8792-8116 中国 - 香港 SAR Tel: 852-2943-5100 Fax: 852-2401-3431 中国 - 南京 Tel: 86-25-8473-2460 Fax: 86-25-8473-2470 中国 - 青島 Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 中国 - 上海 Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 中国 - 瀋陽 Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 中国 - 深圳 Tel: 86-755-8864-2200 Fax: 86-755-8203-1760 中国 - 武漢 Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 中国 - 西安 Tel: 86-29-8833-7252 Fax: 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-8631 Fax: 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-4301 Fax: 82-53-744-4302 韓国 - ソウル Tel: 82-2-554-7200 Fax: 82-2-558-5932 または 82-2-558-5934 マレーシア - クアラルンプール Tel: 60-3-6201-9857 Fax: 60-3-6201-9859 マレーシア - ペナン Tel: 60-4-227-8870 Fax: 60-4-227-4068 フィリピン - マニラ Tel: 63-2-634-9065 Fax: 63-2-634-9069 シンガポール Tel: 65-6334-8870 Fax: 65-6334-8850 台湾 - 新竹 Tel: 886-3-5778-366 Fax: 886-3-5770-955 台湾 - 高雄 Tel: 886-7-213-7830 台湾 - 台北 Tel: 886-2-2508-8600 Fax: 886-2-2508-0102 タイ - バンコク Tel: 66-2-694-1351 Fax: 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-90 Fax: 34-91-708-08-91 スウェーデン - ストックホルム Tel: 46-8-5090-4654 イギリス - ウォーキンガム Tel: 44-118-921-5800 Fax: 44-118-921-5820 03/25/14 DS00001817A_JP - p.16 2015 Microchip Technology Inc.