6. メモリ構造

6. メモリ構造

6.1 メモリ空間

CH559のアドレス空間は、プログラム保存空間、内部データ保存空間、外部データ保存空間に分けられている。

図 6.1 メモリ構造

Memory_structure

6.2 プログラム記憶空間

プログラムメモリ領域は64KBです。図6.1に示すように、命令コードを保存するコードフラッシュ領域、不揮発性データを保存するデータフラッシュ領域、構成情報を保存する構成情報領域など、すべてフラッシュROMに使用されます。

データフラッシュのアドレス範囲はF000h~F3FFHです。1バイト読み込み(8ビット)、2バイト書き込み(16ビット)、ブロック削除(1Kバイト)動作をサポートしています。チップの電源を切ってもデータは変化しません。

コードフラッシュには、ローアドレス領域用のアプリケーションコードとハイアドレス領域用のブートストラップコードがあります。また、これら2つの領域とデータフラッシュを組み合わせて、1つのアプリケーションコードを保持することもできます。

構成情報は必要に応じてプログラマが設定する合計16ビットのデータで表6.2を参照してください。

表6.2 フラッシュROMの構成情報の説明

ビット名前説明リセット値
15Code_ProtectフラッシュROMのコードとデータ保護モード:
0-プログラマが読み取ることを禁止する、プログラムは秘密です
1-読み出しを許可
0/1
14No_Boot_LoadBootLoader ブートコード起動モードを許可:
0-0000hアドレスのアプリケーションから起動
1-F400hアドレスのブートローダから起動
1
13En_Long_Resetパワーオンリセット時の追加遅延リセットを許可:
0-スタンダードショートリセット
1-ワイドリセット、87mSリセット時間追加
0
12XT_OSC_Strong水晶振動子の外部駆動を選択:
0-基本
1-拡張
0
11En_P5.7_RESETマニュアルリセット入力端子としてP5.7を有効:
0-無効
1-リセット有効
1
10En_P0_Pullupシステムリセット時にポートP0の内部プルアップ抵抗を有効:
0-リセット後、プルアップ抵抗は無効
1-リセット後、プルアップ抵抗が有効
1
9Must_1(必要に応じてプログラマが自動的に1に設定)1
8Must_0(必要に応じてプログラマが自動的に0に設定)0
[7:0]All_1(必要に応じてプログラマが自動的にFFhに設定)FFh

6.3 データ保存領域

内部データ記憶領域は合計256バイトです。図6.1に示すように、SFRとiRAMに使用します。iRAMはスタックや高速データの一時記憶に使用されます。作業レジスタR0~R7、ビット変数bdata、バイト変数data、idataなどに細分化することができます。

外部データ保存領域は、図6.1に示すように合計64KBで、一部はxRAMとxSFRの6KBのオンチップ拡張に使用されます。2つの予約領域を除いて、残りの4000h~FFFFFhのアドレス範囲が外部バス領域となります。

6.4 フラッシュROMレジスタ

表6.4 フラッシュROMオペレーションレジスタ一覧

名前アドレス説明リセット値
ROM_DATA_H8FhフラッシュROMデータレジスタ上位バイトxxh
ROM_DATA_L8EhフラッシュROMデータレジスタ下位バイトxxh
ROM_DATA8EhROM_DATA_LとROM_DATA_Hで16ビットSFRxxxxh
ROM_STATUS86hフラッシュROMステータスレジスタ(読み取り専用)80h
ROM_CTRL86hフラッシュROM制御レジスタ(書き込み専用)00h
ROM_ADDR_H85hフラッシュROMアドレスレジスタ上位バイトxxh
ROM_ADDR_L84hフラッシュROMアドレスレジスタ下位バイトxxh
ROM_ADDR84hROM_ADDR_LとROM_ADDR_Hで16ビットSFRxxxxh

フラッシュROMアドレスレジスタ(ROM_ADDR):

ビット名前アドレスDescriptionリセット値
[7:0]ROM_ADDR_HRWフラッシュROMアドレス上位バイトxxh
[7:0]ROM_ADDR_LRWフラッシュROMアドレス下位バイト、偶数アドレスのみサポートxxh

フラッシュROMデータレジスタ(ROM_DATA):

ビット名前アドレスDescriptionリセット値
[7:0]ROM_DATA_HRW書き込むフラッシュROMデータ上位バイトxxh
[7:0]ROM_DATA_LRW書き込むフラッシュROMデータ下位バイトxxh

フラッシュROM制御レジスタ(ROM_CTRL):

ビット名前アドレスDescriptionリセット値
[7:0]ROM_CTRLW0フラッシュROM制御レジスタ00h

フラッシュROMステータスレジスタ(ROM_STATUS):

ビット名前アドレス説明リセット値
7予約R0予約1
6bROM_ADDR_OKR0フラッシュROM動作アドレス有効状態ビット:
ビットが0の場合、パラメータは無効
1はアドレスが有効
0
[5:2]予約R0予約0000b
1bROM_CMD_ERRR0フラッシュROM動作コマンドエラーステータスビット:
0はコマンドが有効
1は不明なコマンド
0
0bROM_CMD_TOUTR0フラッシュROM動作結果ステータスビット:
0は操作が成功
1は操作がタイムアウト
0

6.5 フラッシュROM操作手順

  1. フラッシュROMを消去し、ターゲット・ブロックの全データ・ビットを1に変更:

    1. セキュリティモードを有効にする、SAFE_MOD=55h; SAFE_MOD=0AAh
    2. グローバルコンフィグレーションレジスタGLOBAL_CFGを書き込み可能に設定(bCODE_WEまたはbDATA_WEはコードまたはデータに対応)
    3. アドレスレジスタROM_ADDRを設定し、16ビットのターゲットアドレスを書き込む。実際には上位6ビットのみ有効
    4. 動作制御レジスタROM_CTRLを0A6hに設定してブロック消去動作を行うと、動作中にプログラムが自動的に一時停止します
    5. 操作が終了すると、プログラムは操作を再開します。この時、ステータスレジスタROM_STATUSを参照して動作状態を確認することができます。複数のブロックを消去する場合は、(3)(4)(5)の処理を繰り返します
    6. 再びセーフモードに入る。SAFE_MOD=55h; SAFE_MOD=0AAh
    7. グローバルコンフィグレーションレジスタGLOBAL_CFGを設定して、書き込み禁止(bCODE_WE=0、bDATA_WE=0)を有効にします
  2. ターゲットの2バイトのデータビットの一部を1から0に変更するためにフラッシュROMを書き込みます:

    1. セキュリティモードを有効にする、SAFE_MOD=55h; SAFE_MOD=0AAh
    2. グローバルコンフィグレーションレジスタGLOBAL_CFGを書き込み可能に設定(bCODE_WEまたはbDATA_WEはコードまたはデータに対応)
    3. アドレスレジスタROM_ADDRを設定し、16ビットのターゲットアドレスを書き込む。実際には上位15ビットのみ有効
    4. データレジスタROM_DATAをセットし、データを16ビット書き込む。(3)(4)のステップを逆にすることができます
    5. 動作制御レジスタROM_CTRLを09Ahに設定して書き込み動作を行うと、動作中にプログラムが自動的に一時停止します
    6. 操作が終了すると、プログラムは操作を再開します。この時、ステータスレジスタROM_STATUSを参照して動作状態を確認することができます。複数のブロックを書き込みする場合は、(3)(4)(5)(6)の処理を繰り返します
    7. 再びセーフモードに入る。SAFE_MOD=55h; SAFE_MOD=0AAh
    8. グローバルコンフィグレーションレジスタGLOBAL_CFGを設定して、書き込み禁止(bCODE_WE=0、bDATA_WE=0)を有効にします
  3. フラッシュROM読み取り:

    1. MOVC命令を使用して直接、またはプログラムメモリ空間へのポインタを使用して、ターゲットアドレスのコードやデータを読み出すことができます

6.6 オンボードプログラミングとISPダウンロード

構成情報Code_Protect=1の時、CH559チップのフラッシュROM内のコードとデータを外部プログラマが同期シリアルインタフェースを介して読み書きすることができます。構成情報Code_Protect=0の時、フラッシュROM内のコードとデータは保護されます。読み出すことはできませんが、消去し、消去後に電源を入れ直すことでコード保護を解除することができます。

CH559チップがBootLoaderブートローダでプリインストールされている場合、CH559は、アプリケーションをロードするためにUSBや非同期シリアルポートなどの複数のISPダウンロード方法をサポートすることができますが、ブートローダはありません。CH559は外部の専用プログラマがブートローダに書き込むことしかできません。またはアプリケーションです。オンボード・プログラミングをサポートするために、CH559とプログラマ間の接続ピンを5本、回路内に予約する必要があります。

表6.6.1 プログラマへの接続ピン

ピンGPIOピン説明
RSTP5.7プログラミング状態のリセットコントロールピン。HIGHレベルでプログラミング状態
SCSP1.4チップセレクト入力端子(プログラミング状態)、デフォルトHIGHレベル、アクティブLOW
SCKP1.7プログラミング状態のクロック入力端子
MOSIP1.5プログラミング状態のデータ入力端子
MISOP1.6プログラミング状態のデータ出力端子

6.7 チップユニークID番号

各マイコンには、チップ識別番号と呼ばれる固有のID番号が出荷に付与されます。IDデータとそのチェックサムは合計8バイトで、専用リードオンリーメモリのオフセットアドレスが20hになる領域に格納されています。グローバル割り込みをクローズし、E_DISが1の期間に同様にコードフラッシュを読み出すことで取得することができます。動作はC言語のサンプルプログラムGETID.Cを参照してください。

表6.7.1 チップIDアドレステーブル

オフセットアドレスIDデータ概要
20h, 21hID番号の最初のワードデータの後に、下位バイトと次の下位バイトが続きます
22h, 23hIDセカンドワードデータの後に、ID番号の次の上位バイトが続きます
24h, 25hID最後のワードデータの後に、48ビットのID番号の次の上位バイトと上位バイトが続く
26h, 27hID検証に使用されるIDの最初のワード、第2ワード、最後のワードデータの16ビットの累積合計

ID番号は、ダウンロードツールで対象のプログラムを暗号化する際に使用することができます。一般的なアプリケーションでは、ID番号の最初の32桁だけを使用してください。