はじめに anchor.png

AT91SAM7S及びAT91SAM7Xマイコンボードシリーズに対応した弊社オリジナルブートローダです。
マイコンに備わったUARTないしUSBを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。
付属のバッチファイルにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。
ファイルの送受信にはXMODMプロトコルを使用しますが、全てのXMODEMに対応したターミナルクライアントに対応するものではありません。

Page Top

基本仕様 anchor.png

Page Top

適用コンパイラとコンパイル方法 anchor.png

弊社提供のGCC Developer Lite最新版のインストール先に「C:\Program Files\BestTech」フォルダを指定し、インストールコンポーネントとして「AT91SAM7Sシリーズでのみ使用」または「AT91SAM7Xシリーズでのみ使用」、もしくは「フルインストール」が選択されている必要があります。

ソースをダウンロードし適宜解凍したら、MAKE_AND_WRITEL.BATを実行します。

ターゲットを大文字で入力(S512,S256,S128,S64,S32,SE512,SE256,SE32,X512,X256,X128):

AT91SAM7S256のUSBポートを使用したブートローダをコンパイルするものとするならば、ターゲット名としてS256と入力しエンターキーを押します。

ターゲットを大文字で入力(S512,S256,S128,S64,S32,SE512,SE256,SE32,X512,X256,X128): S256
使用するコミュニケーションポートを大文字で入力(DBGU,DBGU2,US0,US1,USB):

次に、使用するコンソールポートに応じてポート名を入力します。USBポートを使用しますので、USBと入力しエンターキーを押します。

ターゲットを大文字で入力(S512,S256,S128,S64,S32,SE512,SE256,SE32,X512,X256,X128): S256
使用するコミュニケーションポートを大文字で入力(DBGU,DBGU2,US0,US1,USB): USB
TARGET  : AT91SAM7S256
PORT    : USB
SERIES  : SAM7S
BOOTCODE: boot_thumb.o
FILENAME: AT91SAM7S256_USB_BOOTLOADER
コンパイル中...
サイズ確認...
   text    data     bss     dec     hex filename
   8005       0    6612   14617    3919 ./out/AT91SAM7S256_USB_BOOTLOADER.elf
        1 個のファイルをコピーしました。
COMPLIE OK !!!
JTAGにてブートプログラムを書き込みます エンターキーを押して下さい

エラー等が無ければ COMPILE OK !!! のメッセージが表示され、ブートローダのコンパイルが完了します。このままエンターを押すとTINY JTAG-ICE2とOpenOCDを使って書き込み処理を行います。

JTAGにてブートプログラムを書き込みます エンターキーを押して下さい
Open On-Chip Debugger 0.10.0-dev-00363-ga7984ee (2016-08-14-16:38)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
Info : only one transport option; autoselect 'jtag'
srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst
Warn : Using DEPRECATED interface driver 'ft2232'
Info : Consider using the 'ftdi' interface driver, with configuration files in interface/ftdi/...
Info : clock speed 1000 kHz
Info : JTAG tap: sam7.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787 (<unknown>), part: 0xf0f0, ver: 0x3)
Info : Embedded ICE version 1
Info : sam7.cpu: hardware has 2 breakpoint/watchpoint units
adapter speed: 31 kHz
dcc downloads are enabled
fast memory access is enabled
Info : JTAG tap: sam7.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787 (<unknown>), part: 0xf0f0, ver: 0x3)
Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.
sam7.cpu: target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x200000d3 pc: 0x00000000
adapter speed: 31 kHz
adapter speed: 1000 kHz
auto erase enabled
auto unlock enabled
Info : Padding image section 0 with 12 bytes
Info : Padding image section 1 with 3 bytes
wrote 16384 bytes from file ./out/termsam7.elf in 3.319574s (4.820 KiB/s)
verified 8005 bytes in 0.179060s (43.658 KiB/s)
Info : JTAG tap: sam7.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787 (<unknown>), part: 0xf0f0, ver: 0x3)
Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.
sam7.cpu: target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x000000d3 pc: 0x00000000
adapter speed: 31 kHz
Info : JTAG tap: sam7.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787 (<unknown>), part: 0xf0f0, ver: 0x3)
shutdown command invoked
■■■■■■
成功!!
■■■■■■
続行するには何かキーを押してください . . .

JTAGで接続する環境が無い場合は、マイコンボードをSAM-BAモードにしFLASH WRITERやATMEL社のSAM-BAを使用してoutフォルダから手動でコンパイル済みファイルを選択して書き込みます。

fw_sambamode.png

コンパイル済みのファイルは、AT91SAM7[選択したターゲット]_[選択したポート]_BOOTLOADER.bin という名称で作られ、例えばAT91SAM7S256マイコンボードをUSBで使用する場合は AT91SAM7S256_USB_BOOTLOADER.bin を選択します。

Page Top

ソース及びコンパイル済みバイナリのダウンロード anchor.png

バージョン: 2.7
公開日: 2016/8/24
更新内容:未リリース版GCC Developer Liteにてコンパイルできるよう調整
USB選択時にXMODEME-1Kが正常動作しない不具合を修正
RTTを使用した時間待ちルーチンが挙動が不安定なのでPITのインターバル割り込みで代用
ターゲットとしてSAM7SE追加

バージョン: 2.5
公開日: 2013/8/21
更新内容:GCC Developer Lite Ver.2.5.1.0にてコンパイルできるよう調整
USB接続時の仮想COMポートのOPEN/CLOSE判定を中止
コマンドモードへのエントリーをハードリセット信号(リセットボタン)に変更
DUMPコマンド追加

バージョン: 2.2
公開日: 2010/4/16
更新内容:GCC Developer Lite Ver.2.3.2.0リリース版にてコンパイルできるよう調整
RTTによるウェイト処理が時折おかしくなる様なので処理方法を変更

バージョン: 2.11
公開日: 2010/3/7
更新内容:GCC 4.3.3においてフラッシュが512kバイトのターゲットを構築すると想定サイズを超えてしまうため、一部マクロを調整

バージョン: 2.1
公開日: 2010/2/16
更新内容:GCC Developer Lite Ver2.3.2.0以降で再構築可能

バージョン: 2.0
公開日: 2009/7/6

Page Top

メモリマップ anchor.png

ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。即ちブートローダ自身のサイズが大きいと、ユーザが使用できるエリアが圧迫されてしまいます。
現在リリースしているバージョンでは占有フラッシュROM領域が8kbyte以下である前提としているため、旧来のバージョンよりも機能が縮小されています。また、使用するコンソールポートによりコードサイズは大きく異なりますが、8kbyteの領域は予約されているものとします。

bl_memmap.png

ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x102000からフラッシュROMの最終番地までとなります。

Page Top

ユーザプログラム anchor.png

ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。

  • 起動アドレスが0x102000番地である
  • 0番地から割り当てられたSRAMの先頭へ動的にベクタを登録する操作をスタートアップルーチン等により行っている
  • 0x100000~0x101FFF番地のフラッシュROMエリアに対して書き込み操作を行わない

GCCを使用している場合は、リンカスクリプトファイルにてROMとして予約しているアドレスを修正すれば大抵のプログラムは動作するはずですが、それでも動作しない場合は広範な修正が必要になる場合もあります。
また、ユーザプログラムにおいて不用意にREMAPを発行すると、0番地に割り当てられるメモリが変わってしまいます。ブートローダにて0番地は常時SRAMに割り当てられていますので、通常はREMAPを行わないでください。

Page Top

注意事項 anchor.png

  • ブートローダ自身は単純なローダに過ぎませんので、GDB等のデバッガとの接続は考慮されていません。
  • Ver2.5よりも前とそれ以後ではコマンドモードへの入り方が異なります。
  • 2009年6月以降に出荷されるAT91SAM7S256, AT91SAM7S512, AT91SAM7X512マイコンボードにおいては、USB接続のブートローダが書き込まれます。
  • 2009年6月以降に出荷されるAT91SAM7S32マイコンボードにおいては、DBGU接続(RS232C)のブートローダが書き込まれます。
  • 2009年6月以降に出荷されたVer.2.0のブートローダが書き込まれたAT91SAM7マイコンボードシリーズではLOCKEビットがONに設定されています。
    ブートローダの更新や、ブートローダを使用せずにSAM-BAやJTAGを利用する場合は、ハード的にマイコンの消去操作を行う必要があります。
Page Top

使用方法 anchor.png

SIMPLE TERMからのキー入力にて各種機能を実行します。

Page Top

ブートローダの動作フロー anchor.png

SAM7BL_BOOT_FLOW.png

ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。
ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、ハードリセット(リセットボタンの押下)を行います。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。
また、ハードリセット以外の条件(WDTやソフトリセット等)でリセットされた場合は、再度ユーザプログラムへ実行が遷移します。

Page Top

コマンド anchor.png

Page Top
ヘルプ '?' anchor.png

コマンドのリストを表示します。

>?
--< TIMSAM7 USB Ver.2.5 by BestTechnology >--
 [w]UPLOAD [g]BOOT [x]REBOOT [d]DUMP
 [i]FLASH INFO [e]ERASE [n]SET NVM BIT [c]CLER NVM BIT
 [l]SET LOCK BIT [u]CLEAR LOCK BIT
>
Page Top
書き込み 'w' anchor.png

ホストからフラッシュROMへファイルを転送及び書き込みを行います。

>w
 START UPLOAD...
 ARE YOU SURE? (Y/N)

ここでyを入力すると転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEMプロトコルで転送を開始させます。
成功すれば<SUCCESS>、失敗すると<ERROR>と表示されます。

>w
 START UPLOAD...
 ARE YOU SURE? (Y/N) y
 <SUCCESS>
>

本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。

Page Top
実行 'g' anchor.png

フラッシュROMに書き込まれたユーザプログラムを実行します。

>g
 GO !!

ユーザプログラムが書き込まれていなければ、

>g
 FLASH IS EMPTY
>

というメッセージを表示してコマンドモードに戻ります。

Page Top
ソフトリセット 'x' anchor.png

マイコンをソフトリセットします。ユーザプログラムが既に書き込まれている場合は、リセットから復帰後ユーザプログラムが実行されます。

Page Top
メモリダンプ 'd' anchor.png

メモリを16進数でダンプ表示します。スタートアドレスを入力せずにエンターキーのみを押すと、ブートローダ内で想定しているユーザープログラムが保存されているアドレスの先頭を指定したと見なします。

>d
 START ADDRESS:$00102000
 00102000:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102010:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102020:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102030:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102040:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102050:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102060:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102070:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102080:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 00102090:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 001020A0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 001020B0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 001020C0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 001020D0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 001020E0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
 001020F0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
---([u]up [d]down [ESC]exit)---
Page Top
消去 'e' anchor.png

フラッシュROMのユーザプログラムエリアを消去します。

>e
 ERASE ALL FLASH
 ARE YOU SURE? (Y/N)

ここでyを入力すると消去を開始します。

>e
 ERASE ALL FLASH
 ARE YOU SURE? (Y/N) y..........................................
 COMPLETED.
>

書き込まれているユーザプログラムのサイズやデバイスのメモリ容量によって消去時間は異なります。

Page Top
フラッシュステータス 'i' anchor.png

FSRレジスタ及びユーザプログラムの書き込み状況を表示します。ユーザプログラムが空の場合は、FLASH IS EMPTYと表示されます。

>i
 MC.EFC0.FSR:$00000701
 MC.EFC1.FSR:$00000001
 FLASH IS EMPTY

ユーザプログラムが書き込まれているとEMPTYの表示はなされません。

>i
 MC.EFC0.FSR:$00000701
 MC.EFC1.FSR:$00000001

なお、デバイスによってFSRレジスタ数や設定値は異なります。

Page Top
GPNVMビットセット 'n' anchor.png

GPNVMのビット0~2をセットします。
ビット0がセットされているとBOD(Brownout detector)がイネーブルになり、ビット1がセットされているとBODがイネーブル時に低電圧を検出するとリセットが発行されます。通常は電源印加直後の電圧の立ち上がり時等における低電圧によるシステムの不安定状態を防ぐために、両ビット共にセットする事を推奨します。
AT91SAM7Xシリーズにおいては追加でビット2が設定対象となり、本ビットは常にセットされている必要があります。クリアされた状態で再起動をかけると、常にSAM-BAモードに遷移してしまいます。

>n
 SET GPNVM Bit
 SELECT BIT NO.(0..2) 0
 COMPLETED.
>

セット・クリアの状態はiコマンドでEFCレジスタの値で確認できます。

  :idea:ビットのセット・クリア時にデバイスによってはマイコンがリセットする場合があります。
リセットされても特に問題はありません。

  :idea:ビットのセット・クリアの回数を100回未満に制限されているデバイスがあります。
詳しくは各チップのデータシートを参照するとして、必要以上に本操作を繰り返さない事を強く推奨します。

Page Top
GPNVMビットクリア 'c' anchor.png

GPNVMのビット0~2をクリアします。

Page Top
ロックビットセット 'S' anchor.png

表示されるメニューには無いコマンドです。大文字の'S'でLOCKEビットをセットします。LOCKEビットがセットされているとJTAGからのアクセスとTST端子によるSAM-BAモードへの移行が抑止されます。
LOCKEビットはマイコンのERASE端子を使用する他にクリアする方法は無く、同時に内蔵フラッシュROMの情報やNVMの設定もデバイスの出荷時状態に初期化されます。

>S
 SET SECURITY Bit
 ARE YOU SURE? (Y/N) y
>

Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2018-03-11 (Sun) 10:56:28 (JST) (556d)