Armadillo NORフラッシュメモリ書き換え処理に関する仕様変更のお知らせ (2018年4月/Armadillo-400シリーズ、Armadillo-800シリーズ、Armadillo-Box WS1、Armadillo-IoT G2対象)

Armadillo-400シリーズ、Armadillo-800シリーズ、Armadillo-Box WS1、Armadillo-IoT G2を対象に、動作の安定性向上を目的として、NORフラッシュメモリ書き換え処理に関する仕様変更を行いました。

本仕様変更は、NORフラッシュメモリの変更後(2017年発行の変更通知によるもの)の製品には影響しません。
影響のある製品については「対象製品」をご覧ください。

後述の「対象製品」において、/dev/mtd* (/dev/flash/*) への書き込みを行うアプリケーションは、仕様変更の影響を受けますので、詳しくは、後述の「ユーザーアプリケーションへの影響」をご覧ください。

この仕様変更は、「2018年4月製品アップデート」より適用されます。

Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-400 シリーズ対象)
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-800 シリーズ対象)
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-IoT G2対象)
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-Box WS1 シリーズ対象)

対象製品

本仕様変更は、PC28Fから始まる型番のNORフラッシュメモリを搭載した以下の製品が対象となります。

  • Armadillo-410
  • Armadillo-420
  • Armadillo-440
  • Armadillo-460
  • Armadillo-810
  • Armadillo-840
  • Armadillo-IoT G2
  • Armadillo-Box WS1

NORフラッシュメモリの変更後(2017年発行の変更通知によるもの, MT28EWで始まる型番のNORフラッシュメモリを搭載)の製品は対象外となります。
詳細は、以下の変更通知をご確認ください。

仕様変更の概要

NORフラッシュメモリのBlock Locking機能の利用方針について以下のように変更しました。

  • 変更前
    • 書き込みが行われる直前にUnlockし、書き込み完了後はLockしません
    • 書き込みが行われるかどうかにかかわらず、Linuxカーネルがフラグに従って特定リージョンに属する全BlockをUnlockします
  • 変更後
    • 書き込みが行われる時だけUnlockし、書き込み完了後はLockします
    • NORフラッシュメモリのBlock Locking機能を使用して、基本的にLockした状態でNORフラッシュメモリを使用します

ユーザーアプリケーションへの影響

「2018年4月製品アップデート」以降は、ioctl(MEMUNLOCK)を実行しなければ、NORフラッシュメモリ(/dev/mtd*, /dev/flash/*)へwrite()を行うことができなくなります。

そのため、お客様のアプリケーションにてNORフラッシュメモリ(/dev/mtd*,/dev/flash/*)へ書き込みを行う場合は、以下のいずれかの対応が必要となります。

  • お客様のアプリケーション内で、NORフラッシュメモリへの書き込みの前後に、ioctl(MEMUNLOCK)およびioctl(MEMLOCK)を実行する
  • お客様のアプリケーションの起動前/終了後に、flash_unlockコマンド/flash_lockコマンドを実行する

flash_unlockコマンドおよびflash_lockコマンドの使用方法については、各コマンドのヘルプをご覧ください。
ioctl(MEMUNLOCK)およびioctl(MEMLOCK)を実行する方法については、atmark-dist/user/netflash/netflash.cを参考にしてください。

仕様変更の詳細については、以下をご参照ください。

仕様変更詳細

Hermit-Atブートローダーの仕様について

変更前

NORフラッシュメモリの書き換えが必要になったタイミングで、当該のBlockをUnlockします。
書き換え後、当該のBlockをLockしません。

変更後

NORフラッシュメモリの書き換えが必要になったタイミングで、当該のBlockをUnlockする動作に変更はありません。
書き換え後、当該のBlockをLockするようになります。

Linuxカーネルの仕様について

変更前

NORフラッシュメモリの各リージョンを、MTD(Memory Technology Device)として認識する際に、struct mtd_partitionの.mask_flagsメンバー変数にセットされたフラグに従って、そのリージョンに属する全てのBlockをUnlockします。

  • (.mask_flags & MTD_WRITEABLE) == trueの場合
    • 当該リージョンはuserlandからのwrite()ができなくなります
    • MTDの認識時にBlockがUnlockされません
  • (.mask_flags & MTD_POWERUP_LOCK) == trueの場合
    • MTDの認識時にBlockがUnlockされません
  • .mask_flags == 0の場合
    • MTDの認識時にBlockがUnlockされます

変更後

struct mtd_partitionの.mask_flagsメンバー変数の扱い方に変更はありません。
各リージョンの.mask_flagsにセットされるフラグが以下のように変更されます。

リージョン名 .mask_flags(変更前) .mask_flags(変更後)
config 0(フラグ未設定) MTD_POWERUP_LOCK
kernel 0(フラグ未設定) MTD_POWERUP_LOCK
userland 0(フラグ未設定) MTD_POWERUP_LOCK
bootloader MTD_WRITEABLE MTD_WRITEABLE, MTD_POWERUP_LOCK
firmware MTD_WRITEABLE MTD_WRITEABLE, MTD_POWERUP_LOCK
license MTD_WRITEABLE MTD_WRITEABLE, MTD_POWERUP_LOCK

Atmark Distの仕様について

変更前

  • netflash

    • -uオプションを指定した時のみ、NORフラッシュメモリの書き換え前に、当該リージョンをUnlockします
    • -lオプションを指定した時のみ、NORフラッシュメモリの書き換え後に、当該リージョンをLockします
  • flatfsd

    • -w, -sオプションを指定した時のみ、NORフラッシュメモリの書き換え前に、configリージョン全体をUnlockします
    • 書き換え後、当該のBlockをLockしません

変更後

  • netflash

    • 指定したオプションに関わらず、NORフラッシュメモリの書き換え前に、当該リージョンをUnlockするようになります
    • 指定したオプションに関わらず、NORフラッシュメモリの書き換え後に、当該リージョンをLockするようになります
  • flatfsd

    • -w, -sオプションを指定した時のみ、NORフラッシュメモリの書き換え前に、configリージョン全体をUnlockする動作に変更はありません
    • 書き換え後、当該のBlockをLockするようになります

修正を行ったファイルの一覧

  • hermit-at(v2)

    • src/target/driver/flash_intel.c
  • hermit-at-v3

    • src/target/driver/flash_intel.c
  • linux-3.14-at

    • arch/arm/mach-imx/mach-armadillo-box-ws1.c
    • arch/arm/mach-imx/mach-armadillo4x0.c
    • arch/arm/mach-imx/mach-armadillo_iotg_std.c
  • linux-3.4-at

    • arch/arm/mach-shmobile/board-armadillo810.c
    • arch/arm/mach-shmobile/board-armadillo840.c
  • linux-2.6.26-at

    • arch/arm/mach-mx25/armadillo400.c
    • arch/arm/mach-mx25/armadillo_iotg_std.c
  • atmark-dist

    • user/flatfsd/flatfsd-3.0.1/mtd.c
    • user/flatfsd/flatfsd-3.0.2/mtd.c
    • user/netflash/netflash.c