ページへ戻る

− Links

 印刷 

AT91SAM7S​/X Bootloader のソース :: Besttechnology

knowledge:AT91SAM7S/X Bootloaderのソース

« Prev[3]  
TITLE:AT91SAM7S/X Bootloader
#norelated
#contents
**はじめに [#h3cf836e]
AT91SAM7S及びAT91SAM7Xマイコンボードシリーズに対応した弊社オリジナルブートローダです。~
マイコンに備わったUARTないしUSBを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。~
付属のバッチファイルにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。~
ファイルの送受信にはXMODMプロトコルを使用しますが、全てのXMODEMに対応したターミナルクライアントに対応するものではありません。
**基本仕様 [#c9bb99c4]
***適用コンパイラとコンパイル方法 [#kdc2554b]
弊社提供の[[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>http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=Atmel%20SAM-BA%20In-system%20Programmer]]を使用してoutフォルダから手動でコンパイル済みファイルを選択して書き込みます。
#ref(fw_sambamode.png,100%)
コンパイル済みのファイルは、AT91SAM7[選択したターゲット]_[選択したポート]_BOOTLOADER.bin という名称で作られ、例えばAT91SAM7S256マイコンボードをUSBで使用する場合は AT91SAM7S256_USB_BOOTLOADER.bin を選択します。

***ソース及びコンパイル済みバイナリのダウンロード [#DOWNLOAD]
#ref(SAM7_BL_2.7.ZIP)
バージョン: 2.7~
公開日: 2016/8/24~
更新内容:未リリース版GCC Developer Liteにてコンパイルできるよう調整~
USB選択時にXMODEME-1Kが正常動作しない不具合を修正~
RTTを使用した時間待ちルーチンが挙動が不安定なのでPITのインターバル割り込みで代用~
ターゲットとしてSAM7SE追加

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

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

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

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

#ref(SAM7_BL_2.0.ZIP)
バージョン: 2.0~
公開日: 2009/7/6

***メモリマップ [#u56703e7]
ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。即ちブートローダ自身のサイズが大きいと、ユーザが使用できるエリアが圧迫されてしまいます。~
現在リリースしているバージョンでは占有フラッシュROM領域が8kbyte以下である前提としているため、旧来のバージョンよりも機能が縮小されています。また、使用するコンソールポートによりコードサイズは大きく異なりますが、8kbyteの領域は予約されているものとします。
#ref(bl_memmap.png,100%)
ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x102000からフラッシュROMの最終番地までとなります。

***ユーザプログラム [#a1597f0a]
ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。
-起動アドレスが0x102000番地である
-0番地から割り当てられたSRAMの先頭へ動的にベクタを登録する操作をスタートアップルーチン等により行っている
-0x100000~0x101FFF番地のフラッシュROMエリアに対して書き込み操作を行わない

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

***注意事項 [#yd5c9d45]
-ブートローダ自身は単純なローダに過ぎませんので、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を利用する場合は、ハード的にマイコンの消去操作を行う必要があります。

**使用方法 [#h2390267]
[[SIMPLE TERM>GDL#STERM]]からのキー入力にて各種機能を実行します。
***ブートローダの動作フロー [#BOOTFLOW]
#ref(SAM7BL_BOOT_FLOW.png,100%)
ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。~
ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、ハードリセット(リセットボタンの押下)を行います。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。~
また、ハードリセット以外の条件(WDTやソフトリセット等)でリセットされた場合は、再度ユーザプログラムへ実行が遷移します。
***コマンド [#sb3ccc22]
****ヘルプ '?' [#w7b1ad65]
コマンドのリストを表示します。
 >?
 --< 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
 >

****書き込み 'w' [#k45de1c7]
ホストからフラッシュROMへファイルを転送及び書き込みを行います。
 >w
  START UPLOAD...
  ARE YOU SURE? (Y/N)
ここでyを入力すると転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEMプロトコルで転送を開始させます。~
成功すれば<SUCCESS>、失敗すると<ERROR>と表示されます。
 >w
  START UPLOAD...
  ARE YOU SURE? (Y/N) y
  <SUCCESS>
 >
本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。

****実行 'g' [#m0f19a34]
フラッシュROMに書き込まれたユーザプログラムを実行します。
 >g
  GO !!
ユーザプログラムが書き込まれていなければ、
 >g
  FLASH IS EMPTY
 >
というメッセージを表示してコマンドモードに戻ります。

****ソフトリセット 'x' [#j761c1f9]
マイコンをソフトリセットします。ユーザプログラムが既に書き込まれている場合は、リセットから復帰後ユーザプログラムが実行されます。
****メモリダンプ 'd' [#bddd3f34]
メモリを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)---

****消去 'e' [#p2f443e8]
フラッシュROMのユーザプログラムエリアを消去します。
 >e
  ERASE ALL FLASH
  ARE YOU SURE? (Y/N)
ここでyを入力すると消去を開始します。
 >e
  ERASE ALL FLASH
  ARE YOU SURE? (Y/N) y..........................................
  COMPLETED.
 >
書き込まれているユーザプログラムのサイズやデバイスのメモリ容量によって消去時間は異なります。

****フラッシュステータス 'i' [#k51f464b]
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ビットセット 'n' [#m3ce3a32]
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レジスタの値で確認できます。
|CENTER:BGCOLOR(red):||c
|&nbsp; :idea:|ビットのセット・クリア時にデバイスによってはマイコンがリセットする場合があります。&br;リセットされても特に問題はありません。|

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

****GPNVMビットクリア 'c' [#m7ee3137]
GPNVMのビット0~2をクリアします。
****ロックビットセット 'S' [#hb1d7978]
表示されるメニューには無いコマンドです。大文字の'S'でLOCKEビットをセットします。LOCKEビットがセットされているとJTAGからのアクセスとTST端子によるSAM-BAモードへの移行が抑止されます。~
LOCKEビットはマイコンのERASE端子を使用する他にクリアする方法は無く、同時に内蔵フラッシュROMの情報やNVMの設定もデバイスの出荷時状態に初期化されます。
 >S
  SET SECURITY Bit
  ARE YOU SURE? (Y/N) y
 >

« Prev[3]