AT91SAM7S及びAT91SAM7Xマイコンボードシリーズに対応した弊社オリジナルブートローダです。
マイコンに備わったUARTないしUSBを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。
付属のバッチファイルにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。
ファイルの送受信にはXMODMプロトコルを使用しますが、全てのXMODEMに対応したターミナルクライアントに対応するものではありません。
弊社提供の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フォルダから手動でコンパイル済みファイルを選択して書き込みます。
コンパイル済みのファイルは、AT91SAM7[選択したターゲット]_[選択したポート]_BOOTLOADER.bin という名称で作られ、例えばAT91SAM7S256マイコンボードをUSBで使用する場合は AT91SAM7S256_USB_BOOTLOADER.bin を選択します。
バージョン: 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
ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。即ちブートローダ自身のサイズが大きいと、ユーザが使用できるエリアが圧迫されてしまいます。
現在リリースしているバージョンでは占有フラッシュROM領域が8kbyte以下である前提としているため、旧来のバージョンよりも機能が縮小されています。また、使用するコンソールポートによりコードサイズは大きく異なりますが、8kbyteの領域は予約されているものとします。
ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x102000からフラッシュROMの最終番地までとなります。
ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。
GCCを使用している場合は、リンカスクリプトファイルにてROMとして予約しているアドレスを修正すれば大抵のプログラムは動作するはずですが、それでも動作しない場合は広範な修正が必要になる場合もあります。
また、ユーザプログラムにおいて不用意にREMAPを発行すると、0番地に割り当てられるメモリが変わってしまいます。ブートローダにて0番地は常時SRAMに割り当てられていますので、通常はREMAPを行わないでください。
SIMPLE TERMからのキー入力にて各種機能を実行します。
ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。
ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、ハードリセット(リセットボタンの押下)を行います。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。
また、ハードリセット以外の条件(WDTやソフトリセット等)でリセットされた場合は、再度ユーザプログラムへ実行が遷移します。
コマンドのリストを表示します。
>? --< 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 >
ホストからフラッシュROMへファイルを転送及び書き込みを行います。
>w START UPLOAD... ARE YOU SURE? (Y/N)
ここでyを入力すると転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEMプロトコルで転送を開始させます。
成功すれば<SUCCESS>、失敗すると<ERROR>と表示されます。
>w START UPLOAD... ARE YOU SURE? (Y/N) y <SUCCESS> >
本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。
フラッシュROMに書き込まれたユーザプログラムを実行します。
>g GO !!
ユーザプログラムが書き込まれていなければ、
>g FLASH IS EMPTY >
というメッセージを表示してコマンドモードに戻ります。
メモリを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)---
フラッシュROMのユーザプログラムエリアを消去します。
>e ERASE ALL FLASH ARE YOU SURE? (Y/N)
ここでyを入力すると消去を開始します。
>e ERASE ALL FLASH ARE YOU SURE? (Y/N) y.......................................... COMPLETED. >
書き込まれているユーザプログラムのサイズやデバイスのメモリ容量によって消去時間は異なります。
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レジスタ数や設定値は異なります。
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レジスタの値で確認できます。
ビットのセット・クリア時にデバイスによってはマイコンがリセットする場合があります。 リセットされても特に問題はありません。 |
ビットのセット・クリアの回数を100回未満に制限されているデバイスがあります。 詳しくは各チップのデータシートを参照するとして、必要以上に本操作を繰り返さない事を強く推奨します。 |