フラッシュへの書き込み

BishopのNORフラッシュメモリやNANDフラッシュメモリへ書き込む手順です。

1. NOR

1.1. U-BootによるNORの書き込み

U-BootによるNORへの書き込みをLinuxカーネルを例に説明します。

まず、TFTPでU-Boot形式のLinuxカーネルイメージを転送します。

Bishop # tftpboot 30900000 uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
MAC: 00:1d:2d:00:00:0b
could not establish link
TFTP from server <TFTP サーバの IP>; our IP address is <IP アドレス>
Filename 'uImage'.
Load address: 0x30900000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #########################
done
Bytes transferred = 1787100 (1b44dc hex) ←転送されたサイズ

次に、NORを消去します。ここではLinuxカーネルの領域であるセクタ11から56を消去します。

Bishop # erase 1:11-56

最後に、転送したイメージを書き込みます。この時、最後の引数には TFTPで転送したサイズを指定します。

Bishop # cp.b 30900000 40000 1b44dc

TFTPによるファイル転送の詳細については U-Bootリファレンスマニュアル を参照してください。

30900000〜 はダウンロード用に割り当てられた SDRAM上の領域です。詳細は アドレスマップ を参照してください。

U-BootによってU-Boot自体を書き換える事も可能ですが、書き込みに失敗した場合は起動できなくなります。 お客様がU-Bootを上書きした事による起動の不具合についてはサポート対象外とさせていただきます。

1.2. LinuxによるNORの書き込み

Bishopで動作するLinuxからNORへの書き込む手順をinitrdを例に説明します。

Linuxによる書き込みではMTD [1] ドライバが必要になります。まずはMTDドライバの有無を確認してください。

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00400000 00010000 "Bishop NOR flash"
mtd1: 00040000 00010000 "U-Boot"
mtd2: 002f0000 00010000 "Kernel"
mtd3: 000c0000 00010000 "initrd"
mtd4: 00010000 00010000 "U-Boot environment variables"
mtd5: 08000000 00020000 "Root filesystem"

Bishopの標準カーネルではmtd0がNOR、mtd5がNANDになっています。mtd1からmtd4はNORの疑似パーティションです。今回はinitrdを書き込むため、mtd3が対象になります。initrd以外を書き込む場合は、適時読み替えてください。

書き込む領域を消去します。

# flash_eraseall /dev/mtd3

U-Boot形式のinitrdイメージ (initrd.uimg) をmtd3に書き込みます。

# dd if=initrd.uimg of=/dev/mtd3

mtd のパーティションについては アドレスマップも参照してください。

Bishop標準カーネルではmtd1 (U-Boot) とmtd5 (U-Boot環境変数の保存領域) はリードオンリーになっています。

mtd0を消去するとU-Bootを含むNOR全体が消去され起動できなくなります。mtd0を消去しないようにご注意ください。

1.3. JTAG-ICE (デバッガ) によるNORの書き込み

ビットラン株式会社 様の DR-01 の場合を例に説明します。

  1. 「ファイル」→「ファイルの読み込み」
  2. 「追加」ボタンをクリック
  3. フラッシュの一覧からMacronix MX29LV320AB 32MBit (4Mx8bit/2Mx16bit) を選択
  4. フラッシュの設定して「OK」をクリック (アクセスサイズ: 16bit アクセス, 個数: 1, スタートアドレス: 0, ターゲットバス幅: 16bit)
  5. Load Formatを選択 (Bishopの場合、通常はバイナリを選択)
  6. ファイルイメージを選択して「開く」をクリック
  7. 「バイナリファイルの書き込み開始アドレス」ダイアログでアドレスに0を指定して「OK」をクリック

1.4. ダウンロードケーブルによるNORの書き込み

1.4.1. 必要なもの

ダウンロードケーブルによる NORの書き込みには以下のものが必要になります。

1.4.2. ライタープログラムのコンパイル

ライタープログラムのコンパイル手順です。

ソースコード pljflash-0.9.2.tar.gz をダウンロードして、適当な場所に展開します。

$ tar xzvf pljflash-0.9.2.tar.gz

展開したソースコードのディレクトリに移動します。

$ cd pljflash-0.9.2

make します。

$ make

正常にコンパイルされれば、実行ファイルpljが出来ます。

1.4.3. 接続

ダウンロードケーブルでPCとBishopを接続します。PC側はパラレルポートに、Bishop側はJTAGのコネクタに接続します。JTAGのコネクタはダウンロードケーブル付属のバラ線を使います。

JTAGコネクタ

回路図

1.4.4. ライタープログラムの実行

U-Bootを書き込む場合を例に説明します。

書き込むイメージファイルを引数にpljをroot権限で実行します。

# plj u-boot.bin
1.4.5. 参考

弊社ブログ記事 - CPUボードBishop (6) 『フラッシュメモリの書き込み』

2. NAND

2.1. U-BootによるNANDの書き込み

U-BootによるNANDの書き込みはサポート対象外とさせていただきます。

2.2. LinuxによるNANDの書き込み

jffs2ファイルシステム (rootfs.jffs2) の書き込みを例に説明します。

Linuxによる書き込みではMTDドライバが必要になります。あらかじめMTDドライバの有無を確認してください。

まず、NANDを消去します。Bishopの標準カーネルではNANDのMTDデバイスはmtd5になります。

$ flash_eraseall /dev/mtd5

nandwrite[2] コマンドで書き込みます。

$ nandwrite /dev/mtd5 rootfs.jffs2
  1. ^ MTD (Memory Technology Devices): メモリデバイスを扱うためのサブシステムです。MTDに関する情報は http://www.linux-mtd.infradead.org/ で得ることができます。
  2. ^ mtd-toolsに含まれるNANDに書き込むコマンドです。
cc