41
アプリケーションノート R01AN1977JJ0081 Rev.0.81 Page 1 of 38 2016.09.02 RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版) 要旨 本アプリケーションノートは、MMC ホストインタフェースに接続された MMC コントローラ内蔵 NAND フラッシュメモリ(eMMC デバイス)からブートする方法について説明します。 本アプリケーションノートで説明するブート処理では、RZ/A1 MMC ドライバソフトウェアライブラリ (以下、MMC ドライバとします)を使用しています。 対象デバイス RZ/A1H 本アプリケーションノートを他のマイコンへ適用する場合、そのマイコンの仕様にあわせて変更し、十分 評価してください。 R01AN1977JJ0081 Rev.0.81 2016.09.02

RZ/A1H グループ - renesas.com · eMMC ブートでは、パワーオンリセット解除後にブート 起動用内蔵rom プログラムを実行します。ブート起動用内蔵rom

  • Upload
    lykiet

  • View
    354

  • Download
    2

Embed Size (px)

Citation preview

アプリケーションノート

R01AN1977JJ0081 Rev.0.81 Page 1 of 38 2016.09.02

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

要旨 本アプリケーションノートは、MMC ホストインタフェースに接続された MMC コントローラ内蔵 NAND

フラッシュメモリ(eMMC デバイス)からブートする方法について説明します。

本アプリケーションノートで説明するブート処理では、RZ/A1 用 MMC ドライバソフトウェアライブラリ

(以下、MMC ドライバとします)を使用しています。

対象デバイス RZ/A1H

本アプリケーションノートを他のマイコンへ適用する場合、そのマイコンの仕様にあわせて変更し、十分

評価してください。

R01AN1977JJ0081 Rev.0.81

2016.09.02

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 2 of 38 2016.09.02

目次

1. 仕様 .................................................................................................................................. 4 1.1 ブートモード 5(eMMC ブート)の動作イメージ ....................................................................... 4 1.2 使用する周辺機能 ......................................................................................................................... 6

2. 動作確認条件 .................................................................................................................... 7

3. 関連アプリケーションノート ........................................................................................... 7

4. ハードウェア説明 ............................................................................................................. 8 4.1 ハードウェア構成例 ...................................................................................................................... 8 4.2 使用端子一覧 ................................................................................................................................. 9

5. ソフトウェア説明 ........................................................................................................... 10 5.1 eMMC ブート動作の概要 ............................................................................................................ 10

5.1.1 eMMC ブート動作に関する用語 ........................................................................................... 10 5.2 eMMC ブート動作の説明 ............................................................................................................ 11

5.2.1 サンプルコード全体の動作 ................................................................................................... 11 5.2.2 ブート起動用内蔵 ROM プログラムの動作 .......................................................................... 12 5.2.3 ローダプログラムの動作 ...................................................................................................... 13 5.2.4 アプリケーションプログラム(ユーザプログラム)の動作 ................................................ 14

5.3 サンプルコード実行時の周辺機能の設定およびメモリ配置 ...................................................... 15 5.3.1 周辺機能の設定 ..................................................................................................................... 15 5.3.2 サンプルコードのセクション配置 ........................................................................................ 16

5.4 関数一覧 ...................................................................................................................................... 19 5.5 関数仕様 ...................................................................................................................................... 20

6. eMMC ブートシステムの開発方法 ................................................................................. 22 6.1 ローダプログラムの詳細仕様 ..................................................................................................... 22

6.1.1 ローダプログラムの生成方法 ............................................................................................... 22 6.1.2 ローダプログラムのメモリマップ ........................................................................................ 23 6.1.3 ローダプログラムの格納フォーマット ................................................................................. 24 6.1.4 ローダプログラムの動作フロー ............................................................................................ 26 6.1.5 アプリケーションプログラムの転送 .................................................................................... 27 6.1.6 アプリケーションプログラムのエントリポイントへの分岐 ................................................ 28

6.2 アプリケーションプログラムの作成例 ....................................................................................... 29 6.2.1 アプリケーションプログラムの生成方法 ............................................................................. 29 6.2.2 アプリケーションプログラムのメモリマップ ...................................................................... 30 6.2.3 サンプルコードのダウンロードテーブルの設定内容 ........................................................... 31

7. サンプルコードの説明 .................................................................................................... 33 7.1 サンプルコードの動作概要 ......................................................................................................... 33 7.2 サンプルコードのプロジェクトの構成 ....................................................................................... 33

8. eMMC ブートに関する注意事項 ..................................................................................... 34 8.1 eMMC ブート可能なデバイスについて ...................................................................................... 34 8.2 Boot Operation について ............................................................................................................. 34 8.3 パーティションについて ............................................................................................................. 35

9. サンプルコードで使用する MMC ドライバについて ...................................................... 36 9.1 RZ/A1 MMC ドライバについて ................................................................................................... 36

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 3 of 38 2016.09.02

9.1.1 MMC ドライバのバージョン情報 ......................................................................................... 36

10. 参考ドキュメント ........................................................................................................... 37

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 4 of 38 2016.09.02

1. 仕様

1.1 ブートモード 5(eMMC ブート)の動作イメージ RZ/A1Hは、外部端子(MD_BOOT2~MD_BOOT0)でブートモード 5(eMMC ブート)の設定をした場合、

MMC ホストインタフェース(以下、MMCHI とします)に接続された eMMC デバイスからブートします。

図 1.1にeMMC ブートの動作イメージを示します。eMMC ブートでは、パワーオンリセット解除後にブート

起動用内蔵 ROM プログラムを実行します。ブート起動用内蔵 ROM プログラムは、eMMC デバイスから固定

データサイズ(28K バイト)のプログラムデータを大容量内蔵 RAM に転送し、実行します。本アプリケー

ションノートでは、この固定データサイズ(28K バイト)のプログラムデータをローダプログラムと呼びま

す。ローダプログラムは、eMMC デバイス内の任意のセクタに格納されたアプリケーションプログラムを大

容量内蔵 RAM の任意のアドレスに転送し、分岐する処理を行います。

本アプリケーションノートでは、RZ/A1H の eMMC ブートを使用する場合のローダプログラムおよびアプ

リケーションプログラムの作成例について説明します。

【注】 eMMC デバイスの仕様については、JEDEC から発行されている「JEDEC STANDARD JESD84 A44

(MMCA 4.4)」規格をご参照ください。

ブート起動用

内蔵ROMプログラムMMCHI

1. ブート起動用ROMプログラムの実行

大容量内蔵RAM

ローダプログラム(28Kバイト)

H'2002_4000

MMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

アプリケーションプログラム

(サイズは任意)

セクタ1

アプリケーションプログラム

11.アプリケーションプログラムを大容量内蔵RAMに転送

セクタ0

ローダプログラム(28KB) セクタ56

H'FFFF_0000

H'2002_AFFF

H'FFFF_FFFF

ブート起動用内蔵ROMプログラム

のワーク領域(16Kバイト)ローダプログラム用

チェックサムブロック(512バイト)

H'2002_3FFF

H'2002_0000

2. MMCHIの有効化

(端子設定、モジュールスタンバイ解除、MMCHIレジスタ設定)

3. チェックサムブロック(512バイト)を大容量内蔵RAMに転送

4. ローダプログラムを大容量内蔵RAMに転送

5. 大容量内蔵RAM上に転送したローダプログラムのデータより

チェックサム値を計算し、チェックサムブロックにある

チェックサム値と比較

7. ローダプログラムのエントリポイントに分岐

6. MMCHIの無効化

(端子解放、モジュールスタンバイ、MMCHIレジスタ初期化)

12. アプリケーションプログラムに分岐

10. アプリケーションプログラムが

  格納されている

パーティションを選択

9. eMMCデバイスとの初期化処理

8. MMCHIの有効化

(端子設定、モジュールスタンバイ解除、MMCHIレジスタ設定)

eMMCデバイスは、Boot Operation時EXT_CSDレジスタの[179]フィールド

(PARTITION_CONFIG)で指定されている

Boot Partitionの0セクタから順にデータを出力します。

(サンプルコードでは、ローダプログラムを

Boot Partition 1に格納しています。)

図1.1 eMMC ブートの動作イメージ

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 5 of 38 2016.09.02

eMMC ブートの動作イメージについて説明します。ローダプログラムの格納仕様については、「6.1.3 ロー

ダプログラムの格納フォーマット」を参照してください。

1. リセット解除後、ブート起動用内蔵 ROM プログラムを実行します。 2. ブート起動用内蔵 ROM プログラムにより、MMCHI にアクセスするために周辺モジュール設定処理(端

子設定、MMCHI のモジュールスタンバイモード解除、MMCHI レジスタ設定)を行います。 3. Boot Operation により、eMMC デバイスの Extended CSD(EXT_CSD)レジスタの[179]フィールド

(PARTITION_CONFIG)で選択されているパーティションのセクタ 0 に格納されているローダプログラ

ム#0 用チェックサムブロック(512 バイト)を大容量内蔵 RAM に転送します。 4. Boot Operation により、eMMC デバイスの Extended CSD(EXT_CSD)レジスタの[179]フィールド

(PARTITION_CONFIG)で指定したパーティションのセクタ 1~56 に格納されているローダプログラム

#0(28K バイト)を大容量内蔵 RAM(H'2002_4000~H'2002_AFFF)に転送します。 5. 大容量内蔵 RAM 上に転送したローダプログラム#0 のデータからチェックサム値を計算し、ローダプログ

ラム#0 用チェックサムブロックにあるチェックサム値の比較を行います。 6. ブート起動用内蔵 ROM プログラムで使用した MMCHI にアクセスするための端子および周辺モジュール

設定処理(MMCHI、PORT、STB)を初期状態に戻します。 7. ローダプログラムのエントリポイント(H'2002_4000)に分岐し、ローダプログラムを実行します。 8. ローダプログラムにより、MMCHI にアクセスするための端子設定および周辺モジュール設定処理(端子

設定、MMCHI のモジュールスタンバイモード解除、MMCHI レジスタ設定)を行います。 9. eMMC デバイスとの初期化処理を実行します。 10. eMMC デバイスに CMD6(SWITCH)を発行して、アプリケーションプログラムが格納されているパーティ

ション(サンプルコードでは、Boot Partition 2)を選択します。 11. eMMC デバイスに格納されているアプリケーションプログラムを大容量内蔵 RAM に転送します。 12. アプリケーションプログラムのエントリポイントに分岐し、アプリケーションプログラムを実行します。

【注】 ローダプログラムの仕様の詳細については、「6.1 ローダプログラムの詳細仕様」の内容を参照してください。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 6 of 38 2016.09.02

1.2 使用する周辺機能 サンプルコードのアプリケーションプログラムでは、クロックパルス発振器、割り込みコントローラ、バ

スステートコントローラ、汎用入出力ポート、メモリ管理ユニット、1 次キャッシュ(L1 キャッシュ)、お

よび 2 次キャッシュ(L2 キャッシュ)の初期設定を行います。

本アプリケーションノートでは、クロックパルス発振器を CPG、FIFO 内蔵シリアルコミュニケーションイ

ンタフェースを SCIF、汎用入出力ポートを PORT、低消費電力モードを STB とします。

表 1.1に使用する周辺機能と用途を、図 1.2にサンプルコード実行時の動作環境を示します。

表1.1 使用する周辺機能と用途

周辺機能 用途 MMC ホストインタフェース(MMCHI) eMMC デバイスのアクセス制御に使用 クロックパルス発振器(CPG) RZ/A1Hの動作周波数の生成 FIFO 内蔵シリアルコミュニケーション インタフェース(SCIF)

SCIF チャネル 2 を用いて、ホスト PC との通信用として使用

汎用入出力ポート(PORT) MMCHI、SCIF チャネル 2 の兼用端子の切り替えに使用 低消費電力モード(STB) RZ/A1Hの周辺 IO のモジュールスタンバイを解除するために

使用、保持用内蔵 RAM をライト許可するために使用

図1.2 動作環境

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 7 of 38 2016.09.02

2. 動作確認条件 本アプリケーションノートのサンプルコードは、下記の条件で動作を確認しています。

表2.1 動作確認条件

項目 内容 使用マイコン RZ/A1H 動作周波数(注 1) CPU クロック(Iφ):400MHz

画像処理クロック(Gφ):266.67MHz 内部バスクロック(Bφ):133.33MHz 周辺クロック(P1φ):66.67MHz 周辺クロック(P0φ):33.33MHz

動作電圧 電源電圧(I/O):3.3V 電源電圧(内部):1.18V

統合開発環境 ARM®統合開発環境

ARM Development Studio 5(DS-5TM)Version 5.16

C コンパイラ ARM C/C++ Compiler/Linker/Assembler Ver.5.03 [Build 102] コンパイラオプション

-O3 -Ospace --cpu=Cortex-A9 --littleend --arm --apcs=/interwork --no_unaligned_access --fpu=vfpv3_fp16 -g --asm

動作モード ブートモード 5 (eMMC ブート)

使用ボード GENMAI ボード R7S72100 CPU ボード RTK772100BC00000BR

ターミナルソフトの通信設定 • 通信速度:115200bps • データ長:8 ビット • パリティ:なし • ストップビット長:1 ビット • フロー制御:なし

使用デバイス (ボード上で使用する機能)

• シリアルインタフェース(Dsub-9 コネクタ) • LED1 • eMMC デバイス(MMC スロット(J15)に接続)(注 2)

【注】 1. クロックモード 0(EXTAL 端子からの 13.33MHz のクロック入力)で使用時の動作周波数です。 2. eMMC デバイスはお客様側で準備してください。

3. 関連アプリケーションノート 本アプリケーションノートに関連するアプリケーションノートを以下に示します。

• RZ/A1H グループ レジスタ定義ヘッダ・ファイル iodefine.h(R01AN1860JJ) • RZ/A1H グループ 初期設定例(R01AN1864JJ) • RZ/A1H グループ ARM® Development Studio 5(DS-5TM)のセミホスティング機能を使用した MMC コン

トローラ内蔵フラッシュメモリへのダウンロード例(R01AN1978JJ)

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 8 of 38 2016.09.02

4. ハードウェア説明

4.1 ハードウェア構成例 図 4.1にブートモード 5 にてeMMC ブートする場合の接続例を示します。なお、eMMC ブート機能を使用す

る場合は、P3_10~P3_15 の端子を使用してください。P3_10~P3_15 の端子でのみ、eMMC ブート機能を使

用することができます。

RZ/A1H

MD_BOOT0MD_BOOT1MD_BOOT2

P3_8/MMC_CD

P3_11/MMC_D0

MMCスロット MMC電源IC

VDD

DAT0P3_10/MMC_D1P3_15/MMC_D2P3_14/MMC_D3

DAT1DAT2DAT3

ENB

OUTCD

P3_13/MMC_CMDP3_12/MMC_CLK

CMDCLK

COMMON

図4.1 eMMC ブートする場合の接続例

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 9 of 38 2016.09.02

4.2 使用端子一覧 表 4.1に使用端子と機能を示します。

表4.1 使用端子と機能

端子名 入出力 内容 MD_BOOT2 MD_BOOT1 MD_BOOT0

入力 ブートモードの選択 MD_BOOT2:"H"、MD_BOOT1:"H"、MD_BOOT0:"H" (ブートモード 5(eMMC ブート)に設定)

MMC_CLK 出力 MMC クロック MMC_CMD 入出力 コマンド出力/レスポンス MMC_D0 入出力 送信データ[bit0]/受信データ[bit0] MMC_D1 入出力 送信データ[bit1]/受信データ[bit1] MMC_D2 入出力 送信データ[bit2]/受信データ[bit2] MMC_D3 入出力 送信データ[bit3]/受信データ[bit3] MMC_CD(注) 入力 カード検出 【注】 本アプリケーションノートでは使用していません。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 10 of 38 2016.09.02

5. ソフトウェア説明

5.1 eMMC ブート動作の概要 この章では、eMMC ブート動作の概要について説明します。

5.1.1 eMMC ブート動作に関する用語 表 5.1に本アプリケーションノートで説明する eMMC ブート動作に関する用語を示します。

表5.1 eMMC ブート動作に関する用語

用語 説明 ブート起動用内蔵 ROM プログラム ブート起動用内蔵 ROM プログラムは、ブートモード 5(eMMC ブー

ト)で起動した場合に、eMMC デバイスに格納されているローダプ

ログラムを大容量内蔵 RAM に転送し、ローダプログラムのエントリ

ポイントに分岐する処理を行うプログラムです。CPU 内のブート起

動用内蔵 ROM に格納されているため作成する必要はありません。 ローダプログラム ローダプログラムは、アプリケーションプログラムを eMMC デバイ

スから大容量内蔵 RAM に転送し、アプリケーションプログラムのエ

ントリポイントに分岐する処理を行うプログラムです。ローダプログ

ラムのプログラムサイズは 28K バイトに収まるように作成してくだ

さい。本アプリケーションノートを参考に、お客様がシステムに応じ

て作成してください。 アプリケーションプログラム アプリケーションプログラムは、お客様がシステムに応じて作成する

プログラムです。本アプリケーションノートを参考に、お客様がシス

テムに応じて作成してください。 ダウンロードテーブル アプリケーションプログラムが eMMC デバイス内のどのセクタに格

納されているかを示す情報です。本情報はアプリケーションプログラ

ムの定数データとして組み込まれます。 ダウンロードテーブル情報 ダウンロードテーブルが eMMC デバイス内のどのセクタに格納され

ているかを示す情報です。本情報はローダプログラムに定数データと

して組み込まれます。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 11 of 38 2016.09.02

5.2 eMMC ブート動作の説明 表 5.2にeMMC ブートするための外部端子(MD_BOOT2~0)の設定を示します。

表5.2 eMMC ブートするための外部端子(MD_BOOT2~0)の設定

MD_BOOT2 MD_BOOT1 MD_BOOT0 ブートモード 説明 1 1 1 ブートモード 5

(eMMC ブート) MMCHI に接続された eMMC デバイス

からブートします。

5.2.1 サンプルコード全体の動作 サンプルコードは、ローダプログラムとアプリケーションプログラムから構成されています。

1 ローダプログラム

ローダプログラムは、eMMC デバイスとの初期化を行い、アプリケーションプログラムを大容量内蔵 RAMに転送します。アプリケーションプログラムの転送完了後、アプリケーションプログラムのエントリポイ

ントに分岐します。 2 アプリケーションプログラム(ユーザプログラム)

アプリケーションプログラムは、お客様がシステムに応じて作成するプログラムです。アプリケーション

プログラム(サイズは任意)は任意のアドレスに配置可能ですが、CPU が実行可能な RAM 領域に配置す

る必要があります。サンプルコードでは、アプリケーションプログラムを大容量内蔵 RAM の H'2002_B000番地以降に配置しています。

図 5.1に本アプリケーションノートのサンプルコードの動作概要を示します。

アプリケーションプログラム

(ユーザプログラム)

ブート起動用内蔵ROMプログラム

H'2002_4000

H'2002_B000

H'FFFF_0000

大容量内蔵RAM上で動作

・MMCドライバの初期化

・eMMCデバイスとの初期化処理

・アプリケーションプログラムを大容量内蔵RAMへ転送

・MMCドライバの終了

・アプリケーションプログラムのエントリポイント(H'2002_B000)へ分岐

内蔵ROM上で動作

・MMCHIの端子処理とモジュールスタンバイ解除

・Boot operationにより、ローダプログラム本体(28Kバイト)のデータを

読み出して大容量内蔵RAMへ転送

・ローダプログラムのエントリポイント(H'2002_4000)へ分岐

ローダプログラム(28Kバイト)

大容量内蔵RAM上で動作

・MMUの初期化とキャッシュの有効化

  MMUおよびキャッシュを非稼働に設定

  キャッシュ、TLB、およびBTACの無効化

  MMUの設定、キャッシュの有効化、分岐予測器の有効化

・アプリケーションの内容に応じた処理

サンプルコード

図5.1 サンプルコードの動作概要

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 12 of 38 2016.09.02

5.2.2 ブート起動用内蔵 ROM プログラムの動作 eMMC ブートで起動した場合、パワーオンリセット解除後、ブート起動用内蔵 ROM プログラムにより

MMCHI に接続されている eMMC デバイスからローダプログラムを大容量内蔵 RAM に転送します。転送完

了後、ローダプログラムのエントリポイントに分岐します。図 5.2にブート起動用内蔵 ROM プログラムの動

作イメージを示します。なお、ブート起動用内蔵 ROM プログラムは、ワーク領域として H'2002_0000~H'2002_3FFF の領域を使用します。ローダプログラムのデータ転送時は、MMC_CLK 周波数は P1φ/4(P1φの最大動作周波数は 66.67MHz)、データバス幅 4 ビットに設定しています。

ブート起動用

内蔵ROMプログラム

MMCHI

1. ブート起動用ROMプログラム実行

大容量内蔵RAM

ローダプログラム(28KB)

H'2002_4000

H'2002_AFFF

5. ローダプログラム(28Kバイト)からチェックサム値を計算し

チェックサムブロックと比較する。

7. ローダプログラムのエントリポイント

(H'2002_4000)に分岐

MMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

H'2000_0000

セクタ57

ローダプログラム#0(28KB)

セクタ0ローダプログラム#0用チェックサムブロック(512バイト)

セクタ1

ローダプログラム#1用チェックサムブロック(512バイト)

ローダプログラム#1(28KB)(予備領域)

ローダプログラム#3用チェックサムブロック(512バイト)

ローダプログラム#3(28KB)(予備領域)

ブート起動用内蔵ROMプログラムの

ワーク領域(16KB)H'2002_3FFF

H'2002_0000

H'FFFF_0000

H'FFFF_FFFF

セクタ227

セクタ172

セクタ171

セクタ56

セクタ58

セクタ113

2. MMCHIを使用するために

周辺モジュール(MMCHI、PORT、STB)のレジスタを設定

6. 周辺モジュール(MMCHI、PORT、STB)の

 レジスタを初期状態に戻す。

4.ローダプログラム(28Kバイト)を大容量内蔵RAMに転送

3.チェックサムブロック(512バイト)を大容量内蔵RAMに転送

図5.2 ブート起動用内蔵 ROM プログラムの動作イメージ

1. リセット解除後、ブート起動用内蔵 ROM プログラムを実行します。 2. ブート起動用内蔵ROMプログラムにより、MMCHIにアクセスするために周辺モジュール(MMCHI、PORT、

STB)のレジスタ設定を行います。 3. Boot Operation により、Extended CSD(EXT_CSD)レジスタの[179]フィールド(PARTITION_CONFIG)

で選択されているパーティションのセクタ 0 に格納されているローダプログラム#0 用チェックサムブ

ロック(512 バイト)を大容量内蔵 RAM のワーク領域に転送します。 4. Boot Operation により、Extended CSD(EXT_CSD)レジスタの[179]フィールド(PARTITION_CONFIG)

で指定したパーティションのセクタ 1~56 に格納されているローダプログラム#0(28K バイト)を eMMCデバイスから大容量内蔵 RAM の H'2002_4000~H'2002_AFFF に転送します。

5. 大容量内蔵 RAM に転送したローダプログラム#0 からチェックサムを計算し、3.で読み出したローダプロ

グラム#0 用チェックサムブロックのデータを比較し、4.で読み出したローダプログラムのデータが正しい

か検証します。不一致の場合は、予備として格納しているローダプログラム#1 から順に同様の処理を行い

ます。ローダプログラム#0~#3 の読み出しに失敗した場合は、内蔵 ROM 内で無限ループとなりブート処

理を終了します。 6. MMCHI を使用するために設定した周辺モジュール(MMCHI、PORT、STB)のレジスタを初期化します。 7. ローダプログラムのエントリポイント(H'2002_4000)に分岐します。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 13 of 38 2016.09.02

5.2.3 ローダプログラムの動作 ローダプログラムは、eMMC デバイスとの初期化処理完了後、ダウンロードテーブル情報を参照してダウ

ンロードテーブルが格納されているパーティション番号、セクタ番号を取得し、eMMC デバイスに格納され

ているダウンロードテーブルを大容量内蔵 RAM 上のワーク領域に転送します。ローダプログラムは、ワー

ク領域に転送したダウンロードテーブル参照をして、アプリケーションプログラムが格納されている eMMCデバイスのパーティション番号、セクタ番号およびアプリケーションプログラムの転送先とサイズを取得し、

アプリケーションプログラムを大容量内蔵 RAM に転送します。なお、サンプルコードでは、ダウンロード

テーブルおよびアプリケーションプログラムのデータ転送時に、MMC_CLK 周波数は P1φ/2(接続デバイス

が High-Speed に対応している場合)または P1φ/4(接続デバイスが High-Speed に対応していない場合)に設

定します(P1φの最大動作周波数は 66.67MHz)。データバス幅は、4 ビットに設定しています。アプリケー

ションプログラムの転送完了後、アプリケーションプログラムのエントリポイントに分岐してアプリケー

ションプログラムの処理を実行します。図 5.3にローダプログラムの動作イメージを示します。

MMCHI

大容量内蔵RAM

ローダプログラム(28KB)

H'2002_4000

H'2000_0000

アプリケーションプログラム

(サイズ:任意)

H'2002_B000

H'2008_0000

MMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

アプリケーションプログラム

(サイズ:任意)

ローダプログラムの

ワーク領域

7. アプリケーションプログラムの

エントリポイントに分岐

H'2002_AFFF

H'200A_FFFF

1. ローダプログラム実行

2. MMCHIを使用するために

周辺モジュール(MMCHI、PORT、 STB)のレジスタ設定

ダウンロードテーブル情報

ダウンロードテーブル(512バイト)

ダウンロードテーブル(512バイト)

3. eMMCとの初期化処理

4. ダウンロードテーブル情報を参照し、

ダウンロードテーブルのパーティション番号、

セクタ番号を取得。

CMD6(SWITCH)を発行し、ダウンロード

テーブルが格納されているパーティションを選択

5. ダウンロードテーブルをローダプログラムの

 ワーク領域に転送

6. ダウンロードテーブルを参照し、

 アプリケーションプログラムを

大容量内蔵RAMに転送

図5.3 ローダプログラムの動作イメージ

1. ブート起動用内蔵 ROM プログラムから分岐後、ローダプログラムを実行します。 2. ローダプログラムにより、MMCHI アクセスするために周辺モジュール(MMCHI、PORT、STB)のレジ

スタ設定を行います。 3. eMMC デバイスとの初期化処理を行います。 4. ダウンロードテーブル情報を参照し、ダウンロードテーブルのパーティション番号、セクタ番号を取得し

ます。eMMC デバイスに CMD6(SWITCH)を発行して、ダウンロードテーブルが格納されているパーティ

ションを選択します。 5. eMMC デバイスに対してリードコマンドを発行し、ダウンロードテーブル(512 バイト)を大容量内蔵

RAM 上にあるワーク領域に転送します。 6. ダウンロードテーブルに格納されているアプリケーションプログラムの転送情報(パーティション番号、

セクタ番号、転送先アドレス、プログラムサイズ)を取得し、eMMC デバイスに対して、CMD6(SWITCH)

を発行してアプリケーションプログラムが格納されているパーティションを選択後、リードコマンドを発

行し、アプリケーションプログラムを大容量内蔵 RAM に転送します。 7. アプリケーションプログラムのエントリポイント(サンプルコードでは H'2002_B000)に分岐し、アプリ

ケーションプログラムを実行します。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 14 of 38 2016.09.02

5.2.4 アプリケーションプログラム(ユーザプログラム)の動作

アプリケーションプログラムでは、スタックポインタ、MMU の設定を行い、ARM 統合開発環境 DS-5 の

コンパイラツールチェーンにより提供される C 標準ライブラリ関数__main に分岐します。

__main 関数では、スキャッタローディング機能を使用したセクション領域の初期化、ライブラリ関数の初

期化が行われ、ハードウェアの初期設定を行うための$Sub$$main 関数に分岐します。

サンプルコードでは、$Sub$$main 関数にて、STB、BSC、INTC、PORT などの周辺機能の初期設定と、L1キャッシュおよび L2 キャッシュを有効にするための設定を行い、IRQ 割り込みおよび FIQ 割り込みを許可に

しています。$Super$$main 関数をコールすることで、main 関数に分岐します(サンプルコードでは、MMUの設定およびキャッシュを有効にするための設定はアプリケーションプログラムで行い、ローダプログラム

では行っていません)。

main 関数では、シリアルインタフェースで接続されたホスト PC 上のターミナルに文字列を出力し、OSTMチャネル 0 をインターバルタイマモードに設定して、タイマを起動します。500ms の周期で OSTM チャネル

0 の割り込みを発生させ、GENMAI ボードの LED を割り込み処理により 500ms ごとに点灯および消灯を繰り

返す処理を行います。

アプリケーションプログラムで実施している初期設定の詳細は、「RZ/A1H グループ 初期設定例

(R01AN1864JJ)」のアプリケーションノートを参照してください。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 15 of 38 2016.09.02

5.3 サンプルコード実行時の周辺機能の設定およびメモリ配置

5.3.1 周辺機能の設定 表 5.3にサンプルコード実行時の周辺機能の設定内容を示します。

表5.3 周辺機能の設定内容

モジュール 設定内容 CPG CPU クロック(Iφ):400MHz

画像処理クロック(Gφ):266.67MHz 内部バスクロック(Bφ):133.33MHz 周辺クロック(P1φ):66.67MHz 周辺クロック(P0φ):33.33MHz

MMCHI eMMC デバイスのアクセス制御に使用 PORT PORT4、PORT3 のマルチプレクス端子機能を設定

・P3_13:MMC_CMD ・P3_12:MMC_CLK ・P3_14:MMC_D3 ・P3_15:MMC_D2 ・P3_10:MMC_D1 ・P3_11:MMC_D0 ・P4_10:LED の点灯および消灯 ・P3_2:RxD2、P3_0:TxD2

STB 保持用内蔵 RAM へのライト許可および周辺機能へのクロック供給 STBCR2~STBCR13 でクロックの供給および停止制御が可能なすべて

の周辺機能のクロックを供給 SCIF チャネル 2 を調歩同期式モードに設定

・データ長:8 ビット ・ストップビット長:1 ビット ・パリティ:なし P1φ=66.67MHz の時に、クロックソースを分周なし、ビットレート値

に 17 を設定し、ビットレートが 115200bps となるように設定 誤差は 0.46%

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 16 of 38 2016.09.02

5.3.2 サンプルコードのセクション配置 表 5.4にローダプログラムで使用するセクションを、表 5.5および表 5.6にアプリケーションプログラムで使

用するセクションを示します。

表5.4 ローダプログラムで使用するセクション

領域の名前 内容 タイプ ロード領域 / 実行領域 BOOT_AREA 例外処理ベクタテーブル

リセットハンドラ処理のプログラムコード

領域

Code LRAM

CONST_DLTBL_INFO ダウンロードテーブル情報の 定数データ領域

RO Data LRAM

CODE デフォルトのプログラムコード領域 C ソースでセクション名を定義しない Codeタイプのセクションは、すべてこの領域に配

置されます

Code LRAM

CODE_MMCHI MMC ドライバ用のコード領域 Code LRAM CONST_MMCHI MMC ドライバ用の定数データ領域 RO Data LRAM CONST デフォルトの定数データ領域

C ソースでセクション名を定義しない RO Data タイプのセクションは、すべてこの領

域に配置されます

RO Data LRAM

DATA_MMCHI MMC ドライバ用の初期値ありデータ領域 RW Data LRAM DATA デフォルトの初期値ありデータ領域

C ソースでセクション名を定義しない RW Data タイプのセクションは、すべてこの領

域に配置されます

RW Data LRAM

SVC_STACK スタック領域 ZI Data LRAM BSS_MMCHI MMC ドライバ用の初期値なしデータ領域 ZI Data LRAM BSS デフォルトの初期値なしデータ領域

C ソースでセクション名を定義しない ZI Data タイプのセクションは、すべてこの領

域に配置されます

ZI Data LRAM

【注】 表中のロード領域および実行領域において、LRAM は大容量内蔵 RAM の領域を表します。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 17 of 38 2016.09.02

表5.5 アプリケーションプログラムで使用するセクション(1/2)

領域の名前 内容 タイプ ロード領域 / 実行領域 VECTOR_TABLE 例外処理ベクタテーブル Code LRAM RESET_HANDLER リセットハンドラ処理のプログラムコー

ド領域 この領域は以下のセクションから構成さ

れています ・INITCA9CACHE(L1 キャッシュ設定) ・INIT_TTB(MMU 設定) ・RESET_HANDLER(リセットハンドラ)

Code LRAM

CODE_BASIC_SETUP 保持用内蔵 RAM のライト許可のためのプ

ログラムコード領域 Code LRAM

InRoot この領域は C 標準ライブラリなどのルー

ト領域に配置するセクションから構成さ

れています

Code および RO Data

LRAM

CODE_FPU_INIT NEON および VFP 初期設定のプログラム

コード領域 この領域は以下のセクションから構成さ

れています ・CODE_FPU_INIT ・FPU_INIT

Code LRAM

CODE_RESET ハードウェア初期設定のプログラムコー

ド領域 この領域は以下のセクションから構成さ

れています ・CODE_RESET(スタートアップ処理) ・INIT_VBAR(ベクタベース設定)

Code LRAM

CODE デフォルトのプログラムコード領域 C ソースでセクション名を定義しない

Code タイプのセクションは、すべてこの

領域に配置されます

Code LRAM

CONST デフォルトの定数データ領域 C ソースでセクション名を定義しない RO Data タイプのセクションは、すべてこの

領域に配置されます

RO Data LRAM

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 18 of 38 2016.09.02

表5.6 アプリケーションプログラムで使用するセクション(2/2)

領域の名前 内容 タイプ ロード領域 / 実行領域 VECTOR_MIRROR_ TABLE

例外処理ベクタテーブル (大容量内蔵 RAM に転送して実行するた

めのセクション)

Code LRAM

CODE_HANDLER_ JMPTBL

IRQ 割り込みハンドラのユーザ定義関数

のプログラムコード領域 Code LRAM

CODE_HANDLER IRQ 割り込みハンドラのプログラムコー

ド領域 この領域は以下のセクションから構成さ

れています ・CODE_HANDLER ・IRQ_FIQ_HANDLER

Code LRAM

CODE_IO_REGRW IO レジスタのリード/ライト関数のプログ

ラムコード領域 Code LRAM

CODE_CACHE_ OPERATION

L1および L2キャッシュ設定処理のプログ

ラムコード領域(注 3) Code LRAM

DATA_HANDLER_ JMPTBL

IRQ 割り込みハンドラのユーザ定義関数

の登録テーブルデータ領域 RW Data LRAM

ARM_LIB_STACK アプリケーションスタック領域 ZI Data LRAM IRQ_STACK IRQ モードのスタック領域 ZI Data LRAM FIQ_STACK FIQ モードのスタック領域 ZI Data LRAM SVC_STACK スーパバイザ(SVC)モードのスタック領

域 ZI Data LRAM

ABT_STACK アボート(ABT)モードのスタック領域 ZI Data LRAM TTB MMU 変換テーブル領域 ZI Data LRAM ARM_LIB_HEAP アプリケーションヒープ領域 ZI Data LRAM DATA デフォルトの初期値ありデータ領域

Cソースでセクション名を定義しないRW Data タイプのセクションは、すべてこの

領域に配置されます

RW Data LRAM

BSS デフォルトの初期値なしデータ領域 C ソースでセクション名を定義しない ZI Data タイプのセクションは、すべてこの

領域に配置されます

ZI Data LRAM

【注】 1. 表中のロード領域および実行領域において、LRAM は大容量内蔵 RAM の領域を表します。 2. セクションの名前は基本的に領域と同じ名前にしていますが、RESET_HANDLER、 InRoot、

CODE_FPU_INIT、CODE_RESET、CODE、CONST、CODE_HANDLER、DATA、BSS の各領域

は複数のセクションから構成されています。領域とセクションについては、ARM コンパイラツー

ルチェーンのマニュアルを参照してください。 3. このセクションは、キャッシュ無効領域に配置する必要があります。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 19 of 38 2016.09.02

5.4 関数一覧 サンプルコードで使用する関数について、表 5.7にサンプル関数一覧、表 5.8にサンプルコードで使用する

MMC ドライバ関数一覧を示します。MMC ドライバ関数の詳細仕様については、MMC ドライバのユーザー

ズマニュアルをご参照ください。

表5.7 サンプル関数一覧

関数名 概要 ld_main ローダプログラムの main 関数 open_emmc eMMC デバイスのオープン app_prog_transfer アプリケーションプログラムの転送 close_emmc eMMC デバイスのクローズ set_mmc_partition_access パーティションの選択 apl_top_jmp アプリケーションプログラムのエントリポイントへの分岐

表5.8 サンプルコードで使用する MMC ドライバ関数一覧

関数名 概要 ce_init ドライバの初期化 ce_cd_int カード挿抜割り込み設定 ce_set_buffer バッファ領域の設定 ce_set_config 入力クロックと分周比の設定 ce_set_timeout タイムアウトの設定 ce_mount カードのマウント ce_csd_get_register カードレジスタ(EXT_CSD)の取得 ce_csd_set_register カードレジスタ(EXT_CSD)の設定

(SET_EXT_CSD コマンド(CMD6)発行) ce_read_sect セクタのリード ce_unmount カードのマウント解除 ce_finalize ドライバの終了

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 20 of 38 2016.09.02

5.5 関数仕様 サンプルコードの関数仕様を示します。

ld_main

概 要 ローダプログラムの main 関数 宣 言 void ld_main(void) 説 明 eMMC ブートのローダプログラム処理を行います。

eMMC デバイスに格納されているアプリケーションプログラムデータを大容量内蔵

RAM に転送後、アプリケーションプログラムのエントリポイントに分岐します。 引 数 なし

リターン値 なし open_emmc

概 要 eMMC デバイスのオープン 宣 言 int32_t open_emmc (void) 説 明

MMC ドライバを初期化し、eMMC デバイスとの初期化処理を行います。本関数では、

MMC ドライバ関数である ce_init 関数、ce_cd_int 関数、ce_set_buffer 関数、

ce_set_config 関数、ce_set_timeout 関数、ce_mount 関数をコールします。 引 数 なし

リターン値 0 : 正常終了 -1 : エラー終了

app_prog_transfer

概 要 アプリケーションプログラムの転送 宣 言 int32_t app_prog_transfer(EMMC_DL_TABLE *dltbl) 説 明 引数で指定したダウンロードテーブルを参照して、eMMC デバイスに格納されてい

るアプリケーションプログラムを大容量内蔵 RAM へ転送します。本関数では、MMCドライバ関数である ce_csd_set_register 関数、ce_csd_get_register 関数、

ce_read_sect 関数をコールします。 引 数 なし

リターン値 0 : 正常終了 -1 以下: エラー終了

close_emmc

概 要 eMMC デバイスのクローズ 宣 言 int32_t close_emmc (uint32_t partition) 説 明 引数 partition で指定したパーティションを選択後、MMC ドライバの処理を終了しま

す。本関数では、MMC ドライバ関数である ce_csd_set_register 関数、

ce_csd_get_register 関数、ce_unmount 関数、ce_finalize 関数をコールします。 引 数 なし

リターン値 0 : 正常終了 -1 以下: エラー終了

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 21 of 38 2016.09.02

set_mmc_partition_access

概 要 パーティションの選択 宣 言 int32_t set_mmc_partition_access (uint32_t partition) 説 明 引数 partition で指定したパーティションを選択します。本関数では、MMC ドライバ

関数である ce_csd_set_register 関数、ce_csd_get_register 関数をコールします。 引 数 なし

リターン値 0 : 正常終了 -1 以下: エラー終了

apl_top_jmp

概 要 アプリケーションプログラムのエントリポイントへの分岐 宣 言 void apl_top_jmp (uint32_t jump_address) 説 明 引数 jump_address で指定したアドレスに分岐します。 引 数 uint32_t

jump_address アプリケーションプログラムのエントリポイント

リターン値 なし

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 22 of 38 2016.09.02

6. eMMC ブートシステムの開発方法 eMMC ブートシステムは、ローダプログラム、アプリケーションプログラムで構成されています。この章

では、ローダプログラム、アプリケーションプログラムの開発方法について説明します。

6.1 ローダプログラムの詳細仕様 ローダプログラムは、アプリケーションプログラムを eMMC デバイスから大容量内蔵 RAM に転送し、ア

プリケーションプログラムのエントリポイントに分岐します。ここでは、ローダプログラムの詳細仕様を説

明します。

6.1.1 ローダプログラムの生成方法 図 6.1にローダプログラムの生成フローを示します。ローダプログラムには、CPU 初期化処理および eMMC

デバイスを使用したアプリケーションプログラムの読み出し処理を実装します。本アプリケーションノート

のサンプルコードでは、eMMC デバイスからの読み出し処理に RZ/A1 用 MMC ドライバソフトウェアライブ

ラリを使用しています。

eMMCデバイス

アクセス処理

アセンブラ言語

エントリ/スタック設定

Cコンパイラ アセンブラ

オブジェクト

モジュール

リンカ

スキャッタファイル

実行形式ファイル

スタック初期化処理・CPU初期化処理

ダウンロード情報

ファイル

eMMCドライバ

ライブラリ

メモリ配置設定

(大容量内蔵RAMに実行)

バイナリファイル

fromelf(イメージ変換ユーティリティ)

・RZ_A1H_emmc_boot_loader_armcc.bin

生成されたバイナリファイルをローダプログラムとして

eMMCデバイスに書き込みます。

図6.1 ローダプログラムの生成フロー

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 23 of 38 2016.09.02

6.1.2 ローダプログラムのメモリマップ 図 6.2にローダプログラムのメモリ配置を示します。ローダプログラムは、ブート起動用内蔵 ROM プログ

ラムにより、eMMC デバイスから大容量内蔵 RAM(H'2002_4000~H'2002_AFFF)に転送されるため、ロー

ダプログラム生成時は実行アドレスが H'2002_4000~H'2002_AFFF となるように生成してください。なお、サ

ンプルコードでは、大容量内蔵 RAM の H'2008_0000~H'200A_FFFF の領域をローダプログラムのワーク領域

に使用しています。

大容量内蔵RAM

H'2002_4000

ローダプログラムの

ワーク領域

H'2008_0000

H'2000_0000

MMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

セクタ57

ローダプログラム#0(28KB)

セクタ0

H'200A_FFFF

H'2002_AFFF

セクタ1

セクタ56

セクタ58

ローダプログラム#0用チェックサムブロック(512バイト)

ローダプログラム#0(28KB)ローダプログラム#1(28KB)

ローダプログラム#1用チェックサムブロック(512バイト)

セクタ113

図6.2 ローダプログラムのメモリ配置

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 24 of 38 2016.09.02

6.1.3 ローダプログラムの格納フォーマット 図 6.3にローダプログラムの格納フォーマットを示します。ブート起動用内蔵 ROM プログラムは、最初に

ローダプログラム#0 を大容量内蔵 RAM に転送した後チェックサム値を計算し、ローダプログラム#0 用

チェックサムブロック(512 バイト)にあるチェックサム値と比較します。チェックサム値が一致した場合

は、大容量内蔵 RAM に転送したローダプログラム#0 を使用してローダプログラムの処理を開始します。

チェックサムが不一致だった場合は、ローダプログラム#1 を大容量内蔵 RAM に読み出してチェックサム

値を計算し、ローダプログラム#1 用チェックサムブロックのチェックサム値と比較します。チェックサムが

一致した場合は、大容量内蔵 RAM 上に転送したローダプログラム#1 を使用してローダプログラムの処理を

開始します。不一致の場合は、ローダプログラム#2 のデータを読み出し、同様の処理を繰り返します。ロー

ダプログラム#0~#3 の全てのチェックサムが不一致の場合は、内蔵 ROM の固定番地で無限ループとなり

eMMC ブート処理を終了します。

ブート起動用内蔵 ROM プログラムでは上述の処理を行うため、eMMC ブート機能を使用する場合は、図

6.3に示すフォーマットに合わせて、eMMC デバイスにプログラムデータを格納してください。

セクタ0

セクタ57

ローダプログラム#0用チェックサムブロック(512バイト)

ローダプログラム#0(28Kバイト)

ローダプログラム#1用チェックサムブロック(512バイト)

ローダプログラム#1(28Kバイト)(予備領域)

MMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

ローダプログラム#2用チェックサムブロック(512バイト)

ローダプログラム#2(28Kバイト)(予備領域)

ローダプログラム#3用チェックサムブロック(512バイト)

ローダプログラム#3(28Kバイト)(予備領域)

セクタ227

セクタ172

セクタ171

セクタ170

セクタ115セクタ114

セクタ113

セクタ58

セクタ57セクタ56

セクタ11回目に読み出すローダプログラムデータ

1回目の読み出しに失敗した時に使用する

ローダプログラム(予備)

2回目の読み出しに失敗した時に使用する

ローダプログラム(予備)

3回目の読み出しに失敗した時に使用する

ローダプログラム(予備)

※ローダプログラムは、EXT_CSDレジスタの[179]フィールドで指定した

ブートパーティションに格納してください。

図6.3 ローダプログラムの格納フォーマット

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 25 of 38 2016.09.02

また、チェックサムブロック(512 バイト)には、ローダプログラムを構成するセクタ毎に計算したチェッ

クサムと反転チェックサムを格納し、最後の 4 バイトにシグネチャ(H'0000_55aa)を格納してください。図

6.4にローダプログラム用チェックサムブロックの格納フォーマットを示します。

セクタ0

セクタ1

セクタ2

セクタ3

セクタ56

ローダプログラムを512バイト単位

56ブロックに分割し、各ブロックの

チェックサムを格納

ローダプログラムを512バイト単位

56ブロックに分割し、各ブロックの

反転チェックサムを格納

シグネチャ

チェックサムブロック(512バイト)

ローダプログラム(セクタ1)

ローダプログラム(セクタ2)

ローダプログラム(セクタ3)

・・・

ローダプログラム(セクタ56)

ローダプログラム(セクタ1)のチェックサム値H'0000ローダプログラム(セクタ2)のチェックサム値H'0004ローダプログラム(セクタ3)のチェックサム値H'0008

・・・

ローダプログラム(セクタ56)のチェックサム値H'00dcローダプログラム(セクタ1)の反転チェックサム値H'00e0ローダプログラム(セクタ2)の反転チェックサム値H'00e4ローダプログラム(セクタ3)の反転チェックサム値H'00e8

・・・

ローダプログラム(セクタ56)の反転チェックサム値H'01bc

ALL 0

H'0000_55aaH'01fcMMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

図6.4 ローダプログラム用チェックサムブロックの格納フォーマット

各セクタのチェックサム値は、ローダプログラムの 1 セクタ分のデータを 2 バイト単位で読み出し(読み

出したデータは符号なし 2 バイト変数として扱う)、符号なし 4 バイト変数に加算して計算してください。

また、反転チェックサム値には、チェックサム値をビット反転した値を格納してください。図 6.5にローダプ

ログラム用チェックサム値の計算例を示します。

uint32_t loop;uint16_t *ptr;

uint32_t checksum ;

checksum = 0;ptr = (uint16_t *)sector_buf;

for( loop = 0; loop < (512 / 2); loop++ ){ checksum += *ptr; ptr++;}

← ローダプログラムの1セクタ分のデータが格納 されているバッファsector_bufのアドレスをポインタ変数ptrに設定

← 計算したチェックサム値を格納するのは 符号なし4バイト変数

← ローダプログラムのデータを 2バイト単位でアクセスするためのポインタ変数

← 1セクタ(512バイト)分の全データに対して 2バイト単位で読み出して、 符号なし4バイト変数checksumに加算する

図6.5 ローダプログラム用チェックサム値の計算例

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 26 of 38 2016.09.02

6.1.4 ローダプログラムの動作フロー 図 6.6にローダプログラムの動作フローを示します。

開始

CP15 システム制御レジスタの設定

周波数制御レジスタ(FRQCR)変更

スタックポインタの設定 ・スーパバイザモードのスタックポインタを設定

・エントリポイントであるH'2002_4000番地からローダプログラムの処理を開始

・Iキャッシュを無効に設定

・Dキャッシュを無効に設定

・MMUを無効に設定

・例外ベクタテーブルのベースアドレスをローベクタ(H'0000_0000)に変更

 ベクタベースアドレスレジスタ(VBAR)によって、ベースアドレスを指定できる

 ようにします。ローダプログラムでは、ローダプログラム実行中に例外が発生した場合に

プログラムが暴走しないように仮のベクタテーブルのアドレスをVBARに設定しています。

(アプリケーションプログラム側で最終的に使用するベクタテーブルのアドレスを

VBARに設定しています。)

・EXTALから 13.33[MHz]が入力される前提で下記のクロック設定を行います。

 Iφ = 400[MHz]、Gφ = 266.67MHz]、Bφ = 133.33[MHz]、P1φ = 66.67[MHz]  P0φ = 33.33[MHz]、CKIO = 66.67[MHz]

eMMCデバイスのオープンopen_emmc()

ダウンロードテーブル情報の取得

・MMCドライバを初期化し、接続されたeMMCデバイスとの

初期化処理を実行します。

本関数では、MMCドライバの関数である ce_init関数、ce_cd_int関数、ce_set_buffer関数、

ce_set_config関数、ce_set_timeout関数、ce_mount関数をコールします。

・ダウンロードテーブルの格納位置(パーティション番号、セクタ番号)を保持している

ダウンロードテーブル情報を取得する。

MMCドライバを使用した処理

・大容量内蔵RAM上に展開されたアプリケーションプログラムの

エントリポイント(H'2002_B000)に分岐後、アプリケーションプログラムの実行を開始します。

アプリケーションプログラムの

エントリポイントに分岐apl_top_jmp()

eMMCデバイスのクローズclose_emmc()

・eMMCデバイスに格納されているアプリケーションプログラムの

 データを大容量内蔵RAMに転送します。

 本関数では、MMCドライバ関数であるce_csd_get_register関数、 ce_csd_set_register関数、

ce_read_sect関数がコールします。

eMMCデバイスのパーティション選択set_mmc_partition_access()

eMMCデバイスから

ダウンロードテーブルを読み出すread_emmc()

eMMCデバイスから

アプリケーションプログラムを

大容量内蔵RAMへ転送app_prog_transfer()

・本関数では、MMCドライバの関数であるce_csd_get_register関数、 ce_csd_set_register関数、

 ce_unmount関数、ce_finalize関数をコールし、終了処理を行います。

・ダウンロードテーブルが格納されているパーティション番号(Boot Partition 2)を選択します。

・ダウンロードテーブルを読み出し、アプリケーションプログラムのパーティション番号、セクタ番号、

転送先アドレス、プログラムサイズの情報を取得します。

本関数では、MMCドライバ関数であるce_read_sect関数がコールします。

図6.6 ローダプログラムの動作フロー

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 27 of 38 2016.09.02

6.1.5 アプリケーションプログラムの転送 ローダプログラムは、ダウンロードテーブル情報を参照してダウンロードテーブルが格納されているパー

ティション番号、セクタ番号を取得した後、ダウンロードテーブルのデータを取得します。ダウンロードテー

ブル内には、アプリケーションプログラムが格納されているパーティション番号、セクタ番号、転送先アド

レス、プログラムサイズの情報が格納されています。ローダプログラムでは、このダウンロードテーブルを

参照して、eMMCデバイスに格納されているアプリケーションプログラムを大容量内蔵 RAMへ転送します。

図 6.7にアプリケーションプログラムの転送イメージを示します。

大容量内蔵RAMMMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

ローダプログラム(28Kバイト)

ダウンロードテーブル情報

ダウンロードテーブル(512バイト)

アプリケーションプログラム(1)

1. ダウンロードテーブルを取得

2. ダウンロードテーブルを参照し

アプリケーションプログラムを

大容量内蔵RAMに転送

- パーティション番号

- セクタ番号

- 転送先アドレス

- プログラムサイズ

アプリケーションプログラム(2)

アプリケーションプログラム(3)

アプリケーションプログラム(1)

アプリケーションプログラム(2)

アプリケーションプログラム(3)

VECTOR_TABLE

VECTOR_MIRROR_TABLE

CONST_DL_TABLE

RZ_A1H_emmc_boot_loader_armcc.bin

RESET_HANDLER

アプリケーションプログラム用プロジェクトにより生成され

たバイナリファイル

ローダプログラム用プロジェクトに

より生成されたバイナリファイル

図6.7 アプリケーションプログラムの転送イメージ

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 28 of 38 2016.09.02

(1) ダウンロードテーブル情報のデータ構造

ダウンロードテーブル情報は、ダウンロードテーブルが格納されている eMMC デバイスのパーティション

番号やセクタ番号の情報を格納します。図 6.8にダウンロードテーブル情報のデータ構造、表 6.1にサンプル

コードでのダウンロードテーブル情報の設定を示します。

typedef struct dltbl_info{ uint32_t dlt_partition; /* ダウンロードテーブルが格納されているパーティション番号 */ uint32_t dlt_sector; /* ダウンロードテーブルが格納されているセクタ番号 */} DLTBL_INFO;

図6.8 ダウンロードテーブル情報のデータ構造

表6.1 サンプルコードでのダウンロードテーブル情報の設定

項目 値 説明 ダウンロードテーブルが格納されているパーティション番号 2 Boot partittion 2 ダウンロードテーブルが格納されているセクタ番号 228 セクタ 228

(2) ダウンロードテーブルのデータ構造

図 6.9にダウンロードテーブルのデータ構造を示します。ダウンロードテーブルは、アプリケーションプロ

グラムが格納されているパーティション番号、セクタ番号、アプリケーションプログラムの転送先アドレス、

サイズの情報を格納します。サンプルコードでのダウンロードテーブルの設定内容については、「6.2.3 サ

ンプルコードのダウンロードテーブルの設定内容」を参照してください。

typedef struct dl_table { uint32_t partition; /* アプリケーションプログラムが格納されているパーティション番号 */ uint32_t topsct; /* アプリケーションプログラムが格納されているセクタ番号 */ uint32_t *app_addr; /* アプリケーションプログラムの転送先アドレス */ uint32_t *prog_size; /* アプリケーションプログラムのサイズ */} DL_TABLE;

図6.9 ダウンロードテーブルのデータ構造

6.1.6 アプリケーションプログラムのエントリポイントへの分岐 ローダプログラムは、大容量内蔵 RAM にアプリケーションプログラムを転送後、アプリケーションプログ

ラムのエントリポイント(サンプルコードでは H'2002_B000)に分岐します。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 29 of 38 2016.09.02

6.2 アプリケーションプログラムの作成例 ここでは、eMMC ブートのアプリケーションプログラムの作成方法について説明します。

6.2.1 アプリケーションプログラムの生成方法 図 6.10にアプリケーションプログラムの生成フローを示します。

ハードウェア

初期化処理

オンボード標準

入出力処理

アセンブラ言語

エントリ/スタック設定

Cコンパイラ アセンブラ

オブジェクト

モジュール標準ライブラリ

リンカ

スキャッタファイル

実行形式ファイル

メモリ配置設定

(大容量内蔵RAMに配置)

ダウンロードテーブル

ファイル

アプリケーション

処理

バイナリファイル

fromelf(イメージ変換ユーティリティ)

・CONST_DL_TABLE(ダウンロードテーブル)

・VECTOR_TABLE(アプリケーションプログラム(1))

・VECTOR_MIRROR_TABLE(アプリケーションプログラム(2))

・RESET_HANDLER(アプリケーションプログラム(3))

生成された各バイナリファイルをアプリケーションプログラムとして

eMMCデバイスに書き込みます。

RZ_A1H_emmc_boot_sample_armcc

図6.10 アプリケーションプログラムの生成フロー

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 30 of 38 2016.09.02

6.2.2 アプリケーションプログラムのメモリマップ アプリケーションプログラムは、RAM 領域で実行させる必要があるため、サンプルコードではアプリケー

ションプログラムを大容量内蔵 RAM に配置します。図 6.11にサンプルコードでのアプリケーションプログ

ラムのメモリ配置を示します。

H'2002_4000

H'00A0_0000※

MMCコントローラ内蔵NANDフラッシュメモリ

(eMMCデバイス)

セクタ56

セクタ228

セクタ229

ローダプログラム(28KB)

ダウンロードテーブル情報

ダウンロードテーブル

アプリケーションプログラム(1)

セクタ0

H'2000_0000

H'2002_B000

ダウンロードテーブル

大容量内蔵

RA

M領域

H'2008_0000

アプリケーションプログラム用

ワーク領域

CPUアドレス空間

ローダプログラム用の

チェックサムブロック(512バイト)

セクタ1

ローダプログラム(28KB)

ダウンロードテーブル情報

H'2002_AFFF

H'2002_0000

H'2002_3FFF ブート起動用内蔵ROMプログラム用

ワーク領域

※ダウンロードテーブルは、アプリケーションプログラム用プロジェクトで

 生成しますが、アプリケーションプログラムでは参照せず、

 ローダプログラムがeMMCデバイスから読み出し後

 バイナリデータとして参照します。

 アプリケーションプログラム用プロジェクトでは、ローダプログラムを

 特定のアドレスに割り付ける必要が無いため、サンプルコードでは

 使用しないアドレスに配置しています。

アプリケーションプログラム(2)セクタ230

アプリケーションプログラム(3)

セクタ231 アプリケーションプログラム(1)

アプリケーションプログラム(2)

アプリケーションプログラム(3)

図6.11 サンプルコードでのアプリケーションプログラムのメモリ配置

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 31 of 38 2016.09.02

6.2.3 サンプルコードのダウンロードテーブルの設定内容 図 6.12にサンプルコードのダウンロードテーブルの内容を、表 6.2にサンプルコードでのダウンロードテー

ブルの設定内容を示します。サンプルコードでは、アプリケーションプログラムが複数のバイナリファイル

から構成されているため、図 6.12のように複数のバイナリファイルのデータが転送できるように設定してい

ます。ローダプログラムでは、emmc_dl_table[0]、emmc_dl_table[1]、emmc_dl_table[2]、・・・の順にダ

ウンロードテーブルを参照し、参照した順にアプリケーションプログラムを大容量内蔵RAMに転送します。

ローダプログラムでダウンロードテーブルの終端であることを判断するために、ダウンロードテーブルの最

後に終端コードを意味する END_DL_TABLE を格納してください。ダウンロードテーブルのサイズは、512バイトです。1 ブロック(1 個のバイナリファイル)の転送の管理情報として 16 バイト使用するため、終端

コード分を除くと、最大で 31 回の転送の管理が可能です。

図6.12 サンプルコードのダウンロードテーブルの内容

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 32 of 38 2016.09.02

表6.2 サンプルコードでのダウンロードテーブルの設定内容

項目 設定値 補足 アプリケーションプログラム(1)が 格納されているパーティション

2 Boot partittion 2

アプリケーションプログラム(1)が 格納されている先頭セクタ番号

229 セクタ 229

アプリケーションプログラム(1)の ロード領域の先頭アドレス (注)

&Load$$LR$$LOAD_MODULE1$$Base

アプリケーションプログラム(1)の ロード領域のサイズ (注)

&Load$$LR$$LOAD_MODULE1$$Length ビルド時に確定

アプリケーションプログラム(2)が 格納されているパーティション

2 Boot partittion 2

アプリケーションプログラム(2)が 格納されている先頭セクタ番号

230 セクタ 230

アプリケーションプログラム(2)の ロード領域の先頭アドレス (注)

&Load$$LR$$LOAD_MODULE2$$Base

アプリケーションプログラム(2)の ロード領域のサイズ (注)

&Load$$LR$$LOAD_MODULE2$$Length ビルド時に確定

アプリケーションプログラム(3)が 格納されているパーティション

2 Boot partittion 2

アプリケーションプログラム(3)が 格納されている先頭セクタ番号

231 セクタ 231

アプリケーションプログラム(3)の ロード領域の先頭アドレス (注)

&Load$$LR$$LOAD_MODULE3$$Base

アプリケーションプログラム(3)の ロード領域のサイズ (注)

&Load$$LR$$LOAD_MODULE3$$Length ビルド時に確定

アプリケーションプログラム(4)が 格納されているパーティション

END_DL_TABLE ダウンロードテーブルの 終端コード

アプリケーションプログラム(4)が 格納されている先頭セクタ番号

0 ダミーデータ

アプリケーションプログラム(4)の ロード領域の先頭アドレス

0 ダミーデータ

アプリケーションプログラム(4)の ロード領域のサイズ

0 ダミーデータ

【注】 アプリケーションプログラムの配置(スキャッタファイルの記述)に依存します。

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 33 of 38 2016.09.02

7. サンプルコードの説明

7.1 サンプルコードの動作概要 リセット解除後、ブート起動用内蔵 ROM プログラム、ローダプログラム、アプリケーションプログラムの

順に実行し、アプリケーションプログラムにある main 関数にて、図 7.1のメッセージを表示します。図 7.1の Ver.X.XX はサンプルコードのメイン処理のバージョンを示します。表 7.1にシリアル通信の設定を示しま

す。

RZ/A1H CPU Board eMMC Boot Sample Program. Ver.X.XX Copyright (C) 2012 - 2016 Renesas Electronics Corporation. All rights reserved.

図7.1 サンプルコード起動時のターミナル表示

表7.1 シリアル通信の設定

項目 設定内容 ボーレート 115200bps データ長 8 ビット パリティ なし ストップビット 1 ビット フロー制御 なし

7.2 サンプルコードのプロジェクトの構成 表 7.2にサンプルコードのプロジェクトと生成されるバイナリファイル一覧を示します。

表7.2 サンプルコードのプロジェクトと生成されるバイナリファイル一覧

プロジェクト名 生成されるバイナリファイル名 備考 RZ_A1H_emmc_boot_loader_armcc ローダプログラム生成用 プロジェクト

RZ_A1H_emmc_boot_loader_armcc.bin Boot partittion 1 セクタ番号:1~56 (予備領域のセクタ番

号は省略) RZ_A1H_emmc_boot_sample_armcc アプリケーションプログラム 生成用プロジェクト

CONST_DL_TABLE (ダウンロードテーブル)

Boot partittion 2 セクタ番号:228

VECTOR_TABLE (アプリケーションプログラム(1))

Boot partittion 2 セクタ番号:229

VECTOR_MIRROR_TABLE (アプリケーションプログラム(2))

Boot partittion 2 セクタ番号:230

RESET_HANDLER (アプリケーションプログラム(3))

Boot partittion 2 セクタ番号:231~

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 34 of 38 2016.09.02

8. eMMC ブートに関する注意事項

8.1 eMMC ブート可能なデバイスについて RZ/A1H のブート起動用内蔵 ROM プログラムは、eMMC ブート設定時、Boot Operation によりローダプロ

グラムのデータを読み出します。eMMC ブートを使用する場合は、Boot Operation に対応した eMMC デバイ

スを使用してください。

【注】ローダプログラム読み出し時に、eMMC デバイスに対して CMD17(READ_SINGLE_BLOCK)またはCMD18(READ_MULTIPLE_BLOCK)を使用したアクセスは行いません。

8.2 Boot Operation について 図 8.1にBoot Operation によるローダプログラムの読み出しの動作を示します。RZ/A1H のブート起動用内蔵

ROM プログラムは、eMMC ブート設定時、データバス幅:4 ビットで動作するように MMCHI と PORT のレ

ジスタを設定します。Boot Operation 時の eMMC デバイス側のデータバス幅は、eMMC デバイス側の Extended CSD レジスタの BOOT_BUS_WIDTH[177]フィールドの設定値により決まります。正常にブート動作できるよ

うに、プログラム書き込み時に eMMC デバイスの Extended CSD に対して、表 8.1のように設定するようにし

てください。

DAT[3:0]

CMD

CLK

S 010 E S 512bytes+ CRC E S 512bytes

+ CRC E S 512bytes+ CRC E

Boot terminated

・RZ/A1Hは、Boot Operationによるアクセス時に、データハス幅は4ビットでeMMCデバイスにアクセスします。

 eMMCデバイスのデータバス幅は、Extended CSDの[177]フィールド(BOOT_BUS_WIDTH[177])により

 設定可能であるため、eMMCデバイスに対してローダプログラムを書き込む際に、4ビットバス幅となるように

 設定してください。

・eMMCデバイスは、Boot Operation時、Extended CSDのPARTITION_CONFIG[179] で選択したパーティションのセクタ0より、

 順次、データを出力します。

チェックサムブロック(512バイト) + ローダプログラム(28Kバイト)のデータ転送

セクタ0のデータ セクタ1のデータ セクタnのデータBoot Ack

図8.1 Boot Operation によるローダプログラムの読み出しの動作

表8.1 Boot Operation 時のデータバス幅設定

eMMC デバイス Extended CSD のフィールド

設定内容

BOOT_BUS_WIDTH[177] Bit[1:0] BOOT_BUS_WIDTH:b’01 (Boot Operation 動作時のバス幅を 4 ビットに設定)

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 35 of 38 2016.09.02

8.3 パーティションについて eMMC デバイスには、複数のパーティションが存在します。ブートするパーティションについては、

Extended CSD(EXT_CSD)レジスタの PARTITION_CONFIG[179]により設定することが可能です。サンプル

コードではローダプログラムを Boot Partition 1 に格納することを前提としているため、正常にブート動作で

きるように、プログラム書き込み時に eMMC デバイスの Extended CSD(EXT_CSD)に対して表 8.2の設定を

してください。

BOOT areaPartition 1

H'0000_0000

BOOT areaPartition 2

User area

H'0000_0000

H'0000_0000

Maximum boot partition size

Maximum boot partition size

図8.2 eMMC デバイスのパーティション

表8.2 Boot Operation 時のブートパーティション設定

eMMC デバイス Extended CSD のフィールド

設定内容

PARTITION_CONFIG[179] • Bit[6]の BOOT_ACK に b’1 を設定(BOOT Operation 時に eMMC が

BOOT Acknowledge を出力する設定) • Bit[5:3]の BOOT_PARTITION_ENABLE に b’001 を設定(BOOT

Operation 時に Boot Partition1 の 0 セクタからデータを出力する設

定)

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 36 of 38 2016.09.02

9. サンプルコードで使用する MMC ドライバについて

9.1 RZ/A1 MMC ドライバについて ここでは、本アプリケーションノートのサンプルコードで使用している RZ/A1 MMC ドライバについて説

明します。

9.1.1 MMC ドライバのバージョン情報 表 9.1にRZ/A1 MMC ドライバのバージョン情報を示します。

表9.1 RZ/A1 MMC ドライバのバージョン情報

項目 説明 名称 RZ/A1 MMC ドライバ Ver1.01 ドキュメント番号 R01UW0120JJ0101 RZ/A1 MMC ドライバの バージョン情報

RENESAS MMC4 Driver Ver1.01

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 37 of 38 2016.09.02

10. 参考ドキュメント ユーザーズマニュアル:ハードウェア

RZ/A1Hグループ ユーザーズマニュアル ハードウェア編 (最新版をルネサス エレクトロニクスホームページから入手してください。)

R7S72100 RTK772100BC00000BR(GENMAI ボード)ユーザーズマニュアル (最新版をルネサス エレクトロニクスホームページから入手してください。)

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition Issue C (最新版を ARM ホームページから入手してください。)

ARM Generic Interrupt Controller Architecture Specification Architecture version 1.0 (最新版を ARM ホームページから入手してください。)

ARM CortexTM-A9(Revision: r3p0)Technical Reference Manual (最新版を ARM ホームページから入手してください。)

ARM CoreLinkTM Level 2 Cache Controller L2C-310(Revision: r3p2)Technical Reference Manual (最新版を ARM ホームページから入手してください。)

テクニカルアップデート/テクニカルニュース

(最新の情報をルネサス エレクトロニクスホームページから入手してください。) ユーザーズマニュアル:開発環境

ARM ソフトウェア開発ツール(ARM Compiler toolchain、ARM DS-5 等)に関しては、ARM ホームページ

から入手してください。 (最新版を ARM ホームページから入手してください。)

RZ/A1H グループ MMC コントローラ内蔵フラッシュメモリからのブート例(暫定版)

R01AN1977JJ0081 Rev.0.81 Page 38 of 38 2016.09.02

ホームページとサポート窓口 ルネサス エレクトロニクスホームページ

http://japan.renesas.com お問合せ先

http://japan.renesas.com/contact/ すべての商標および登録商標は,それぞれの所有者に帰属します。

改訂記録

Rev. 発行日 改訂内容

ページ ポイント Rev.0.80 2014.02.28 - 初版作成 Rev.0.81 2016.09.02 P1 「要旨」 修正

• 説明文を修正 P4, P5 1 仕様 修正

• eMMC ブート時の処理イメージの説明を拡充 P6 1.2 使用する周辺機能 追加 P11 5.2.1 サンプルコード全体の動作 追加

• ブート起動用内蔵 ROM プログラム、ローダプログラム、ア

プリケーションプログラムの全体の処理概要を記載 P12 5.2.2 ブート起動用内蔵 ROM プログラムの動作 修正

• ブート起動用内蔵 ROM プログラムの説明を拡充 P13 5.2.3 ローダプログラムの動作 追加

• ローダプログラムの処理概要を記載 P14 5.2.4 アプリケーションプログラム(ユーザプログラム)の動

作 追加 • アプリケーションプログラムの処理概要を記載

P15~P18

5.3 サンプルコード実行時の周辺機能の設定およびメモリ配

置 追加 • サンプルコードで使用している周辺機能を記載 • サンプルコードで使用しているメモリ配置(セクション)

を記載 P19 5.4 関数一覧 追加

• ローダプログラムで使用している関数一覧表を記載 P20, P21

5.5 関数仕様 追加 • ローダプログラムで使用している関数仕様を記載

P22~P32

6. eMMC ブートシステムの開発方法 修正 • ローダプログラムの作成方法の内容を拡充 • アプリケーションプログラムの作成方法の内容を拡充

P33 7. サンプルコードの説明 追加 • サンプルコードの動作概要およびシリアル通信設定を追加 • ローダプログラム、アプリケーションプログラム生成用プ

ロジェクトに関する情報を記載 P34, P35

8. eMMC ブートに関する注意事項 追加

P36 9. サンプルコードで使用する MMC ドライバについて 追加 - MMC ドライバの更新版の組み込みに伴い、MMC サンプルコー

ドのプロジェクトを更新

製品ご使用上の注意事項 ここでは、マイコン製品全体に適用する「使用上の注意事項」について説明します。個別の使用上の注意

事項については、本ドキュメントおよびテクニカルアップデートを参照してください。

1. 未使用端子の処理 【注意】未使用端子は、本文の「未使用端子の処理」に従って処理してください。 CMOS製品の入力端子のインピーダンスは、一般に、ハイインピーダンスとなっています。未使用 端子を開放状態で動作させると、誘導現象により、LSI周辺のノイズが印加され、LSI内部で貫通電 流が流れたり、入力信号と認識されて誤動作を起こす恐れがあります。未使用端子は、本文「未使用

端子の処理」で説明する指示に従い処理してください。 2. 電源投入時の処置

【注意】電源投入時は,製品の状態は不定です。 電源投入時には、LSIの内部回路の状態は不確定であり、レジスタの設定や各端子の状態は不定で す。 外部リセット端子でリセットする製品の場合、電源投入からリセットが有効になるまでの期間、端子

の状態は保証できません。 同様に、内蔵パワーオンリセット機能を使用してリセットする製品の場合、電源投入からリセットの

かかる一定電圧に達するまでの期間、端子の状態は保証できません。 3. リザーブアドレス(予約領域)のアクセス禁止

【注意】リザーブアドレス(予約領域)のアクセスを禁止します。 アドレス領域には、将来の機能拡張用に割り付けられているリザーブアドレス(予約領域)がありま

す。これらのアドレスをアクセスしたときの動作については、保証できませんので、アクセスしない

ようにしてください。 4. クロックについて

【注意】リセット時は、クロックが安定した後、リセットを解除してください。 プログラム実行中のクロック切り替え時は、切り替え先クロックが安定した後に切り替えてください。 リセット時、外部発振子(または外部発振回路)を用いたクロックで動作を開始するシステムでは、

クロックが十分安定した後、リセットを解除してください。また、プログラムの途中で外部発振子 (または外部発振回路)を用いたクロックに切り替える場合は、切り替え先のクロックが十分安定し

てから切り替えてください。 5. 製品間の相違について

【注意】型名の異なる製品に変更する場合は、製品型名ごとにシステム評価試験を実施してくださ い。 同じグループのマイコンでも型名が違うと、内部ROM、レイアウトパターンの相違などにより、電 気的特性の範囲で、特性値、動作マージン、ノイズ耐量、ノイズ輻射量などが異なる場合がありま す。型名が違う製品に変更する場合は、個々の製品ごとにシステム評価試験を実施してください。

■営業お問合せ窓口

■技術的なお問合せおよび資料のご請求は下記へどうぞ。 総合お問合せ窓口:http://japan.renesas.com/contact/

ルネサス エレクトロニクス株式会社 〒135-0061 東京都江東区豊洲3-2-24(豊洲フォレシア)

© 2016 Renesas Electronics Corporation. All rights reserved.Colophon 4.0

http://www.renesas.com※営業お問合せ窓口の住所は変更になることがあります。最新情報につきましては、弊社ホームページをご覧ください。

ご注意書き

1. 本資料に記載された回路、ソフトウェアおよびこれらに関連する情報は、半導体製品の動作例、応用例を説明するものです。お客様の機器・システムの設計におい

て、回路、ソフトウェアおよびこれらに関連する情報を使用する場合には、お客様の責任において行ってください。これらの使用に起因して、お客様または第三

者に生じた損害に関し、当社は、一切その責任を負いません。

2. 本資料に記載されている情報は、正確を期すため慎重に作成したものですが、誤りがないことを保証するものではありません。万一、本資料に記載されている情報

の誤りに起因する損害がお客様に生じた場合においても、当社は、一切その責任を負いません。

3. 本資料に記載された製品デ-タ、図、表、プログラム、アルゴリズム、応用回路例等の情報の使用に起因して発生した第三者の特許権、著作権その他の知的財産権

に対する侵害に関し、当社は、何らの責任を負うものではありません。当社は、本資料に基づき当社または第三者の特許権、著作権その他の知的財産権を何ら許

諾するものではありません。

4. 当社製品を改造、改変、複製等しないでください。かかる改造、改変、複製等により生じた損害に関し、当社は、一切その責任を負いません。

5. 当社は、当社製品の品質水準を「標準水準」および「高品質水準」に分類しており、

各品質水準は、以下に示す用途に製品が使用されることを意図しております。

標準水準: コンピュータ、OA機器、通信機器、計測機器、AV機器、

家電、工作機械、パーソナル機器、産業用ロボット等

高品質水準:輸送機器(自動車、電車、船舶等)、交通用信号機器、

防災・防犯装置、各種安全装置等

当社製品は、直接生命・身体に危害を及ぼす可能性のある機器・システム(生命維持装置、人体に埋め込み使用するもの等) 、もしくは多大な物的損害を発生さ

せるおそれのある機器・システム(原子力制御システム、軍事機器等)に使用されることを意図しておらず、使用することはできません。 たとえ、意図しない用

途に当社製品を使用したことによりお客様または第三者に損害が生じても、当社は一切その責任を負いません。 なお、ご不明点がある場合は、当社営業にお問い

合わせください。

6. 当社製品をご使用の際は、当社が指定する最大定格、動作電源電圧範囲、放熱特性、実装条件その他の保証範囲内でご使用ください。当社保証範囲を超えて当社製

品をご使用された場合の故障および事故につきましては、当社は、一切その責任を負いません。

7. 当社は、当社製品の品質および信頼性の向上に努めていますが、半導体製品はある確率で故障が発生したり、使用条件によっては誤動作したりする場合がありま

す。また、当社製品は耐放射線設計については行っておりません。当社製品の故障または誤動作が生じた場合も、人身事故、火災事故、社会的損害等を生じさせ

ないよう、お客様の責任において、冗長設計、延焼対策設計、誤動作防止設計等の安全設計およびエージング処理等、お客様の機器・システムとしての出荷保証

を行ってください。特に、マイコンソフトウェアは、単独での検証は困難なため、お客様の機器・システムとしての安全検証をお客様の責任で行ってください。

8. 当社製品の環境適合性等の詳細につきましては、製品個別に必ず当社営業窓口までお問合せください。ご使用に際しては、特定の物質の含有・使用を規制する

RoHS指令等、適用される環境関連法令を十分調査のうえ、かかる法令に適合するようご使用ください。お客様がかかる法令を遵守しないことにより生じた損害に

関して、当社は、一切その責任を負いません。

9. 本資料に記載されている当社製品および技術を国内外の法令および規則により製造・使用・販売を禁止されている機器・システムに使用することはできません。ま

た、当社製品および技術を大量破壊兵器の開発等の目的、軍事利用の目的その他軍事用途に使用しないでください。当社製品または技術を輸出する場合は、「外

国為替及び外国貿易法」その他輸出関連法令を遵守し、かかる法令の定めるところにより必要な手続を行ってください。

10. お客様の転売等により、本ご注意書き記載の諸条件に抵触して当社製品が使用され、その使用から損害が生じた場合、当社は何らの責任も負わず、お客様にてご負

担して頂きますのでご了承ください。

11. 本資料の全部または一部を当社の文書による事前の承諾を得ることなく転載または複製することを禁じます。

注1. 本資料において使用されている「当社」とは、ルネサス エレクトロニクス株式会社およびルネサス エレクトロニクス株式会社がその総株主の議決権の過半数

を直接または間接に保有する会社をいいます。

注2. 本資料において使用されている「当社製品」とは、注1において定義された当社の開発、製造製品をいいます。