IEC60730 Class B 準拠 セルフテストライブラリ 32-BIT MICROCONTROLLER FM4 Family APPLICATION NOTE MCU-AN-510127-J-10 CONFIDENTIAL Revision 1.0 Issue Date September 11, 2015 A P P L I C A T I O N N O T E 対象製品 本操作マニュアルに記載されている内容の対象製品は、下記のとおりです。 シリーズ名 品種型格 (パッケージサフィックスは含まれていません) MB9B160R MB9BF160M/ MB9B160N/ MB9B160R MB9B360R MB9BF360M/ MB9B360N/ MB9B360R MB9B460R MB9BF460M/ MB9B460N/ MB9B460R MB9B560R MB9BF560M/ MB9B560N/ MB9B560R S6E2GM S6E2GM6H/ S6E2GM6J/ S6E2GM8H/ S6E2GM8J/ S6E2HG S6E2HG4G/ S6E2HG6G/ S6E2HG4F/ S6E2HG6F/ S6E2HG4E/ S6E2HG6E ※ 詳細は本文中に記載しています。 2 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E Table of Contents 1. 2. 3. 4. 5. 6. 7. 8. はじめに ......................................................................................................................................... 7 1.1 この文書について................................................................................................................ 7 1.2 IEC60730 について ............................................................................................................. 7 1.3 FM4 ファミリ MCU について ........................................................................................... 7 1.4 FM4 IEC60730 STL デモプロジェクト ............................................................................... 9 IEC60730 クラス B の要件 ........................................................................................................... 11 C60730 クラス B STL 概要 .......................................................................................................... 12 IEC60730 クラス B STL API ........................................................................................................ 14 4.1 CPU レジスタテスト ......................................................................................................... 14 4.1.1 テストの説明 .................................................................................................... 14 4.1.2 API の定義 ........................................................................................................ 15 4.2 CPU PC テスト ................................................................................................................. 15 4.2.1 テストの説明 .................................................................................................... 15 4.2.2 API の定義 ........................................................................................................ 16 4.3 割込みテスト ..................................................................................................................... 17 4.3.1 テストの説明 .................................................................................................... 17 4.3.2 API の定義 ........................................................................................................ 18 4.4 クロックテスト ................................................................................................................. 18 4.4.1 テストの説明 .................................................................................................... 18 4.4.2 API の定義 ........................................................................................................ 23 4.5 不揮発性メモリのテスト ................................................................................................... 26 4.5.1 テストの説明 .................................................................................................... 27 4.5.2 API の定義 ........................................................................................................ 31 4.6 揮発性メモリテスト .......................................................................................................... 33 4.6.1 テストの説明 .................................................................................................... 33 4.6.2 API の定義 ........................................................................................................ 34 4.7 FPU(浮動小数点演算ユニット)テスト .......................................................................... 34 4.7.1 テストの説明 .................................................................................................... 34 4.7.2 API Definition.................................................................................................... 35 4.8 IO テスト ......................................................................................................................... 35 4.8.1 テストの説明 .................................................................................................... 36 4.8.2 API の定義 ........................................................................................................ 37 4.9 AD テスト ......................................................................................................................... 37 4.9.1 テストの説明 .................................................................................................... 37 4.9.2 API の定義 ........................................................................................................ 38 サンプルプロジェクト .................................................................................................................. 39 5.1 ユーザ設定 ........................................................................................................................ 39 5.1.1 『PDL_MCU_INT_TYPE』の定義 ................................................................... 39 5.1.2 定義『IEC60730_FLASHTEST_USE_CRC16』 ............................................. 39 5.1.3 定義『IEC60730_CLKTEST_USE_CSV』 ...................................................... 39 5.2 プロジェクトの構造 .......................................................................................................... 39 5.2.1 スタートアップセルフテスト ........................................................................... 39 5.2.2 テストの定期的初期化...................................................................................... 39 5.2.3 定期的なテスト ................................................................................................ 40 5.3 サンプルコード ................................................................................................................. 41 5.3.1 スタートアップファイル .................................................................................. 41 5.3.2 メインファイル ................................................................................................ 42 STL の API の性能 ........................................................................................................................ 48 参照文書 ....................................................................................................................................... 49 付録 .............................................................................................................................................. 50 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 3 A P P L I C A T I O N N O T E フラッシュの CRC コード作成方法 .................................................................................. 50 8.1.1 コマンドラインの起動...................................................................................... 50 8.1.2 コマンドの入力 ................................................................................................ 50 8.1.3 メッセージウィンドウ表示内容の設定............................................................. 51 8.1.4 リンカ設定ファイルの設定 .............................................................................. 52 8.1.5 CRC コード作成 ............................................................................................... 53 主な変更内容 ................................................................................................................................ 54 8.1 9. 4 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E Figures Figure 3-1 Figure 4-1 Figure 4-2 Figure 4-3 Figure 4-4 Figure 4-5 Figure 4-6 Figure 4-7 Figure 4-8 Figure 4-9 Figure 4-10 Figure 4-11 Figure 4-12 Figure 4-13 Figure 4-14 Figure 4-15 Figure 4-16 Figure 4-17 Figure 4-18 Figure 4-19 Figure 4-20 Figure 4-21 Figure 5-1 Figure 5-2 Figure 5-3 Figure 5-4 Figure 5-5 Figure 5-6 FM4 IEC60730 STL 試験項目............................................................................................... 12 テスト 1 レジスタテスト ................................................................................................... 15 PC テストフロー .................................................................................................................. 16 割込みテストブロック図 ...................................................................................................... 17 クロックテストブロック図 .................................................................................................. 19 クロックカウンタのフローチャート .................................................................................... 19 クロックテストのフローチャート ........................................................................................ 20 クロックメインループモニタのフローチャート .................................................................. 20 クロック故障検出のブロック図 ........................................................................................... 21 異常周波数検出のブロック図 ............................................................................................... 22 IEC60730_InitCSV フローチャート ................................................................................... 22 IEC60730_CheckCSVStat フローチャート ........................................................................ 23 通信における CRC テスト.................................................................................................. 26 CRC コード生成のシーケンス ........................................................................................... 27 ソフトウェア CRC16 生成ソースコード ............................................................................ 28 CRC16 のテーブル ............................................................................................................. 29 ソフトウェア CRC32 生成ソースコード ............................................................................ 30 CRC32 のテーブル ............................................................................................................. 30 チェッカーボード法による 1 ワードのテスト .................................................................... 34 IO 機能の構成 ..................................................................................................................... 36 IO 入力/出力テストのフローチャート ................................................................................ 36 AD テストのフローチャート .............................................................................................. 38 プロジェクトの構造 ............................................................................................................. 41 リセットハンドラのサンプルコード .................................................................................... 41 メインファンクションのサンプルコード ............................................................................. 42 デュアルタイマ ISR ............................................................................................................. 46 ウォッチカウンタ ISR .......................................................................................................... 46 リロードタイマ ISR ............................................................................................................. 47 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 5 A P P L I C A T I O N N O T E Tables Table 1-1 FM4 ファミリ 製品リスト ..................................................................................................... 7 Table 2-1 FM4 IEC60730 STL 試験項目 ................................................................................................. 11 Table 4-1 Cotex-M3 レジスタリスト...................................................................................................... 14 Table 5-1 割込みテストの初期値 ........................................................................................................... 40 Table 6-1 STL API の性能 ...................................................................................................................... 48 6 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 1. N O T E はじめに 1.1 この文書について このアプリケーションノートは提供するライブラリ関数の使用法および実装法について説明します。まず, IEC60730 クラス B の要件を示し, 次にどのようにそれを実現するかを説明します。最後に, テスト関数を実 際のシステムに統合する方法を例示します。 1.2 IEC60730 について 国際電気標準会議(IEC)は各国の電子技術委員会(IEC 国内委員会)により構成された標準化のための国際組織 です。国際標準 IEC60730-1 は住宅用自動制御のための IEC 専門技術委員会により起草されました。2007 年 以降, 一般家電はシステムの安全性を高めるために IEC60730 に準拠しなければならなくなりました。 IEC60730 の付属書 H は, ハードウェアとソフトウェアの双方に実装される電子制御および組込みシステムに 適用されます。マイクロコントローラを使用するシステムは今日の家電の中の典型的な例です。特に IEC60730 の付属書 H は, マイクロコントローラのテストおよび診断方法を詳細に説明しています。 付属書 H は, ソフトウェアに関連する標準項目をクラス A, B, または C に分類しています。 1.3 ■Class A 湿度制御, 照明制御, タイマ等, 機器の安全に関わらないと想定される制御機能。 ■Class B 洗濯機用の熱電開閉器またはドアロックのように, 機器にソフトウェア障害以外の障害 が発生した場合の災害防止を意図したコードを含むソフトウェア。 ■Class C 密閉式水加熱システム用の熱電開閉器等, 他の保護装置を使用せず災害を防止するこ とを意図したコードを含むソフトウェア。 FM4 ファミリ MCU について FM4 ファミリは 32 ビット汎用 MCU であり, 業界最先端の ARM Cortex® –M4F CPU を備え、信頼性が高く 高速で安全な組込みフラッシュ技術を集積しています。本ファミリは最大 200MHz までの CPU 周波数で動作 可能であり, 広い電圧範囲(2.7-5.5V)で動作します。3.3V および 5V システム双方に対応します。 また, 堅牢な一連の周辺機器機能も含まれており, モーター制御タイマ(MFT), ベースタイマ(PWM, PPG, リ ロード, PWC タイマとして構成可能), ADC, オンチップメモリ(最大 2MB のフラッシュ, 128K までの SRAM) およびさまざまな種類の通信インタフェース(USB, I2C, SIO, LIN, CAN)等を備えています。 Table 1-1 に示すように, オンチップメモリの容量はパーツ番号で区別されており, パッケージは LQFP と BGA があります。 Table 1-1 Product MB9BF166MPMC MB9BF167MPMC MB9BF168MPMC FM4 ファミリ 製品リスト Flash SRAM MAINFLASH: 512KB WORKFLASH: 32KB MAINFLASH: 768KB WORKFLASH: 32KB MAINFLASH: 1024KB WORKFLASH: 32KB MB9BF166NBGL MAINFLASH: 512KB MB9BF166NPMC WORKFLASH: 32KB Package 64KB FPT-80P-M37 96KB FPT-80P-M37 128KB FPT-80P-M37 64KB BGL: BGA-112P-M05 PMC: FPT-100P-M23 (続く) September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 7 A P P L I C A T I O N Product Flash SRAM MB9BF167NBGL MAINFLASH: MB9BF167NPMC WORKFLASH: MB9BF168NBGL MAINFLASH: MB9BF168NPMC WORKFLASH: 32KB MB9BF166RBGL MAINFLASH: 512KB MB9BF166RPMC WORKFLASH: 32KB MB9BF167RBGL MAINFLASH: 768KB MB9BF167RPMC WORKFLASH: MB9BF168RBGL MAINFLASH: MB9BF168RPMC WORKFLASH: 32KB MAINFLASH: 512KB WORKFLASH: 32KB MAINFLASH: 768KB WORKFLASH: 32KB MB9BF366MPMC MB9BF367MPMC MB9BF368MPMC MAINFLASH: 768KB 32KB 1024KB 32KB 1024KB 1024KB WORKFLASH: 32KB MB9BF366NBGL MAINFLASH: 512KB MB9BF366NPMC WORKFLASH : 32KB MB9BF367NBGL MAINFLASH: 768KB MB9BF367NPMC WORKFLASH: 32KB MB9BF368NBGL MAINFLASH: MB9BF368NPMC WORKFLASH: 32KB MB9BF366RBGL MAINFLASH: 512KB MB9BF366RPMC WORKFLASH: 32KB MB9BF367RBGL MAINFLASH: 768KB MB9BF367RPMC WORKFLASH: 32KB MB9BF368RBGL MAINFLASH: MB9BF368RPMC WORKFLASH: 32KB MAINFLASH: 512KB WORKFLASH: 32KB MAINFLASH: 768KB WORKFLASH: 32KB MB9BF466MPMC MB9BF467MPMC MB9BF468MPMC MAINFLASH: N O T E 1024KB 1024KB 1024KB WORKFLASH: 32KB MB9BF466NBGL MAINFLASH: 512KB MB9BF466NPMC WORKFLASH: 32KB MB9BF467NBGL MAINFLASH: 768KB MB9BF467NPMC WORKFLASH: 32KB MB9BF468NBGL MAINFLASH: MB9BF468NPMC WORKFLASH: 32KB MB9BF466RBGL MAINFLASH: 512KB MB9BF466RPMC WORKFLASH: 32KB MB9BF467RBGL MAINFLASH: 768KB MB9BF467RPMC WORKFLASH: 32KB MB9BF468RBGL MAINFLASH: MB9BF468RPMC WORKFLASH: 1024KB 1024KB 32KB 96KB 128KB 64KB 96KB 128KB Package BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-144P-M05 PMC: FPT-120P-M23 BGL: BGA-144P-M05 PMC: FPT-120P-M23 BGL: BGA-144P-M05 PMC: FPT-120P-M23 64KB FPT-80P-M37 96KB FPT-80P-M37 128KB FPT-80P-M37 64KB 96KB 128KB 64KB 96KB 128KB BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-144P-M09 PMC: FPT-100P-M37 BGL: BGA-144P-M09 PMC: FPT-100P-M37 BGL: BGA-144P-M09 PMC: FPT-100P-M37 64KB FPT-80P-M37 96KB FPT-80P-M37 128KB FPT-80P-M37 64KB 96KB 128KB 64KB 96KB 128KB BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-144P-M09 PMC: FPT-100P-M37 BGL: BGA-144P-M09 PMC: FPT-100P-M37 BGL: BGA-144P-M09 PMC: FPT-100P-M37 (続く) 8 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N Product MB9BF566MPMC MB9BF567MPMC MB9BF568MPMC N O T E Flash SRAM MAINFLASH: 512KB WORKFLASH: 32KB MAINFLASH: 768KB WORKFLASH: 32KB MAINFLASH: 1024KB WORKFLASH: 32KB MB9BF566NBGL MAINFLASH: 512KB MB9BF566NPMC WORKFLASH: 32KB MB9BF567NBGL MAINFLASH: 768KB MB9BF567NPMC WORKFLASH: 32KB MB9BF568NBGL MAINFLASH: MB9BF568NPMC WORKFLASH: 32KB MB9BF566RBGL MAINFLASH: 512KB MB9BF566RPMC WORKFLASH: 32KB MB9BF567RBGL MAINFLASH: 768KB MB9BF567RPMC WORKFLASH: 32KB MB9BF568RBGL MAINFLASH: MB9BF568RPMC WORKFLASH: 1024KB 1024KB 32KB Package 64KB FPT-80P-M37 96KB FPT-80P-M37 128KB FPT-80P-M37 64KB 96KB 128KB 64KB 96KB 128KB BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-112P-M05 PMC: FPT-100P-M23 BGL: BGA-144P-M09 PMC: FPT-100P-M37 BGL: BGA-144P-M09 PMC: FPT-100P-M37 BGL: BGA-144P-M09 PMC: FPT-100P-M37 S6E2GM6H0AGV20000 S6E2GM6HHAGV20000 S6E2GM6J0AGV20000 MAINFLASH: 1024KB 128KB S6E2GM6JHAGV20000 FPT-144P-M08 FPT-176P-M07 S6E2GM8H0AGV20000 S6E2GM8HHAGV20000 S6E2GM8J0AGV20000 MAINFLASH: 1024KB 192KB S6E2GM8JHAGV20000 FPT-176P-M07 S6E2HG6G0AGV20000 FPT-120P-M37 S6E2HG6F0AGV20000 MAINFLASH: 512KB S6E2HG6E0AGV20000 WORKFLASH: 32KB 64KB S6E2HG6G0AGB30000 FPT-100P-M23 FPT-80P-M37 FDI121 S6E2HG4G0AGV20000 FPT-120P-M37 S6E2HG4F0AGV20000 MAINFLASH: 256KB S6E2HG4E0AGV20000 WORKFLASH: 32KB S6E2HG4G0AGB30000 1.4 FPT-144P-M08 32KB FPT-100P-M23 FPT-80P-M37 FDI121 FM4 IEC60730 STL デモプロジェクト このプロジェクトは FM4 IEC60730 セルフテストライブラリの使用法を説明するためのサンプルプロジェク トです。これは IAR EWARM Workbench V7.20 および Keil μVision V5.10 IDE 上で開発され, それぞれ SK-FM4-U120-9B560 V1.1.0, FM4-176L-S6E2GM V1.0 および FM4-120L-S6E2HG スタータキット上で評価されています。 注意: 1. IAR EWARM Workbench V7.20 と Keil μVision V5.10 より後のバージョンでこの評価用プロジェクト を開く場合, プロジェクト内の MCU タイプ情報が失われている可能性があります。そのため, 確認 し, 失われていた場合は修正してください。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 9 A P P L I C A T I O N 2. 3. 10 CONFIDENTIAL N O T E IAR EWARM Workbench V7.20 より前のバージョンでこの評価用プロジェクトを開く場合, MCU タ イプ, あらかじめ含まれているファイル(C/C++コンパイラのプリプロセッサテーブル), icf ファイ ル(デバッグオプションのリンクテーブル), フラッシュローダーファイル(デバッガーオプションの ダウンテーブル)が失われている可能性があります。そのため, それらの設定を確認し, 失われてい た場合は修正してください。 Keil μVision V5.10 より前のバージョンでこの評価用プロジェクトを開く場合, MCU タイプ, あら かじめ含まれているファイル(C/C++コンパイラのプリプロセッサテーブル), デバッグ設定(プロ ジェクト設定のデバッグテーブル)が失われている可能性があります。そのため, それらの設定を確 認し, 失われていた場合は修正してください。 MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 2. N O T E IEC60730 クラス B の要件 IEC60730 に定義された仕様においてソフトウェアクラス B またはソフトウェアクラス C に区分される機能 を有する制御は,ソフトウェアに関連する障害/エラーを防止し管理するための対策を, 安全に関するデータ内 およびソフトウェアの安全に関するセグメント内で講じることが求められています。これは, 当該ソフトウェ アがマイクロコントローラ内外の障害を検出する試験方法を持たなければならないことを意味します。 FM4 IEC60730 セルフテストライブラリ(STL)は, FM4 ファミリ MCU に対するソフトウェアクラス B 要件(標準 に示された IEC60730 要件の大部分を含む)を対象にしています。クラス B コントローラについて, 試験すべき 要素, 採用すべき手法および実現すべき定義を,付属書 H の表 H.11.12.7 のまとめを用いて以下の表に示します。 Table 2-1 コンポーネント FM4 IEC60730 STL 試験項目 障害/エラー STL で使用する手法 定義 STL での有無 1. CPU 1.1 レジスタ スタックエラー スタティックメモリテスト H. 2.19.6 ○ 1.2 プログラムカウンタ スタックエラー プログラムシーケンスの H.2.18.10.2 ○ タイムスロット監視 H.2.18.10.4 ○ 誤った周波数 周波数監視 H.2.18.10.1 ○ 4.1. 不揮発性メモリ 全 1 ビット不良 冗長性チェック H.2.19.3.2 ○ 4.2. 揮発性メモリ DC 不良 スタティックメモリテスト H.2.19.6 ○ 4.3. アドレス[1] スタックエラー 冗長性チェック - ○ 5. 内部データパス[2] スタックエラー - - × 6.1 データ[3] ハミング距離 3 - - × 6.3 タイミング 誤った時刻ポイント - - × 7.1 デジタル I/O 機能エラー 出力照合 H.2.18.12 ○ 7.2 A/D 機能エラー 入力比較 H.2.18.8 ○ 論理監視 2. 割込み 割込みせず, または頻繁す ぎる割込み 3. クロック 4. メモリ 6.外部通信 7. 入出力周辺機器 注意: 1. アドレス試験は不揮発性および揮発性メモリの試験法により部分的にカバーすることが可能です。たと えば, 2 個のセルが同じアドレスにマッピングされるエラーは CRC テストで不揮発性メモリをテストす る際に確認できます。 2. 内部データパスは外部メモリ使用時にのみテストされます。 3. 本 STL では外部通信テストは含まれていません。しかし, 外部通信データは不揮発性メモリテストと同 様の方法でテスト可能です。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 11 A P P L I C A T I O N 3. N O T E C60730 クラス B STL 概要 次の図に示すように, STL には CPU, 割込み, クロック, メモリおよび入出力周辺モジュールが含まれていま す。この図は STL 内のファイル構造とソフトウェア API を表しています。STL は C およびアセンブリ言語 でコーディングされています。 FM4 IEC60730 STL は ARM と IAR のコンパイラと互換性を持たせています。そこで, STL はコンパイラの違 いに応じて 2 種類の CPU test.s および RAM test.s ファイルを提供しています。 Figure 3-1 FM4 IEC60730 STL 試験項目 IEC60730_B_STL CPU Test.s reg_test() pc_test() Clock Test.c ClkInit() ClkTestReset() ClkCnt() ClkTest() ClkMonInMainloop() InitCSV() CheckCSVStat Interrupt Test.c ROM Test.c HardwareCRC16Gen() HardwareCRC16Test() SoftwareCRC16Gen() SoftwareCRC16Test() IntCntPro() IntTestInit() IntTest() HardwareCRC32Gen() HardwareCRC32Test() SoftwareCRC32Gen() SoftwareCRC32Test() RAM Test.s ram_test() IO Test.c GPIOOutput Test() GPIOInput Test() ADTest() AD Test.c ADTest() STL はいくつかの独立した機能モジュールで構成され, それらはアプリケーションの要求に従って 1 回また は繰り返し実行する必要があります。 1 回だけ実行されるテスト機能はパワーオンセルフテスト(POST)と呼ばれ, システムの初期化時に実行する 必要があります。このテストは常に完結しますが破壊的です(イニシャライズが必要) 。つまり, すべてのテ スト領域をカバーしますが, データはテストの実行後復元されません。PC, レジスタ, ROM/RAM, IO, AD テ ストはすべて POST です。 繰り返し実行されるテスト機能はビルドインセルフテスト(BIST)と呼ばれ, メインループ内または一定間隔 でのタイマ割込みサービスルーチン内で実行されなければなりません。このテストはテストデータを変更せ ず, プログラム実行中のモニタとして機能します。割込みとクロックは BIST です。 12 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E 注意: 1. このライブラリは説明されている通りに使用しなければならず,一部が変更された場合, その部分は新 たに検証されなければなりません。 2. 本ライブラリは, このアプリケーションノートに特に記載されていないものを含めて, すべての Fujitsu Cotex-M4F MCU に転用可能です。 3. 記述を簡単にするため, ファイルと機能名のプリフィックスは省略してあります。 4. この STL には, IAR と Keil IDE のために, CPU および RAM テストに用いる 2 種類のアセンブラファイ ルが用意されています。 5. クロックとフラッシュテストには 2 種類のテスト方法が使用可能です。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 13 A P P L I C A T I O N 4. N O T E IEC60730 クラス B STL API 4.1 CPU レジスタテスト ARM Cotex-M4F には 19 個のコアレジスタがあり, 読み書きが可能です。これらのレジスタをテストする必 要があります。 Table 4-1 Cotex-M3 レジスタリスト レジスタ名 テストするビット R0-R12 [31:0] R13 (SP_main, SP_process)[1] [31:4] R14 (LR) [31:0] APSR[2] [31:27] PRIMASK[3] 0 FAULTMASK[4] 0 BASEPRI[5] [7:4] 注意: 4.1.1 1. ARM Cotex-M4F カーネルには 2 つのスタックポインタがあります。メインスタックポインタ(MSP)と プロセススタックポインタ(PSP)です。 ハンドラモードでは MSP, プロセスモードでは MSP または PSP を使用します。R13 は現在の SP を示します。 2. APSR の上位 5 ビットのみが有効です。 3. PRIMASK のビット 0 のみが有効です。 4. FAULTMASK のビット 0 のみが有効です。 5. FM4 MCU の割込み優先レジスタのビット[7:4]により 16 個の割込み優先レベルが設定できます。した がって, BASEPRI のビット[7:4]のみがユーザ割込みのマスクに使用できます。 テストの説明 表 H.11.12.7 に示されているように, レジスタは『スタックエラー』のチェックを受けなければなりません。 レジスタテストの実行には単純なチェッカーボード法を使用しますが, これはスタックエラー検出に有効な 方法です。 このテストは, カーネルレジスタにアクセスする必要があるため, システムが特権モードでリセットされる 際にスタートアップファイルで呼び出される必要があります。このテストではレジスタテスト中の割込みが 無効になりません。レジスタテストが割り込まれないように, この関数が呼び出される際はアプリケー ションで割込みを無効にする必要があります。 レジスタに直接アクセスするために, レジスタテストにはアセンブリ言語が使用されています。このテスト は非常に重要なので, レジスタテストでエラーが検出された場合は, プログラムが無限ループに入るように 設計されています。 1 個のレジスタをテストするフローチャートを次の図に示します。 14 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N Figure 4-1 N O T E テスト 1 レジスタテスト 開始 パターン逆転 1パターン選択 レジスタにパターンデー タ書き込み レジスタに逆転パターン データ書き込み レジスタ読み出し レジスタ読み出し 読み出しデータが書き込み データと同じか検証 Y N 読み出しデータが書き込み データと同じか検証 N 無限ループにジャンプ 4.1.2 Y リターン API の定義 名称 iec60730_reg_test パラメータ なし リターン なし 説明: この API は, R0-R12 (下位:R0-R7, 上位:R8-R12), 特殊レジスタ(SP, LR, APSR, PRIMASK, FAULTMASK, BASEPRI)を含むすべてのレジスタをチェッカーボード法でテストするものです。この関数はリセットハンド ラで呼び出されなければなりません。 4.2 CPU PC テスト 4.2.1 テストの説明 表 H.11.12.7 に示されているように, PC は『スタックエラー』のチェックを受けなければなりません。PC テ ストは 8 個のサブルーチンを使用し, 各サブルーチンから得られる PC 値が事前定義値と同じであるかどうか を検証します。 このテストはシステムが特権モードでリセットされる際にスタートアップファイルで呼び出される必要があ ります。このテストではレジスタテスト中の割込みが無効になりません。レジスタテストが割り込まれない ようにこの関数が呼び出される際の割込みの無効設定は, アプリケーションで行う必要があります。 PC レジスタに直接アクセスするために, PC テストにはアセンブリ言語が使用されています。またこのテスト は非常に重要なため, PC テストでエラーが検出された場合は, プログラムが無限ループに入るように設計さ れています。 PC テストフローを以下に示します。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 15 A P P L I C A T I O N Figure 4-2 N O T E PC テストフロー サブルーチン1 にジャンプ サブルーチン1 のアドレスを 格納 サブルーチン1 のアドレスを 確認 ... サブルーチン8 にジャンプ サブルーチン8 のアドレスを 格納 サブルーチン8 のアドレスを 確認 4.2.2 API の定義 名称 iec60730_pc_test パラメータ なし リターン なし 説明: この API は, さまざまな領域でサブルーチンにジャンプしてサブルーチンアドレスを獲得し, 得られたアド レスが正しいかを検証するものです。この関数はリセットハンドラで呼び出されなければなりません。 16 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 4.3 N O T E 割込みテスト 4.3.1 テストの説明 クラス B 要件を満たすには, 割込みに対して『間違った回数』のチェックを行う必要があります。このテス トはシステムに高度に依存するタスクであり, そのため STL は概略処理ができるのみで, ラップアップハン ドルを提供することしかできません。つまり, いくつかの特定の割込みが定義されている回数発生したこと (これより少なかったり多かったりしないか)をチェックします。IEC60730_IntTest(割込みテスト関数)が特定 の間隔(タイマまたは線周波数割込みでトリガーされるなど)で呼び出されることを前提としています。監視 するすべての特定の割込みハンドラは IEC60730_IntCnt を呼び出すことにより専用のグローバル変数(Freq)を デクリメントする必要があります。IEC60730_IntTest はその変数を事前定義の上限および下限と比較して, 制 限を超えている場合は事前設定値に設定してエラーを返します。 例えば, タイマ 0~3 割込みが 10 秒間に 5 回発生するかどうかを測定します。10 秒タイミングがリロードタ イマから得られるとします。タイマ 0-3 の割込み回数範囲を[3, 7]にセットします。 Figure 4-3 割込みテストブロック図 リロードタイマ割込み ユーザコード IEC60730_IntTest() N 3<freq_init[0]-freq[0]<7? Y N 3<freq_init[1]-freq[1]<7? Y N 3<freq_init[2]-freq[2]<7? Y N タイマ0 タイマ1 タイマ2 タイマ3 割込み 割込み 割込み 割込み 3<freq_init[3]-freq[3]<7? IEC60730_ IntITestnit() Y IEC60730_ IntTestInit() freq 初期化 通常リターン freq 初期化 INT_ERRORを ユーザコード IEC60730_ IntCntPro(0) ユーザコード IEC60730_ IntCntPro(1) freq[0]-- ユーザコード IEC60730_ IntCntPro(2) freq[1]-- ユーザコード IEC60730 IntCntPro(3) freq[2]-- freq[3]-- 返す ユーザコード ユーザコード ユーザコード ユーザコード ユーザコード リターン リターン リターン リターン リターン 割り込み メインループ 割込みテストとユーザアプリケーションとの依存関係はありません。必要なことはテストしたい割込みに割 込みテスト API を追加するだけです。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 17 A P P L I C A T I O N 4.3.2 N O T E API の定義 名称 IEC60730_IntTestInit pFreq: 回数カウンタへのポインタ pFreqLower: 下限回数へのポインタ パラメータ pFreqUpper: 上限回数へのポインタ pFreqInitial: 回数初期値へのポインタ ArraySize: 割込み情報を格納した配列のサイズ リターン なし 説明: この API は割込みテスト用に str_int_test_par_t 構造体を初期化します。ここには定義済の回数範囲と回数の 初期値が含まれています。割込みテスト開始前のシステム初期化時に呼び出される必要があります。 名称 IEC60730_IntCntPro パラメータ IntNum: 割込み番号 リターン なし 説明: この API は割込み番号で指定される割込みの回数カウンタを減少させます。この関数は特権割込みの中で呼 び出される必要があります。 名称 パラメータ リターン IEC60730_IntTest なし 0: IEC60730_TEST_NORMAL 1: IEC60730_TEST_FUNC_ERROR 説明: これは割込みテストのメイン API で, 割込みが時間内に処理されるかを検証します。タイマ割込みまたはメ インループ内で一定間隔に呼び出される必要があります。 4.4 クロックテスト 4.4.1 テストの説明 クラス B 要件を満たすには, CPU クロックに対して『間違った周波数』のチェックを行う必要があります。 これには, クロックテスト用の標準クロックとして 2 個目の独立したクロックが必要です。本ライブラリに はクロックテスト実行のために 2 つの方法が用意されています。1 番目の方法として, FM4 MCU にはウォッ チカウンタが集積されており, これは外部サブクロック(32.768kHz オシレータ)で駆動可能です。このサブク ロックを標準クロックとして扱うことができます。2 番目の方法として, FM4 MCU にはクロック故障検出お よび異常周波数検出機能を持つクロックスーパバイザ(以後 CSV)が集積されています。CSV はクロックテス トにも使用できます。 ■ウォッチカウンタを使用してクロックテストを行う このテストはウォッチカウンタを標準クロックとして使用し, タイマ割込みでカウントされるタイムティッ クで検証することにより CPU クロック周波数が許容範囲内にあるかどうかをテストします。タイマ割込みの ソースクロックは CPU クロックと同一でなければなりません。CPU クロックがサブクロックで駆動されて いる場合はテストできません。32.768kHz の発振器を正確と想定するからです。 次の図に示すように, テスト関数 IEC60730_ClkCnt, IEC60730_ClkTest および IEC60730_ClkMonMainloop が実 装されています。タイマ割込みの発生回数はウォッチカウンタがモニタし, ウォッチカウンタの割込み発生 はメインループでチェックされています。 18 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N Figure 4-4 N O T E クロックテストブロック図 ウォッチカウンタ割込みハ ウォッチカウンタ ンドラ 割込みハンドラ メインループ タイマ割込みハンドラ … … … freq IEC60730_ClkCnt … 割込み発生フラグ IEC60730_ClkTest IEC60730_ClkMonInMainloop … … モニタクロック 従属クロック API IEC60730_ClkCnt はグローバル変数『freq』をカウントするために使用され, タイマ割込みハンドラ中で 呼び出されます。タイマのソースクロックは CPU クロックと同じでなければなりません。IEC60730_ClkCnt のフローチャートを以下に示します。 Figure 4-5 クロックカウンタのフローチャート 注意: 1. 最初のカウントサイクルが通常サイクルの 2 倍という FM4 MCU のウォッチカウンタの制限があるため, グローバル変数『freq』は最初のウォッチカウンタ割込みが発生するまでカウントします。そのため, 最 初のウォッチカウンタ割込みは無視しなければなりません。 API IEC60730_ClkTest は『freq』が定義されている範囲内にあるかをチェックするもので, ウォッチカウンタ 割込みハンドラの中で呼び出されます。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 19 A P P L I C A T I O N Figure 4-6 N O T E クロックテストのフローチャート API IEC60730_ClkMonInMainloop IEC60730_ClkMonInMainloop は, ある時間内でのウォッチカウンタ割込み の発生を保証します。この時間は, 実際のアプリケーションに従ってユーザが設定したしきい値に依存しま す。IEC60730_ClkMonMainInloop のフローチャートを次の図に示します。 Figure 4-7 20 CONFIDENTIAL クロックメインループモニタのフローチャート MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E ■CSV を使ってクロックテストを行う CSV には 2 つの機能があります。クロック故障検出(CSV: Clock failure detection by clock Super Visor)と異常周 波数検出(FCS: anomalous Frequency detection by Clock Super visor)です。 クロック故障検出はメインおよびサブクロックをモニタします。指定時間内にモニタクロックの立ち上がり が検出されないと, この機能は発振器の故障と判断しシステムリセット要求を出力します。メインクロック は高速 CR クロックを使用してモニタされており, サブクロックは低速 CR クロックを使用してモニタされて います。メインクロック用高速 CR の 32 クロック以内, またはサブクロック用低速 CR の 32 クロック以内に 立ち上がりが検出されないと, 発振器が故障したと判断されます。Figure 4-8 にクロック故障検出のブロック 図を示します。 Figure 4-8 メインOSC 高速CR クロック故障検出のブロック図 メインクロック カウンタ 制御回路 レジスタ サブOSC 低速CR CSV_RESET サブクロック カウンタ 異常周波数検出はメインクロックをモニタします。高速 CR の分周クロックのエッジと次のエッジとの間の 指定された期間で, この機能はメインクロックを使用して内部カウンタをカウントアップします。このカ ウント値が設定された範囲外に出ると, この機能はメインクロック周波数が異常だと判断し, 割込みリクエ ストまたはシステムリセットリクエストを CPU に出力します。Figure 4-9 に異常周波数検出のブロック図を 示します。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 21 A P P L I C A T I O N Figure 4-9 N O T E 異常周波数検出のブロック図 メインOSC 分周器 エッジ 検出 周波数 カウンタ 高速CR 制御回路レジスタ ウィンドウレジスタ FCS_RESET FCS_INT 2 つのテスト関数が実装されています。IEC60730_InitCSV と IEC60730_CheckCSVStat です。 API IEC60730_InitCSV はユーザがクロック故障検出および異常周波数検出の禁止/許可を選択できるように します。これはシステムクロック初期化以前に呼び出されなければなりません。Figure 4-10 はそのフロー チャートを示します。 Figure 4-10 IEC60730_InitCSV フローチャート 22 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E 注意: 1. 高速 CR トリミングの初期値は工場出荷時にアドレス 0x00402000 に保存されています。 2. アドレス 0x00402000 の CR トリミング値が壊れている場合は, 標準的な値(0x016B)がトリミングレジス タ MCR_FTRM に書き込まれます。 3. メインクロックの期待精度を設定する際には, 高速 CR 周波数も考慮する必要があります。高速 CR 発振 器の精度は 4MHz±3%と考えてください(例えば MB9B160R / MB9B360R / MB9B460R / MB9B560R シリー ズの精度は、データシートにあるように, 25℃で 4MHz±2%です。したがって 4MHz±3%はマージンを 取った値としています)。ベース上側および下側カウントは次の公式により計算されます。 base lower count (+3.0%で動作) = 1/[(freq/512*) × (1 + 0.03)] × freq = 512/1.03 = 497 base upper count (-3.0%で動作) = 1/[(freq/512*) × (1 - 0.03)] × freq = 512/0.97 = 528 本 STL の API(IEC60730_InitCSV)にて精度 5%を設定した場合は, 以下の値が設定されます。 lower count = 497 × 0.95 = 472 upper count = 528 × 1.05 = 554 4. CSV 機能を許可後, メインクロック用高速 CR の 32 クロック以内またはサブクロック用低速 CR の 32 クロック以内に立ち上がりエッジが検出されないとリセットがかかります。 5. FCS 機能と FCS 割込みの許可後, メインクロックの周波数が設定範囲外で検出され, また FCS リセット が出力されないように設定されていると, FCS 割込みが発生します。 API IEC60730_CheckCSVStat はクロック故障検出または異常周波数検出が発生したかどうかのチェックに使 用します。この API は IEC60730_InitCSV の前に呼び出されなければなりません。Figure 4-11 はそのフロー チャートを示しています。 Figure 4-11 IEC60730_CheckCSVStat フローチャート 4.4.2 API の定義 ■ウォッチカウンタを使用してクロックテストを行う場合 名称 パラメータ なし リターン なし September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL IEC60730_ClkCnt 23 A P P L I C A T I O N N O T E 説明: この API はクロック周波数のカウントに使用し, タイマ割込みの中で呼び出されなければなりません。 名称 パラメータ IEC60730_ClkTest なし 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 説明: この API は, タイマ割込みでカウントされるタイムティックを検証することにより, CPU クロックの周波数 が許容範囲内にあるかどうかをテストします。これはウォッチカウンタ割込みで呼び出す必要があり, その 割込みは別個の 32.768kHz クロック(FM4 MCU のサブクロック)で駆動されています。 名称 パラメータ IEC60730_ClkMonInMainloop なし 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 説明: この API はウォッチカウンタ割込みの発生をモニタするために使用します。メインループ中で呼び出す必要 があります。 名称 IEC60730_ClkTestReset パラメータ なし リターン なし 説明: この API を用いて割込みテスト変数をリセットします。 24 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E 名称 IEC60730_ClkInit FreqLower:タイマ割込み最小発生周波数を示します パラメータ FreqUpper:タイマ割込み最大発生周波数を示します ClkTestThreshold:閾値を示します リターン なし 説明: この API はクロックテスト開始前のシステム初期化時に呼び出す必要があります。 パラメータ FreqLower と FreqUpper は実際の例に従って設定します。たとえば, 50ms タイマ割込みをモニタ するためにウォッチカウンタの 1s インターバルを使用する場合は, FreqLower =18, FreqUpper =22 の値をタイ マクロック周波数の限界として設定します。この周波数の標準値は 20 です。 閾値を推定することは重要です。しきい値は少なくとも 1s/メインループ の実行時間でなければなりません。 ■CSV を使ってクロックテストを行う場合 名称 IEC60730_CheckCSVStat パラメータ pRegRSTStat:リセット要因レジスタからデータを取得します リターン なし 説明: この API はクロック故障検出または異常周波数検出が発生したかどうかのチェックに使用します。パラメー タ『pRegRSTStat』にはリセット要因レジスタから読み出したデータのアドレスが格納されます。この API は CSV により起こるリセットを処理するだけです。そうでない場合には正常状態を返します。この API は IEC60730_InitCSV の前に呼び出されなければなりません。 名称 IEC60730_InitCSV CSV_MCLKMonEn:0: CSV メインクロックのモニタ禁止 1: CSV メインクロックのモニタ許可 CSV_SCLKMonEn:0: CSV サブクロックのモニタを禁止, 1: CSV サブクロックのモニタを許可 FCS_MONInfo: a fcs_mon_info_t structure パラメータ typedef struct fcs_mon_info { stl_uint8_t FCSMonEn; /* 0: disable FCS function, 1: enable FCS function */ stl_uint8_t MCLKFreqAccuracy; /* input the excepted accuracy of main clock, 5->5%*/ } fcs_mon_info_t; リターン 0: IEC60730_TEST_NORMAL 2: IEC60730_TEST_PARA_ERROR 説明: この API は CSV のメイン/サブクロック機能を許可/禁止でき, メインクロック周波数の期待精度を入力します。 これはシステムクロック初期化以前に呼び出されなければなりません。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 25 A P P L I C A T I O N 4.5 N O T E 不揮発性メモリのテスト FM4 MCU の不揮発性メモリとはオンチップフラッシュメモリのことです。フラッシュのサイズは Table 1-1 に示すように製品に応じて異なります。 FM4 MCU はオンチップ CRC(巡回冗長検査)モジュールを集積しています。CRC モジュールはエラー検出シ ステムです。CRC コードは入力データ文字列を高次多項式と仮定して, それを定義済みの生成多項式で除算 した後の剰余です。通常, データ文字列は送信時に CRC コードがサフィックスとして付けられ, 受信した データは上と同様に生成多項式で除算されます。受信データが割り切れれば正しく受信できたと判断します。 オンチップフラッシュメモリのテストにおいても、CRC を利用し、格納されているデータおよびプログラム に故障が発生していないことの検査をします。 CRC モ ジ ュ ー ル は CCITT CRC16 ま た は IEEE-802.3 CRC32 の ど ち ら か を 使 用 で き , そ の 選 択 は CRCCR:CRC32 ビットで設定します。このモジュールの生成多項式は, これら 2 つのモード用の数値に固定 されています。 ■ ■ CCITT CRC16 生成多項式: 0x1021(0x11021 の最上位ビットを省略) IEEE-802.3 CRC32 生成多項式: 0x04C11DB7 次の図は, FM4 MCU が他の装置と通信するときに CRC テストを適用する場合を示しています。 Figure 4-12 通信における CRC テスト ハードウェアCRCテスト( FM3 MCU) ソフトウェアCRCテスト( その他のMUCまたはPC) 内蔵ハードウェア CRCジェネレータ ソフトウェアCRC 演算 RX D0,D1,D2…DN D0,D1,D2…DN CRCコード 生成 CRCコー ド D0,D1,D2…DN CRCコー ド D0,D1,D2…DN ソフトウェアCRC 演算 生成されたCRCコードの 検証 D0,D1,D2…DN TX D0,D1,D2…DN 内蔵ハードウェア CRCジェネレータ CRCコード 生成 CRCコード 生成されたCRCコードの 検証 D0,D1,D2…DN 26 CONFIDENTIAL D0,D1,D2…DN CRCコー ド MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E テストの説明 4.5.1 クラス B 要件を満たすには, フラッシュテストは『単一ビット不良』のチェックを行う必要があります。こ のテストは CRC16/32 テストとして実行できます。ハードウェア CRC16/32 テストを実現するためにオン チップの CRC モジュールを使用します。また, ハードウェア CRC と同一の演算を実行するソフトウェア CRC16/32 も提供しています。 フラッシュテストで CRC16 演算を使用する場合は, IEC60730_user.h ファイル中で定義 『FLASH_TEST_USE_CRC16』を有効にします。さもなくば CRC32 演算が実行されます。 このテストは, スタートアップ手続き時に実行してコード領域全体をテストするか, または定期的に呼び出 してサブブロックをテストすることができます。 フラッシュテストは、プログラム開発時に開発ツールで作成した CRC コードと、テスト時に演算して作成 した CRC コードの比較を行います。開発ツールで CRC コードを作成する方法を 8.1 フラッシュの CRC コ ード作成方法に示します。 注意: 1. CRC は, ハミング距離 3 の検出を行う H.2.19.4.1 を満たす, 外部との通信データのテストに使用すること ができます。 ■ ハードウェア CRC ハードウェア CRC モジュールを使用した CRC コードの生成手順は以下のようになります。 (1) CRC 制御レジスタ CRCCR および初期値レジスタ CRCINIT を初期化する (2) 初期値ビット(CRCCR:INIT)に『1』を書き込む。CRCINIT の値が CRC レジスタ CRCR にロードされる。 (3) 入力データレジスタ CRCIN に連続的にデータを書き込む。すると CRC の計算が始まる。CRC コードを 得るためには CRC レジスタ(CRCR)を読み出す。 Figure 4-13 CRC コード生成のシーケンス 初期化() データ書込み() CRC 計算() 開始() データ書込み() データ書込み() CRC 読出し() September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 27 A P P L I C A T I O N ■ > N O T E ソフトウェア CRC ソフトウェア CRC16 の演算 CRC テーブル参照法を使用します。CRC コードを生成するためにソフトウェア CRC16 演算は 6 つの手順を 実行します。 (1) (2) (3) (4) (5) (6) CRC コードを 0xFFFF で初期化する。 CRC コードを 256 で割って『temp』として保存する。 CRC コードを 8 ビット左シフトする。 CRC コードと、CRC テーブルから取得した値(テーブルインデックスは『temp』と対象データを XOR した値を使用)の XOR をとり、CRC コードに格納する。 対象データを 1 バイト分インクリメントする。 対象データのバイトサイズ分、(2)~(5)を繰り返す。 ソフトウェア CRC16 生成コードと CRC16 のテーブルを次の図に示します。 Figure 4-14 ソフトウェア CRC16 生成ソースコード stl_uint16_t IEC60730_SoftwareCRC16Gen(stl_uint8_t *pData, stl_uint32_t Size) { stl_uint8_t temp; stl_uint8_t *p_temp_data = pData; stl_uint16_t crc = 0xFFFF; while(Size-- != 0) { temp = crc/256; crc <<=8; crc ^= CRCTable[temp^*p_temp_data]; p_temp_data++; } return crc; } 28 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N Figure 4-15 N O T E CRC16 のテーブル const stl_uint16_t crc_table[256]={ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 }; > ソフトウェア CRC32 の演算 CRC テーブル参照法を使用します。CRC コードを生成するためにソフトウェア CRC32 演算は 6 つの手順を 実行します。 (1) CRC コードを 0xFFFFFFFF で初期化する。 (2) CRC コードを 24 ビット右シフトして『temp』として保存する。 (3) CRC コードを 8 ビット左シフトした値と、CRC テーブルから取得した値(テーブルインデックスは『temp』 と対象データを XOR した値を使用)の XOR をとり、CRC コードに格納する。 (4) 対象データを 1 バイト分インクリメントする。 (5) 対象データのバイトサイズ分、(2)~(4)を繰り返す。 (6) 最後に CRC コードをビット反転させる。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 29 A P P L I C A T I O N N O T E ソフトウェア CRC32 生成コードと CRC32 のテーブルを次の図に示します。 Figure 4-16 ソフトウェア CRC32 生成ソースコード stl_uint32_t IEC60730_SoftwareCRC32Gen(stl_uint8_t *pData, stl_uint32_t Size) { stl_uint8_t temp; stl_uint8_t *p_temp_data = pData; stl_uint32_t crc = 0xFFFFFFFF; while(Size--) { temp=( crc >> 24 ); crc = ( crc << 8 ) ^ CRCTable[temp^*p_temp_data]; p_temp_data++; } return ~crc; } Figure 4-17 CRC32 のテーブル const stl_uint32_t CRCTable[256]={ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, 30 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 0xd5b88683L, 0x690ce0eeL, 0x7a089632L, 0x4f040d56L, 0x5c007b8aL, 0x251d3b9eL, 0x36194d42L, 0x0315d626L, 0x1011a0faL, 0xf12f560eL, 0xe22b20d2L, 0xd727bbb6L, 0xc423cd6aL, 0xbd3e8d7eL, 0xae3afba2L, 0x9b3660c6L, 0x8832161aL, 0x5d8a9099L, 0x4e8ee645L, 0x7b827d21L, 0x68860bfdL, 0x119b4be9L, 0x029f3d35L, 0x3793a651L, 0x2497d08dL, 0xc5a92679L, 0xd6ad50a5L, 0xe3a1cbc1L, 0xf0a5bd1dL, 0x89b8fd09L, 0x9abc8bd5L, 0xafb010b1L, 0xbcb4666dL, N O T E 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, 0x6c47164aL, 0x61043093L, 0x65c52d24L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L }; 4.5.2 API の定義 CRC16 を用いたフラッシュテストの実装 名称 パラメータ リターン IEC60730_HardwareCRC16Gen pData:テストデータのアドレス Size:データサイズ CRC の値 説明: この API は, 内蔵ハードウェアの CRC モジュールによって CRC16 生成を行います。 CCITT CRC16 生成多項式: 0x1021(0x11021 の最上位ビットを省略) September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 31 A P P L I C A T I O N 名称 N O T E IEC60730_HardwareCRC16Test pData:テストデータのアドレス パラメータ Size:データサイズ Crc:期待される CRC コード 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 説明: この API はハードウェア CRC16 テストを実行します。スタートアップ手続きで呼び出して全コード領域を テストするか, コード実行中にサブブロックを定期的にテストします。 名称 IEC60730_SoftwareCRC16Gen pData:テストデータのアドレス パラメータ Size:データサイズ リターン CRC の値 説明: この API はソフトウェア CRC 演算により CRC16 生成を実行します。CRC テーブル参照法を使用します。 名称 IEC60730_SoftwareCRC16Test pData:テストデータのアドレス パラメータ Size:データサイズ Crc:期待される CRC コード 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 説明: この API はソフトウェア CRC16 テストを実行します。このテストは FM4 MCU と通信する他のシステムで も使用可能です。 ■ CRC32 を用いたフラッシュテストの実装 名称 パラメータ リターン IEC60730_HardwareCRC32Gen pData:テストデータのアドレス Size:データサイズ CRC の値 説明: この API は, 内部ハードウェア CRC モジュールで CRC32 生成を行います。 CRC32 生成多項式: 0x04C11DB7 32 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 名称 N O T E IEC60730_HardwareCRC32Test pData:テストデータのアドレス パラメータ Size:データサイズ Crc:期待される CRC コード 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 説明: この API はハードウェア CRC32 テストを実行します。スタートアップ手続きで呼び出して全コード領域を テストするか, またはコード実行中にサブブロックを定期的にテストします。 名称 IEC60730_SoftwareCRC32Gen pData:テストデータのアドレス パラメータ Size:データサイズ リターン CRC の値 説明: この API はソフトウェア CRC 演算により CRC32 生成を行います。テーブル参照法を使用します。 名称 IEC60730_SoftwareCRC32Test pData:テストデータのアドレス パラメータ Size:データサイズ Crc:期待される CRC コード リターン 0: IEC60730_TEST_NORMAL 1: IEC60730_TEST_FUNC_ERROR 説明: この API はソフトウェア CRC32 テストを実行します。このテストは FM4 MCU と通信する他のシステムで も実行可能です。 4.6 揮発性メモリテスト FM4 MCU での揮発性メモリテストとは SRAM テストのことです。SRAM サイズは Table 1-1 に示すように 製品に応じて異なります。 4.6.1 テストの説明 クラス B 要件を満たすためには, SRAM テストは『DC 不良』のチェックを行う必要があります。この SRAM テストの実行には単純なチェッカーボード法を使用します。 このテストはスタートアップ手続き時に実行して SRAM 領域全体をテストできます。また, コード実行中に サブブロックを定期的にテストすることも可能です。ただし, このテスト終了時にはデータが破壊さること に注意が必要です。 このテストはすべての RAM 領域が対象なので, このテストでは変数を使用しないことが推奨されています。 そのため, レジスタテストの実装にはアセンブリ言語が使用されています。またこのテストは非常に重要な ので, RAM テストでエラーが検出されるとプログラムが無限ループに入るように設計されています。 1 ワードのデータをテストする手順を以下に示します。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 33 A P P L I C A T I O N N O T E Figure 4-18 チェッカーボード法による 1 ワードのテスト 開始 4.6.2 0x55555555をRA M領域のアドレス に書き込み 0xAAAAAAAAをRA M領域のアドレスに 書き込み 書き込みデータを 検証 書き込み データを検証 終了 API の定義 名称 パラメータ リターン. iec60730_ram_test StartAddr(R0):開始 RAM アドレス EndAddr(R1):終了 RAM アドレス なし 説明: この API はチェッカーボード法で SRAM 領域をテストします。すなわち, 『0』と『1』を交互にメモリに 書き込み, 書き込まれたデータを読み出すことで書込みが正しく行われたかを検証します。このテストはス タック故障と DC 故障を検出できます。 このテストはスタートアップ手続きで呼び出すか, 定期的に呼び出すことが可能です。ただしテスト終了後 にデータは保存されません。 4.7 FPU(浮動小数点演算ユニット)テスト Cortex-M4F FPU は、ARMv7-M にある浮動小数点拡張命令(FPv4-SP)に準拠しています。これは IEEE 754 規格の中にある ANSI/IEEE 754-2008 で定義されている 2 進浮動小数点演算に準拠しています。 この FPU は ARM アーキテクチャリファレンスマニュアルに記載されている、すべての単精度データ処理 命令およびデータ型をサポートしています。 4.7.1 テストの説明 この FPU は、32 個の単精度レジスタ(S0~S31)を持つ浮動小数点演算ユニットで、特定の FPU 命令で動作 します。この機能を有効にするためには、IAR/KEIL の IDE ツールにて Cortex-M4F 浮動小数点システム レジスタの機能を有効にする必要があります。 この浮動小数点システムレジスタは FM4 のスタートアップファイルで” __FPU_PRESENT ”と定義されて います。IAR/KEIL のコンパイラにて FPU を有効にして、リコンパイルを実行するだけで対応可能です。 図は、IAR EWARM における FPU の設定箇所になります。 34 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 4.7.2 N O T E API Definition 名称 IEC60730_FPUCalcTest(void) パラメータ なし リターン 0: IEC60730_TEST_NORMAL 説明: この API は FM4-FPU の単精度浮動小数点演算をテストします。いくつかの単精度浮動小数点データの計算 を追加しています。 4.8 IO テスト FM4 MCU には 8 個までの IO ポート(ポート 0~ポート 8)があり, ポートごとに 16 個のチャネルがあります。 これらのポートは, パッケージに対応した構成となっています。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 35 A P P L I C A T I O N N O T E テストの説明 4.8.1 クラス B の要件を満たすためには, GPIO に対して『機能エラー』のチェックを行う必要があります。 したがって, 入力, 出力機能の双方に対して機能テストが行われます。IO の方向は Figure 4-19 に示す IO レジスタで設定できます。GPIO の詳細な設定に関してはペリフェラルマニュアルを参照してください。 ■ ■ 入力 IO 設定: ADE=0, PFR=0, DDR=0 出力 IO 設定: ADE=0, PFR=0, DDR=1 Figure 4-19 IO 機能の構成 I/O ポートの機能 使用可能なメイン機能 使用可能なサブ機能 ADE/ SPSR PFR DDR PCR - - 切断 0 有効 1 切断 特殊な端子 アナログ入力 USB N/A 1 水晶 GPIO 入力端子 GPIO 出力端子 周辺機能出力端子 周辺機能双方向端子 周辺機能入力端子 周辺機能入力端子 0 GPIO 機能入力端子(FB) 周辺機能入力端子(FB) GPIO 機能入力端子(FB) 周辺機能入力端子(FB) 切断 0 GPIO 機能入力端子(FB) 1 周辺機能入力端子(FB) GPIO 機能入力端子 - 有効 有効 IO 入力テストは, 選択した IO 入力値の PDIR に保存された値が期待値と同じかどうかをチェックします。 IO 出力テストは, PDOR に保存された出力値が正しいかどうかをチェックします。これらのテストは スタートアップ手続きの中で機能テストとして実行されなければなりません。 Figure 4-20 36 CONFIDENTIAL IO 入力/出力テストのフローチャート MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 4.8.2 N O T E API の定義 名称 IEC60730_GPIOOutputTest Port:ポート番号 パラメータ Bit:ビット番号 Value:出力値 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 2: IEC60730_TEST_PARA_ERROR 説明: この API は, 出力端子のレベルを設定し, 読み出した値が期待値どおりであるかをチェックすることで, GPIO 出力テストを実行します。 名称 IEC60730_GPIOInputTest Port:ポート番号 パラメータ Bit:ビット番号 Value:期待される端子レベル 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 2: IEC60730_TEST_PARA_ERROR 説明: この API は, 入力ピンから値を読み取り, その値が期待値どおりであるかをチェックすることで, GPIO 入力 テストを実行します。 4.9 AD テスト FM4 MCU には 12 ビットの AD モジュールが集積されています。最大 3 ユニットで 16 チャネルです。 4.9.1 テストの説明 クラス B の要件を満たすためには, AD に対して『機能エラー』のチェックを行う必要があります。この テストは, 選択された AD チャネルから AD 信号を取得し, AD 変換された値が期待範囲内であるかを チェックします。 スキャンモードを使用し, 複数チャネルを同時にテスト可能です。1 つのチャネルをチェックする AD テスト のフローチャートを次の図に示します。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 37 A P P L I C A T I O N Figure 4-21 4.9.2 N O T E AD テストのフローチャート API の定義 名称 IEC60730_ADTest ADTest_Info: a ad_test_info_t 構造体 typedef struct ad_test_info { パラメータ uint8_t ADUnit; /* unit num, 8/10 bit A/D -> 0/1/2 */ uint8_t *Ch; /* pointer to AD channel num */ uint8_t ChSize; /* channel size */ uint16_t *ExpLowerValue; /* pointer to expected lower value */ uint16_t *ExpUpperValue; /* pointer to expected upper value */ } ad_test_info_t; 0: IEC60730_TEST_NORMAL リターン 1: IEC60730_TEST_FUNC_ERROR 2: IEC60730_TEST_PARA_ERROR 説明: この API は, AD 変換の結果が期待範囲内であるかどうかをチェックする, AD テストが実装されています。 このテストはスタートアップ手続き中に実行されなければなりません。 38 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 5. N O T E サンプルプロジェクト IAR と Keil IDE に対応した 2 つのデモプロジェクトを示します。この章では SK-FM4-U120-9B560 V1.1.0 を 例として IEC60730 STL を実際のシステムにどのように統合するかを説明します。FM4-120L-S6E2HG V1.0 および FM4-176L-S6E2GM V1.0 については、*.icf ファイルおよび FLASH ダウンローダファイルの設定を 行うことで同様に立ち上げ可能です。 5.1 ユーザ設定 ユーザは最初に IEC60730_user.h ファイル内の定義を設定しなければなりません。 『PDL_MCU_INT_TYPE』の定義 5.1.1 例えば “MB9B560R”を使用する場合は、定義『PDL_INT_TYPE_A』を有効にします。 他の品種についても同様に、それぞれ対応した割込みベクタのタイプを定義します。 定義『IEC60730_FLASHTEST_USE_CRC16』 5.1.2 フラッシュテストに CRC16 演算を使用する場合は, この定義を有効にします。フラッシュテストに CRC32 演算を使用する場合は, この定義を無効にします。 このデモプログラムでは CRC16 演算を使用します。 定義『IEC60730_CLKTEST_USE_CSV』 5.1.3 クロックテストの実行に CSV を使用する場合は, この定義を有効にします。そうでない場合は, サブ クロックで駆動されるウォッチカウンタを標準タイマとしてクロックテストが実行されます。 このデモプログラムでは後者の方法が示されます。 5.2 プロジェクトの構造 クラス B STL ルーチンは 2 つのメインプロセス, つまりスタートアップと定期的セルフテストに分かれて います。定期的テストは適用される前にセットアップブロックにより初期化されなければなりません。 スタートアップセルフテスト 5.2.1 PC, レジスタ, SRAM テストはすべてスタートアップセルフテストで, リセットハンドラで呼び出されなけ ればなりません。 フラッシュ, AD, IO は, プログラムがメインファンクションにジャンプした後, システム クロックの初期化後にテストできます。 AD は, SK-FM4-U120-9B560 V1.1.0 および FM4-120L-S6E2HG V1.0 の場合は ch18、FM4-176L-S6E2GM V1.0 の場合は ch17(いずれもポテンションメータの入力に接続)をテス トに使用します。 IO 入力は, SK-FM4-U120-9B560 V1.1.0、FM4-120L-S6E2HG V1.0 および、FM4-176L-S6E2GM のキー入力 (P60/P68)をテストに使用します。 テストの定期的初期化 5.2.2 割込みテストとクロックテストはテスト開始前に初期化されなければなりません。 ■ 割込みテスト初期化 デュアルタイム割込みをリロードタイマ 0~3 のモニタに使用します。初期化設定パラメータを次の表に 示します。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 39 A P P L I C A T I O N N O T E Table 5-1 割込みテストの初期値 割込み名称 割込み間隔 デュアルタイマ割込み 標準度数 定義済み範囲 2.5ms 25ms 10 [8,12] リロードタイマ 1 1ms 25ms 25 [22, 28] リロードタイマ 2 500µs 25ms 50 [45,55] リロードタイマ 3 250µs 25ms 100 [95,105] リロードタイマ 0 ■ クロックテストの初期化 CPU クロックは HCLK で, このシステムのデュアルタイマのソースクロックは PCLK0 (HCLK/2)に設定され ています。したがってウォッチカウンタにより, デュアルタイマのソースクロックを CPU クロックの代わり に間接的にテストすることができます。 ウォッチカウンタの割込み間隔は 0.5s, デュアルタイマの割込み間隔は 25ms になっているので, デュアル タイマの標準度数は 20 であり許容範囲は 18 から 22 の間に設定されています。メインループの実行に 10 サイクルかかると仮定します。メインループの最小実行時間は 1/16000000 となるので, しきい値を 10000000 に設定します。 5.2.3 定期的なテスト 割込みおよびクロックテストはコード実行中に定期的に実行されなければなりません。 IEC60730_IntTest をデュアルタイマ割込みに統合し, IEC60730_IntCnt をそれぞれのリロードタイマ割込みに 統合します。 IEC60730_ClkTest を ウ ォ ッ チ カ ウ ン タ 割 込 み に , IEC60730_ClkCnt を デ ュ ア ル タ イ マ 割 込 み に , IEC60730_ClkMonInMainloop をメインループにそれぞれ統合します。 Figure 5-1 にクラス B ソフトウェアパッケージをこのアプリケーションソフトウェアにどのように統合する かについての基本原則を示します。 40 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N Figure 5-1 N O T E プロジェクトの構造 リセット スタートアップセルフテスト(1) X (PC, レジスタ, SRAMテスト) アプリケーション起動 システムクロック初 期化 スタートアップセルフテスト(2) リロードタイマ0 リロードタイマ1 リロードタイマ2 リロードタイマ3 ISR ISR ISR ISR ユーザコード ユーザコード ユーザコード ユーザコード IEC60730_ IntCnt(0) IEC60730_ IntCnt(1) IEC60730_ IntCnt(2) IEC60730_ IntCnt(3) ユーザコード ユーザコード ユーザコード ユーザコード リターン リターン リターン リターン (CRC, AD, IOテスト) X ユーザ周辺機器と機能の初 期化 X クロックと割込みの初期化 メインループ ウォッチカウンタ デュアルタイマ ISR ISR ユーザコード ユーザコード IEC60730_ ClkTest() IEC60730_ IntTest() ユーザコード ユーザコード リターン リターン ユーザモジュール1 IEC60730_ ClkMonInMainloop() X ユーザモジュール2 … 5.3 サンプルコード スタートアップファイル 5.3.1 ■ リセットハンドラ Figure 5-2 リセットハンドラのサンプルコード Reset_Handler bl iec60730_reg_test ; after reset, test register first bl iec60730_pc_test ; test pc ldr r0, =0x20000000 ; set RAM start address ldr r1, =0x20007fff ; set RAM end address bl iec60730_ram_test ; test all Data RAM area September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 41 A P P L I C A T I O N N O T E メインファイル 5.3.2 ■ メインファンクション Figure 5-3 メインファンクションのサンプルコード uint32_t main(void) { uint32_t hw_crc,sw_crc; uint8_t a[10] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99}; /* Use CSV to implement clock test */ #ifdef IEC60730_CLKTEST_USE_CSV uint16_t reg_rst_str; fcs_mon_info_t fcs_mon_info = {FCS_MON_ENABLE, 5}; if(IEC60730_TEST_NORMAL != IEC60730_CheckCSVStat(®_rst_str)) { while(1); } IEC60730_InitCSV(CSV_MCLK_MON_ENABLE, CSV_SCLK_MON_ENABLE, fcs_mon_info); #endif SystemInit(); if(IEC60730_TEST_NORMAL != IEC60730_FPUCalcTest()) { while(1); } #ifdef IEC60730_FLASHTEST_USE_CRC16 /* use hardware CRC16 to calculate expected crc first, then verify if the CRC code calculated by software is same with expected crc */ hw_crc = IEC60730_HardwareCRC16Gen(a, sizeof(a)); if(IEC60730_TEST_NORMAL != IEC60730_SoftwareCRC16Test(a, sizeof(a), hw_crc)) { while(1); } /* use software CRC16 to calculate expected crc first, then verify if the CRC code calculated by hardware is same with expected crc */ sw_crc = IEC60730_SoftwareCRC16Gen(a, sizeof(a)); if(IEC60730_TEST_NORMAL != IEC60730_HardwareCRC16Test(a, sizeof(a), sw_crc)) { while(1); } #else /* use hardware CRC32 to calculate expected crc first, then verify if the CRC code calculated by software is same with expected crc */ hw_crc = IEC60730_HardwareCRC32Gen(a, sizeof(a)); if(IEC60730_TEST_NORMAL != IEC60730_SoftwareCRC32Test(a, sizeof(a), hw_crc)) { while(1); } 42 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E /* use software CRC32 to calculate expected crc first, then verify if the CRC code calculated by hardware is same with expected crc */ sw_crc = IEC60730_SoftwareCRC32Gen(a, sizeof(a)); if(IEC60730_TEST_NORMAL != IEC60730_HardwareCRC32Test(a, sizeof(a), sw_crc)) { while(1); } #endif /* GPIO output test * test P27 (control LED_R) * test P38 (control LED_G) * test PE0 (control LED_B) */ #if (SK_FM4_U120_9B560_V1_1_0 || FM4_120L_S6E2HG_V1_0 || FM4_176L_S6E2GM_V1_0) /* Test LED_R_PORT Output */ if(IEC60730_TEST_NORMAL != IEC60730_GPIOOutputTest(LED_R_PORT,LED_R_PIN,TEST_PIN_LOW)) { while(1); } if(IEC60730_TEST_NORMAL!=IEC60730_GPIOOutputTest(LED_R_PORT,LED_R_PIN,TEST_PIN_HIGH)) { while(1); } /* Test LED_G_PORT Output */ if(IEC60730_TEST_NORMAL != IEC60730_GPIOOutputTest(LED_G_PORT,LED_G_PIN,TEST_PIN_LOW)) { while(1); } if(IEC60730_TEST_NORMAL!=IEC60730_GPIOOutputTest(LED_G_PORT,LED_G_PIN,TEST_PIN_HIGH)) { while(1); } /* Test LED_B_PORT Output */ if(IEC60730_TEST_NORMAL!=IEC60730_GPIOOutputTest(LED_B_PORT,LED_B_PIN,TEST_PIN_LOW)) { while(1); } if(IEC60730_TEST_NORMAL!=IEC60730_GPIOOutputTest(LED_B_PORT,LED_B_PIN,TEST_PIN_HIGH)) { while(1); } #endif September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 43 A P P L I C A T I O N N O T E /* GPIO input test ** for SK_FM4_U120_9B560_V1_1_0 and FM4_120L_S6E2HG_V1_0 * test P60 * test P68 ** for FM4_176L_S6E2GM_V1_0 * test P20 */ #if (SK_FM4_U120_9B560_V1_1_0 || FM4_120L_S6E2HG_V1_0) /* Test GPIO P68 input */ if(IEC60730_TEST_NORMAL != IEC60730_GPIOInputTest(PORT_NUM_6,BIT_NUM_8,TEST_PIN_HIGH)) { while(1); } /* Test GPIO P60 input */ if(IEC60730_TEST_NORMAL != IEC60730_GPIOInputTest(PORT_NUM_6,BIT_NUM_0,TEST_PIN_HIGH)) { while(1); } #elif (FM4_176L_S6E2GM_V1_0) /* Test GPIO P20 input */ if(IEC60730_TEST_NORMAL != IEC60730_GPIOInputTest(PORT_NUM_2,BIT_NUM_0,TEST_PIN_HIGH)) { while(1); } #endif #if (SK_FM4_U120_9B560_V1_1_0 || FM4_120L_S6E2HG_V1_0) /* AD test - Check if input is in expected range. * Steps - <<For SK_FM4_U120_9B560_V1_1_0 and FM4_120L_S6E2HG_V1_0>> * - Rotate pot R11 to the middle first, setting the target value to 0x800. * - Set expected range to 0x700~0x900 * - <<For FM4_176L_S6E2GM_V1_0>> * - Cover phototransistor Q3 * - Set expected range to 0x400~0x700 * - This ADTest function will sample the potentio value and compare * with the set range */ if(IEC60730_TEST_NORMAL != IEC60730_ADTest(ADC_UNIT0, CH18, 0x700, 0x900)) { while(1); } #elif (FM4_176L_S6E2GM_V1_0) if(IEC60730_TEST_NORMAL != IEC60730_ADTest(ADC_UNIT0, CH17, 0x400, 0x700)) { while(1); } #endif 44 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E /* Init LEDs */ LED_Init(); /* Init Buttons */ Button_Init(); /* Interrupt test initialization */ IEC60730_IntTestInit(IntTest_Freq, ¥ IntTest_FreqLower,¥ IntTest_FreqUpper,¥ IntTest_FreqInit, ¥ sizeof(IntTest_Freq)/sizeof(uint32_t)); #ifndef IEC60730_CLKTEST_USE_CSV /* clock test initialization * test CPU clock by checking if the 25ms interval time is set for dual timer, * the occurrence frequency of dual-time is about 20 per 500ms(produced by watch counter) * 1 cycle time = (1/160MHz). Assume it takes 10 cycles to implement main loop. */ IEC60730_ClkInit(18, 22, 10000000); /* Initialize watch-counter */ WTC_Init(); #endif /* Initialize dual-timer */ DT_Init(); /* Initialize 4 base-timers */ BT_Init(); /* Main Loop */ while(1) { /* Wait for timer tick- 3 LEDs will blink every 1 second */ /* Dual-Timer Tmr1Tick-25ms */ switch(Tmr1Tick) { case 40: LED_R_PDOR &= ~(1 << LED_R_PIN); // turn on LED_B_PDOR |= (1 << LED_B_PIN); // turn off break; case 80: LED_R_PDOR |= (1 << LED_R_PIN); // turn off LED_G_PDOR &= ~(1 << LED_G_PIN); // turn on break; case 120: LED_G_PDOR |= (1 << LED_G_PIN); // turn off LED_B_PDOR &= ~(1 << LED_B_PIN); // turn on Tmr1Tick = 0; // clear timer tick break; default: break; } September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 45 A P P L I C A T I O N N O T E #ifndef IEC60730_CLKTEST_USE_CSV /* monitor watch counter interrupt */ if(IEC60730_TEST_NORMAL != IEC60730_ClkMonInMainloop()) { while(1); } #endif } } ■ デュアルタイマ ISR Figure 5-4 デュアルタイマ ISR void DT1_2_IRQHandler(void) { if(1 == FM4_DTIM->TIMERXRIS&0x01) { FM4_DTIM->TIMERXINTCLR = 1; #ifndef IEC60730_CLKTEST_USE_CSV /* count the clock tick */ IEC60730_ClkCnt(); #endif /* Set timer tick for LEDs */ Tmr1Tick++; /* implement interrupt test */ if(IEC60730_TEST_NORMAL != IEC60730_IntTest()) { while(1); } } } ■ ウォッチカウンタ ISR Figure 5-5 ウォッチカウンタ ISR void WC_IRQHandler(void) { if(1 == bFM4_INTREQ_IRQ048MON_WCINT) { /* Clear interrupt flag */ FM4_WC->WCCR &= 0xFE; /* implement clock test */ if(IEC60730_TEST_NORMAL != IEC60730_ClkTest()) { while(1); } } } 46 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N ■ N O T E リロードタイマ ISR Figure 5-6 リロードタイマ ISR void BT0_IRQHandler(void) { if(FM4_BT0_RT->STC&0x01) { FM4_BT0_RT->STC = FM4_BT0_RT->STC & 0xFE; IEC60730_IntCntPro(0); /* count frequency value for interrupt 0 */ } } void BT1_IRQHandler(void) { if(FM4_BT1_RT->STC&0x01) { FM4_BT1_RT->STC = FM4_BT1_RT->STC & 0xFE; IEC60730_IntCntPro(1); /* count frequency value for interrupt 1 */ } } void BT2_IRQHandler(void) { if(FM4_BT2_RT->STC&0x01) { FM4_BT2_RT->STC = FM4_BT2_RT->STC & 0xFE; IEC60730_IntCntPro(2); /* count frequency value for interrupt 2 */ } } void BT3_IRQHandler(void) { if(FM4_BT3_RT->STC&0x01) { FM4_BT3_RT->STC = FM4_BT3_RT->STC & 0xFE; IEC60730_IntCntPro(3); /* count frequency value for interrupt 3 */ } } September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 47 A P P L I C A T I O N 6. N O T E STL の API の性能 Table 6-1 実行時間 API 名称 (サイクル) STL API の性能 使用 使用 スタック ROM 使用 RAM (バイト) (バイト) (バイト) (グローバル変数) iec60730_pc_test 138 0 207 0 iec60730_reg_test 388 0 693 0 4 60 0 0 38 0 0 80 20 IEC60730_IntTestInit IEC60730_IntCntPro IEC60730_IntTest 111 (4 割込み) 27 221 (4 割込み) IEC60730_ClkCnt 11 0 34 0 IEC60730_ClkTest 55 0 84 32 IEC60730_ClkMonInMainloop 52 8 72 0 IEC60730_ClkTestReset 22 0 32 0 IEC60730_InitCSV 141 12 241 0 IEC60730_CheckCSVStat 24 0 56 0 4 118 0 8 22 0 IEC60730_HardwareCRC16Gen IEC60730_HardwareCRC16Test IEC60730_SoftwareCRC16Gen IEC60730_SoftwareCRC16Test IEC60730_HardwareCRC32Gen IEC60730_HardwareCRC32Test IEC60730_SoftwareCRC32Gen IEC60730_SoftwareCRC32Test iec60730_ram_test 181 (10 バイトデータ) 199 (10 バイトデータ) 286 (10 バイトデータ) 304 (10 バイトデータ) 180 (10 バイトデータ) 197 (10 バイトデータ) 180 (10 バイトデータ) 212 (10 バイトデータ) 148 (16 バイトデータ) 52+ 4 512 0 (CRC テーブル) 8 22 0 4 116 0 8 20 0 4 1024 42+ 0 (CRC テーブル) 8 20 0 0 88 0 258 0 IEC60730_GPIOOutputTest 131 24 IEC60730_GPIOInputTest 129 28 270 0 IEC60730_ADTest 977 88 1172 0 注意: 1. コードの実行サイクルは通常の動作状態でテストします。 2. この STL の ROM サイズは 4111 バイト(FPU テスト関数は除く)です。 (フラッシュテストには CRC16, クロックテストにはウォッチカウンタを使用します)。 48 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 7. N O T E 参照文書 [1]. IEC 60730-1 Reference Manual Edition3.2, 2007 [2]. ARMv7-M Architecture Reference Manual, 2008 [3]. Cortex-M4 r0p1 Technical Reference Manual, 2009 [4]. MB9BF568R-DS709-00001-0v01-J (MB9B560R シリーズ データシート) [5]. MN709-00021-1v0-J (S6E2HG シリーズ データシート) [6]. S6E2GM_DS709_00039-0v01-J (S6E2GM シリーズ データシート) [7]. Spansion 32-bit Microcontroller FM4 Peripheral Manual, 2013 [8]. IAR SYSTEM Technical Note 65473 – IELFTOOL Checksum – Basic actions September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 49 A P P L I C A T I O N 8. N O T E 付録 8.1 フラッシュの CRC コード作成方法 4.51CPU レジスタテストで使用するデータ/プログラムの CRC コードの生成方法について、IAR Embedded Workbench の例を以下に説明します。詳細は IAR のマニュアル(Note 65473-IELFTOOL Checksum Basic actions)をご参照ください。 8.1.1 コマンドラインの起動 「プロジェクト」→「オプション」→「リンカ」→「追加オプション」タブを選択し、"コマンドライン オプションの使用"にチェックを入れます。 8.1.2 コマンドの入力 1. --place_holder コマンド CRC コードを作成して ROM にセクションを生成する為に、"--place_holder"オプションを使用します。 セクションのサイズを 4byte、アライメントを 1 に設定するため下記のコマンドを設定します。 --place_holder __checksum,4,.checksum,1 2. --fill コマンド CRC コードを作成するためには、対象領域の未使用領域に対して任意の値をフィルする必要があります。 そのために、"--fill"コマンドを使用します。対象領域 0x00000000-0x00003FFF にフィル値 0xFF を設定する コマンドは以下の設定となります。 50 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E --fill 0xFF;0x0000-0x3FFF 対象領域 0x00000000-0x00003FFF、0x5000-0x5FFF、0x6500-0x6FFF にフィル値 0xFF を設定するコマンドは 以下の設定となります。 --fill 0xFF;0x0-0x3FFF;0x5000-0x5FFF;0x6500-0x6FFF 3.--checksum コマンド 使用する CRC のアルゴリズムを設定します。CRC コードを格納するシンボル名を__checksum、サイズを 4byte、 ア ル ゴ リ ズ ム を CRC32 、 計 算 を LSB first 、 CRC コ ー ド を 0xFFFFFFFF で 初 期 化 、 対 象 領 域 0x00000000-0x00003FFF、0x5000-0x5FFF、0x6500-0x6FFF の設定をするコマンドは以下のようになります。 --checksum __checksum:4,crc32:mi,0xffffffff;0x0-0x3FFF;0x5000-0x5FFF;0x6500-0x6FFF 0.,0.,0.を入力した後、"OK"を押してウィンドウを閉じます。 8.1.3 メッセージウィンドウ表示内容の設定 メイク時のメッセージをメッセージウィンドウへ表示するように設定します。 「ツール」→「オプション」→「メッセージ」を選択します。"ビルドメッセージの表示(S):" のコンボ ボックスで "全て" を選択します。右下の"OK"または"適用"ボタンを押します。 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 51 A P P L I C A T I O N 8.1.4 N O T E リンカ設定ファイルの設定 生成した CRC コードをフラッシュメモリに格納するため、リンカ設定ファイルに設定を追加します。debug モードの場合は” mb9bf568_ram.icf”ファイル、release モードの場合は” mb9bf568.icf”ファイルです。0x8000 番地に CRC コードを格納する場合は以下の設定を追加します。 define symbol __ICFEDIT_checksum_start__ = 0x00008000; place at address mem: __ICFEDIT_checksum_start__ { readonly section .checksum }; 52 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N 8.1.5 N O T E CRC コード作成 メイク(ビルド) を実行し、CRC コードが作成されたことを確認します。 - 以上 - September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 53 A P P L I C A T I O N N O T E 主な変更内容 9. ページ 場所 変更箇所 Revision 1.0 - 54 CONFIDENTIAL - Initial release MCU-AN-510127-J-10, September 11, 2015 A P P L I C A T I O N N O T E MCU-AN-510127-J-10 Cypress Application Note FM4 Family 32-BIT MICROCONTROLLER IEC60730 Class B 準拠 セルフテストライブラリ アプリケーションノート September 2015 Rev. 1.0 Published: Edited: Cypress Semiconductor Corp. コーポレートコミュニケーション部 September 11, 2015, MCU-AN-510127-J-10 CONFIDENTIAL 55 A P P L I C A T I O N N O T E 免責事項 本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が 確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における 核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また は損害についても、Cypress は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願 いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。 商標および注記 このドキュメントは、断りなく変更される場合があります。本資料には Cypress が開発中の Cypress 製品に関する情報が記 載されている場合があります。Cypress は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする権 利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全性, 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、また、 明示, 黙示または法定されているあらゆる保証をするものでもありません。Cypress は、このドキュメントに含まれる情報を 使用することにより発生したいかなる損害に対しても責任を一切負いません。 Copyright © 2015 Cypress Semiconductor Corp. All rights reserved. 商標:Cypress, Cypress ロゴ, Spansion®, Spansion ロゴ (図形マーク), MirrorBit®, MirrorBit® Eclipse™, ORNAND™, Easy DesignSim™, Traveo™ 及びこれらの組合せは、米国・日本ほか諸外国における Cypress Semiconductor Corp.の商標です。第三 者の社名・製品名等の記載はここでは情報提供を目的として表記したものであり、各権利者の商標もしくは登録商標となっ ている場合があります。 56 CONFIDENTIAL MCU-AN-510127-J-10, September 11, 2015