1: 2009-07-06 (月) 15:08:37 takaboo[5] [6] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | 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_BL.BATを実行します。 | ||
+ | ターゲットを大文字で入力(S512,S256,S128,S64,S32,X512,X256,X128): | ||
+ | AT91SAM7S256のUSBポートを使用したブートローダをコンパイルするものとするならば、ターゲット名として''S256''と入力しエンターキーを押します。 | ||
+ | ターゲットを大文字で入力(S512,S256,S128,S64,S32,X512,X256,X128): S256 | ||
+ | 使用するコミュニケーションポートを大文字で入力(DBGU,DBGU2,US0,US1,USB): | ||
+ | 次に、使用するコンソールポートに応じてポート名を入力します。USBポートを使用しますので、''USB''と入力しエンターキーを押します。 | ||
+ | ターゲットを大文字で入力(S512,S256,S128,S64,S32,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 | ||
+ | 7870 0 1944 9814 2656 ./out/AT91SAM7S256_USB_BOOTLOADER.elf | ||
+ | 1 個のファイルをコピーしました。 | ||
+ | COMPLIE OK !!! | ||
+ | JTAGにてブートプログラムを書き込みます エンターキーを押して下さい | ||
+ | エラー等が無ければ COMPILE OK !!! のメッセージが表示され、ブートローダのコンパイルが完了します。このままエンターを押すとTINY JTAG-ICE2とOpenOCDを使って書き込み処理を行います。~ | ||
+ | |||
+ | JTAGにてブートプログラムを書き込みます エンターキーを押して下さい | ||
+ | Open On-Chip Debugger 0.2.0-in-development (2009-06-19-17:40) svn:2290 | ||
+ | |||
+ | |||
+ | BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS | ||
+ | |||
+ | |||
+ | $URL: svn://svn.berlios.de/openocd/trunk/src/openocd.c $ | ||
+ | OLD SYNTAX: DEPRECATED - translating to new syntax | ||
+ | jtag newtap CHIP TAP -irlen 4 -ircapture 0x1 -irvalue 0xf | ||
+ | Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5) | ||
+ | jtag newtap stm32 cortexm3 ....., thus creating the tap: "stm32.cortexm3" | ||
+ | jtag newtap stm32 boundary ....., and the tap: "stm32.boundary" | ||
+ | And then refer to the taps by the dotted name. | ||
+ | NEW COMMAND: | ||
+ | 1000 kHz | ||
+ | Info : device: 4 | ||
+ | Info : deviceID: 67330064 | ||
+ | Info : SerialNumber: 12345678A | ||
+ | Info : Description: TINY JTAG-ICE A | ||
+ | Info : JTAG tap: chip0.tap0 tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3) | ||
+ | Info : JTAG tap: chip0.tap0 tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3) | ||
+ | Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset. | ||
+ | target state: halted | ||
+ | target halted in ARM state due to debug-request, current mode: Supervisor cpsr: 0x20000093 pc: 0x000000a4 | ||
+ | requesting target halt and executing a soft reset | ||
+ | target state: halted | ||
+ | target halted in ARM state due to debug-request, current mode: Supervisor cpsr: 0x200000d3 pc: 0x00000000 | ||
+ | cleared protection for sectors 0 through 7 on flash bank 0 | ||
+ | cleared protection for sectors 0 through 15 on flash bank 0 | ||
+ | Error: failed setting protection for areas 0 to 31 (-901) | ||
+ | dcc downloads are enabled | ||
+ | auto erase enabled | ||
+ | Info : Padding image section 0 with 0 bytes | ||
+ | Info : Padding image section 1 with 2 bytes | ||
+ | wrote 7872 byte from file ./out/termsam7.elf in 3.114000s (2.468690 kb/s) | ||
+ | verified 7870 bytes in 0.356000s | ||
+ | gpnvm bit '#2' is out of bounds for target AT91SAM7S512 | ||
+ | Info : JTAG tap: chip0.tap0 tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3) | ||
+ | Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset. | ||
+ | target state: halted | ||
+ | target halted in ARM state due to debug-request, current mode: Supervisor cpsr: 0x400000d3 pc: 0x00000000 | ||
+ | ■■■■■■ | ||
+ | 成功!! | ||
+ | ■■■■■■ | ||
+ | 続行するには何かキーを押してください . . . | ||
+ | |||
+ | JTAGで接続する環境が無い場合は、マイコンボードをSAM-BAモードにしFLASH WRITERを使用してoutフォルダから手動でコンパイル済みファイルを選択して書き込みます。 | ||
+ | #ref(fw_sambamode.png,100%) | ||
+ | コンパイル済みのファイルは、AT91SAM7[選択したターゲット]_[選択したポート]_BOOTLOADER.bin という名称で作られ、例えばAT91SAM7S256マイコンボードをUSBで使用する場合は AT91SAM7S256_USB_BOOTLOADER.bin を選択します。 | ||
+ | |||
+ | ***ソースのダウンロード [#DOWNLOAD] | ||
+ | #ref(SAM7_BL_2.0.ZIP) | ||
+ | 公開日: 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等のデバッガとの接続は考慮されていません。 | ||
+ | -2009年6月以降に出荷されるAT91SAM7S256, AT91SAM7S512, AT91SAM7X512マイコンボードにおいては、USB接続のブートローダが書き込まれます。 | ||
+ | -2009年6月以降に出荷されるAT91SAM7S32マイコンボードにおいては、DBGU接続(RS232C)のブートローダが書き込まれます。 | ||
+ | -2009年6月以降に出荷されるAT91SAM7マイコンボードシリーズではLOCKEビットがONに設定されています。~ | ||
+ | ブートローダの更新や、ブートローダを使用せずにSAM-BAやJTAGを利用する場合は、ハード的にマイコンの消去操作を行う必要があります。 | ||
+ | |||
+ | **使用方法 [#h2390267] | ||
+ | [[SIMPLE TERM>GDL#STERM]]からのキー入力にて各種機能を実行します。 | ||
+ | ***ブートローダの動作フロー [#BOOTFLOW] | ||
+ | ブートローダをコンパイルした際に選択したコンソールポートにより、動作が異なってきます。~ | ||
+ | -USBを選択 | ||
+ | #ref(SAM7SBL_UART_BOOT_FLOW.png,100%) | ||
+ | マイコンがリセットされるとユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。~ | ||
+ | ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、リセット直後にPCとマイコンボードをUSBケーブルで接続し、PC側でUSB仮想シリアルドライバを活性化させる必要があります。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。~ | ||
+ | マイコンボードをUSBのバスパワーで駆動させている状態であれば、ユーザプログラムの状態に関わらずマイコンをリセットした直後にコマンドモードになります。 | ||
+ | -DBGU, US0, US1を選択 | ||
+ | #ref(SAM7SBL_USB_BOOT_FLOW.png,100%) | ||
+ | マイコンがリセットされるとユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。~ | ||
+ | ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、リセット直後に'!'を素早く3回入力する必要があります。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。 | ||
+ | |||
+ | ***コマンド [#sb3ccc22] | ||
+ | ****ヘルプ 'h' [#w7b1ad65] | ||
+ | コマンドのリストを表示します。 | ||
+ | >h | ||
+ | --< TIMSAM7 Ver2.0 by BestTechnology >-- | ||
+ | [w]:UPLOAD [g]:BOOT [x]:REBOOT | ||
+ | [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] | ||
+ | マイコンを再起動します。 | ||
+ | ****消去 '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 | ||
+ | | :idea:|ビットのセット・クリア時にデバイスによってはマイコンがリセットする場合があります。&br;リセットされても特に問題はありません。| | ||
+ | |||
+ | |CENTER:BGCOLOR(red):||c | ||
+ | | :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 | ||
+ | > | ||
+ | なお、出荷時に本ブートローダが書き込まれているマイコンボードにおいては、全てLOCKEをセットしています。 | ||
+ | |||
+ | **その他 [#p5a7b3bd] | ||
+ | ユーザプログラムにてWDTを使用してシステムをりブートさせると、必ずブートローダのコマンドモードになります。 |
(This host) = http://www.besttechnology.co.jp