AT91SAM7X512マイコンボードはARM7TDMIコアを内蔵したAtmel社製AT91SAM7X512を搭載したマイコンボードです。 ボード上にはUSBコネクタ、3.3Vレギュレータ、RS232Cポート、CAN I/F、PHY等を装備し、外部端子にはマイコンのほぼ全ての端子が割り当てられています。
商品番号 | BTC095 |
PCBリビジョン | E054C (4層) |
CPU | Microchip AT91SAM7X512 |
メモリ | フラッシュROM: 512kbyte SRAM: 128kbyte オンボードSPI接続DataFlash: 8Mbyte |
クロック | CPU外部クロック: 18.432MHz (内部動作クロックはCKGR及びPMCによりプログラマブル) PHY外部クロック: 25MHz |
通信機能 | RS232Cレベル変換装備 (DBGUのみ) |
動作温度 | 0~+50℃ |
動作電圧 | 外部:DC3.8~20V USBもしくは外部端子にて供給可能(外部端子優先) 内部:DC3.3V(I/O), DC1.8V(CORE) |
搭載機能 | イーサネットPHY(KS8001L), SPI接続 64Mbit DataFlash(AT45DB642D-CNU), CANトランシーバ(SN65HVD232D), RS232Cラインドライバ, 3.3V/300mA出力リニアレギュレータ |
消費電流 | 40mA (MAX) |
寸法 | W36.8×D52.0mm (参考) |
コネクタ等 | 40ピン端子×2, 10ピン端子×1, RS232C通信用ピンヘッダ×1, リセットボタン×1, 電源モニタLED, PHYステータスLED, miniB USBコネクタ×1 |
付属品 | USBケーブル×1, 2列ピンヘッダ |
環境配慮 | RoHS準拠, 鉛フリー半田 |
No. | 端子名 | No. | 端子名 |
1 | TDI | 2 | PB16 |
3 | PB4 | 4 | PA23 |
5 | PA24 | 6 | NRST |
7 | TST | 8 | PA25 |
9 | PA26 | 10 | PB18 |
11 | PB19 | 12 | PB20 |
13 | PB21 | 14 | PB22 |
15 | PB23 | 16 | PB24 |
17 | PB25 | 18 | PB26 |
19 | PA27 | 20 | PA28 |
21 | PA29 | 22 | TDO |
23 | JTAGSEL | 24 | TMS |
25 | TCK | 26 | PA30 |
27 | PA0 | 28 | PA1 |
29 | PA3 | 30 | PA2 |
31 | PA4 | 32 | PA5 |
33 | PA6 | 34 | PA7 |
35 | ERASE | 36 | DDM |
37 | VIN | 38 | DDP |
39 | GND | 40 | 3.3V |
No. | 端子名 | No. | 端子名 |
1 | PA22 | 2 | PA21 |
3 | PA20 | 4 | PA19 |
5 | PB11 | 6 | PB10 |
7 | PB3 | 8 | PB2 |
9 | BP1 | 10 | PB0 |
11 | PB12 | 12 | PB7 |
13 | PB17 | 14 | PB15 |
15 | PB5 | 16 | PB6 |
17 | PB13 | 18 | PB14 |
19 | PB8 | 20 | PB9 |
21 | PA18 | 22 | PA17 |
23 | PA16 | 24 | PA15 |
25 | PA14 | 26 | PA13 |
27 | PA12 | 28 | PA11 |
29 | PA10 | 30 | PA9 |
31 | PA8 | 32 | PB30 |
33 | PB29 | 34 | PB28 |
35 | PB27 | 36 | AD7 |
37 | AD6 | 38 | AD5 |
39 | AD4 | 40 | ADVREF |
No. | 端子名 | No. | 端子名 |
1 | CANH | 2 | CANL |
3 | GND | 4 | 3.3V |
5 | RD+ | 6 | RD- |
7 | AVDD | 8 | GND |
9 | TD+ | 10 | TD- |
No. | 端子名 | I/O |
1 | TX (RS232C←PA28) | O |
2 | GND | - |
3 | RX (RS232C→PA27) | I |
本ボードには出力DC3.3V/300mAの2入力レギュレータ(U1:LT1579CS8)が搭載されています。2入力の一方はCN5から入力されるUSBバスパワー、もう一方はCN1-37(VIN)端子に接続されており、CN1-37(VIN)からの入力が優先されます。
U1で作られたDC3.3VはCN1-40(VCC)から取り出すことが可能ですが、負荷電流は本ボードの駆動電力も含めて最大300mAを超えてはなりません。
ボード上のレギュレータを使用しない場合は、JP1を短絡した上で、CN1-37(VCC)端子からDC3.3Vを供給します。
CN4にはマイコンのDBGU端子をRS232Cレベルに変換した信号が接続されます。主にPCのCOMポートと接続し、プログラムの転送やデバッグに使用します。
接続するホストに応じて以下の通信ケーブルないしI/Fがオプションで使用できます。
BTE075 USB-RS232Cケーブル
BTE060 RS232C通信ケーブル + BTE061D USBシリアル変換ケーブル
BTE067B TINY JTAG-ICE2 (RS232Cケーブルは自作する必要あり)
CN5にはマイコンのUDP(USB Device Port)に関連する端子が接続されています。USBケーブルによりPCからUSBバスパワーが供給されます。
なお、SAM-BAやUDPを制御するプログラムを使用しない限り、PCとUSBケーブルで接続してもUSBデバイスとして使用できません。また、USBホストとしては機能しません。
PB1にはマイコンのNRST端子が接続されています。押下されるとNRST端子がGNDに接続されます。
なお、マイコンのリセットコントローラ適宜設定しない限り、NRST端子はチップリセットを目的として使用することはできません。
NRST信号はUSBのDP信号プルアップの制御と、PHYのリセットを兼ねています。USBデバイスとして活性化している状態でPB1を押すと、ホストはUSBデバイスが外されたと認識します。また、PHYも同時にリセットされます。これは強制的に手動で両I/Fのリセットがかけられてしまう事を意味します。
GCC Developer Liteに含まれるSAM7X用のライブラリでは、NRST端子をファームウェアから出力端子に構成してソフトウェア的に外部回路をリセットさせる事としています。
CN3にはCAN I/F及びイーサネットPHYの信号が接続されます。
いずれも高速なネットワークなため、安定した通信を保証するには外部回路における配線ルート等の十分な検証が必要です。
「基本パック」と「ARMパック」をダウンロードしてインストールしてください。なおARMパックインストールの際に表示されるコンポーネントの選択画面では「AT91SAM7Xシリーズでのみ使用」を選択してください。
使用されるコンポーネントを簡単に紹介します。
ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。
ターゲットのフラッシュROM等へコンパイルされたプログラムをSAM-BAないしCOMポート経由で書き込む。
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
汎用シリアルターミナル。簡易的なTELNETクライアントとしても機能する。
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
ARMコア向けC/C++言語向けのコンパイラ。
Atmel社提供のSAM-BA用USBドライバと、弊社提供のUSB CDCエミュレーションドライバ。
TINY JTAG-ICE2の制御を行うデーモン。JTAGを使用する場合は全て本デーモンを仲介する。
マイコンの内蔵ペリフェラルを定義したヘッダファイルやUARTを簡便に使うためのAPI、USBをシリアルポートとして使用するためのAPI、GDBにてデバッグする際に使用する初期化ファイル、シリーズ毎に異なるメモリマップを定義したリンカスクリプトファイル、スタートアップルーチンを含む。基本的にコンパイル済みライブラリとしてソースとリンクして使用する。
GCC Developer Liteでは本マイコン用の設定を複数備えています。
例えば、ARMコアの学習・組み込み向けCコンパイラの習熟・マイコン内蔵ペリフェラルの機能を熟知するといった段階ではJTAGを使ってSRAM上でデバッグし、慣れてきたらブートローダを経由してprintfデバッグ、最終的に製品等としてリリースして完成させる時はフラッシュROMに、といった段階を踏む場合でもGCC Developer Liteのコンパイルオプションの設定リストから選択し直すだけで設定が完了します。
以下に本マイコンボードに対応した設定リストの一覧とその設定における機能の違いを紹介します。
ビルドするとブートローダにてマイコンのフラッシュROMへ転送するための.bin(バイナリ)ファイルが作られる。
プログラムのスタートアドレスが0x102000に設定される以外は、フラッシュROM上で動作するプログラムと基本的に相違は無い。
ビルドが成功すると、STERM.exe(SIMPLE TERM)の起動を促される。
ビルドするとブートローダにてマイコンのフラッシュROMへ転送するための.bin(バイナリ)ファイルが作られる。
Thumb 16ビット圧縮命令を出力するため、ARM modeよりも出力コードサイズが小さくなる。
プログラムのスタートアドレスが0x102000に設定される以外は、フラッシュROM上で動作するプログラムと基本的に相違は無い。
ビルドが成功すると、STERM.exe(SIMPLE TERM)の起動を促される。
ビルドするとOpenOCDにてマイコンのSRAM上で動作させるための.exe(実態はelf)ファイルが作られる。
プログラムのスタートアドレスは0x200000(SRAMの先頭アドレス)に設定される。
マイコンにはSRAMからプログラムを起動させる機能が無いためJTAGによる制御が必須。
ビルドが成功すると、OpenOCDを使用してSRAMへの書き込み・実行を行わせるため、仲介役のFW.exe(FLASH WRITER)の起動を促される。
ビルドするとOpenOCDにてマイコンのSRAM上で動作させるための.exe(実態はelf)ファイルが作られる。
Thumb 16ビット圧縮命令を出力するため、ARM modeよりも出力コードサイズが小さくなる。
プログラムのスタートアドレスは0x200000(SRAMの先頭アドレス)に設定される。
マイコンにはSRAMからプログラムを起動させる機能が無いためJTAGによる制御が必須。
ビルドが成功すると、openOCDを使用してSRAMへの書き込み・実行を行わせるため、仲介役のFW.exe(FLASH WRITER)の起動を促される。
ビルドするとOpenOCDにてマイコンのSRAM上で動作させるための.exe(実態はelf)ファイルが作られる。
ビルドが成功すると、OpenOCDを使用してフラッシュROMへの書き込み・実行を行わせるため、仲介役のFW.exe(FLASH WRITER)の起動を促される。
ビルドするとOpenOCDにてマイコンのSRAM上で動作させるための.exe(実態はelf)ファイルが作られる。
Thumb 16ビット圧縮命令を出力するため、ARM modeよりも出力コードサイズが小さくなる。
ビルドが成功すると、OpenOCDを使用してフラッシュROMへの書き込み・実行を行わせるため、仲介役のFW.exe(FLASH WRITER)の起動を促される。
マイコンのフラッシュROMには出荷時に弊社オリジナルのブートローダが書き込まれています。
ブートローダはJTAGやその他の特殊なI/Fを使用せずとも、USBないしCOMポートを使用してマイコンのプログラム書き換えや操作を行う事が出来ます。
ブートローダを使用して動作するプログラムが構成できる設定リストは以下の通りで、これ以外の設定リストで構成されたプログラムをブートローダで転送しても動作しません。
マイコンボードは出荷時にUSBをコンソールとして構成されたブートローダが書き込まれており、PCとマイコンボードをUSBケーブルで接続する必要があります。
USBを仮想シリアルポートとして認識させるためのPC用デバイスドライバは、GCC Developer Liteをインストールした際にWindowsのシステムフォルダにコピーされます。USBケーブルでマイコンボードとPCを接続するとデバイスドライバを要求されますが、自動検索させる事で自動的にインストールが行われます。
インストール後、新しいCOMポートがWindowsのデバイスとして追加され、SIMPLE TERMから該当するCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「AT91 USB to Serial Converter」が表示されたポートを選択)しオープンするとブートローダの各種コマンドが使用可能となります。その他の設定は以下の通りです。
Baudrate:ここでは意味を持たないので何でも構わない Databits:8 Stopbits:1 Parity:Non Flow Control:Non Protocol:Xmodem
ブートローダの詳細及びコマンドモードの使い方等はこちら。
先の設定リストでソースプログラムをコンパイルし成功するとSTERM.exe(SIMPLE TERM)の起動を促されます。「OK」を押してSIMPLE TERMを起動すると、特殊な設定が追加されてSIMPLE TERMが起動します。
マイコンボードがブートローダのコマンドモードであれば、「スクリプト実行[STERM SAM7]」をクリックするだけで転送するファイルを手動で選択する事無く転送にかかる処理が全て自動的に行われます。
本機能により、手動で間違ったファイルを選択して転送してしまったり、転送不可能な状態で転送をしてしまうといったミスを軽減する事ができます。
USB版ブートローダにてユーザープログラムが書き込まれているマイコンボードを、デバイスドライバがインストールされていないPCのUSBポートに接続してはなりません。 ブートローダは起動直後から5秒以内にデバイスドライバが活性化しないと、USBポートを非活性化した後にユーザプログラムに実行を遷移してしまうため、OSによってはその間にデバイスドライバのインストール処理が自動的にキャンセルされてしまいます。 初めてUSB版ブートローダを使用するためにPCにデバイスドライバをインストールさせるには、予めデバイスドライバがインストールされたPCでユーザプログラムを消去したマイコンボードを使用します。 |
様々なマイコンに対応した転送ツールです。本マイコンにおいては2種類の転送方法に対応します。
どちらを選択するかはユーザに委ねられます。CPUコアやプログラムの詳細なデバッグも行うついでにメモリの書き換えを行うという場合のみOpenOCD、フラッシュROMの書き換えさえ出来ればよいのであればSAM-BAを選択するのが一般的です。
FLASH WRITERを使用して動作するプログラムが構成できる設定リストは以下の通りで、これ以外の設定リストで構成さAれたプログラムをFLASH WRITERで転送しても動作しません。
OpenOCDを経由してSRAMに転送実行。
OpenOCDを経由してSRAMに転送実行。
OpenOCDを経由してフラッシュROMに転送実行。コンパイルオプションを変更すればSAM-BAを経由して書き込む事も可能。
OpenOCDを経由してフラッシュROMに転送実行。コンパイルオプションを変更すればSAM-BAを経由して書き込む事も可能。
LOCKEビットがONの場合ここでの操作が抑止されるため、予めLOCKEビットをOFFにした上で操作する必要があります。 |
Atmel社独自のマイコンに予め備わったブートローダの通信プロトコルに従ってフラッシュROMの書き換えを行います。対応するポートはDBGU(RS232C CN4)とUDP(USB CN5)となります。
マイコンをSAM-BAモードに移行させるには、その都度以下の操作を行います。
USB経由でSAM-BAを使用する場合は専用のデバイスドライバが必要です。PC用デバイスドライバは、GCC Developer Liteをインストールした際にWindowsのシステムフォルダにコピーされます。マイコンをSAM-BAモードに設定した後、USBケーブルでマイコンボードとPCを接続するとデバイスドライバを要求されますが、自動検索させる事で自動的にインストールが行われます。間違ったデバイスがインストールされるケース(GPSレシーバ等)もある様なので、その場合は手動で「atm6124.Sys ATMEL AT91xxxxx Test Board」を選択し直す必要があります。
準備が整っていればFLASH WRITERのPORTに列挙されますので、USBの場合は「\usb\ARM0 (SAM-BA)」を選択します。
マイコンボードのRS232Cコネクタ経由でSAM-BAを使用する場合は、PCとRS232Cケーブルで接続した上で適宜COMポートを選択します。その際にマイコンボードのUSBコネクタには何も接続してはなりません。
書き込みが正常終了すると、SAM-BAモードを抜けて書き込まれたプログラムを即時実行します。再度SAM-BAで書き込む際は、もう一度電源を切ってモードを切り替えるフローを1.から実行する必要があります。
AT91SAM7XはGPNVMの2ビット目の状態によって起動時のメモリマップが変わります。 クリアされていると内蔵ROM(SAM-BAブートファーム)、セットされていると内蔵フラッシュROMが0番地にマッピングされます。チップの消去を行う事でGPNVMの2ビット目がクリアされ、内蔵ROMに書き込まれているSAM-BAブートファームウェアによりSAM-BAモードに移行します。 また、FLASH WRITERはユーザプログラムの書き込み終えた後にGPNVMの2ビット目をセットし、マイコンの再起動後は0番地へ内蔵フラッシュROMがマッピングされる様に構成します。 |
TINY JTAG-ICE2でマイコンのJTAG I/FとPCを接続し、OpenOCDを仲介してマイコンのフラッシュROMないしSRAMの書き換えを行います。
OpenOCDが起動している状態でFLASH WRITERのScanをクリックし、PORTのリストに現れる「OpenOCD (TELNET)」を選択します。
Write Script Fileはデバイス及び書き込むメモリの種類に応じて複数のファイルが存在します。ファイル名の先頭にat91sam7_が付加されているものが本マイコンボード用のファイルとなります。
これらスクリプトファイルはFLASH WRITERを自動起動させる設定がなされたコンパイラオプションにて予め指定されるので、通常はユーザが選択する必要はありません。
.binファイルをフラッシュROMに書き込んだ後、マイコンを再起動
.exe(elf)ファイルをフラッシュROMに書き込んだ後、マイコンを再起動
.binファイルをSRAMに書き込んだ後、SRAMの先頭アドレスから起動
.exe(elf)ファイルをSRAMに書き込んだ後、SRAMの先頭アドレスから起動
指定ファイルを無視して、フラッシュROMの消去とGPNVMを初期化
AT91SAM7シリーズ全般に対応させるため、デバイスやフラッシュROMのサイズによっては無効となるコマンドも含まれます。それによりエラーのログが表示される事がありますが、実害はありません。
作成したプログラムをマイコンのフラッシュROMに転送するには、一般に別途特殊なI/Fやハードウェアを必要とします。これらはチップベンダーの方針やその時代のトレンドで変わります。
ARMコアを内蔵したマイコンであれば大抵JTAG I/Fが備わっており、JTAG ICEでホストと接続する事でCPUコアの制御やメモリの操作を行う事ができます。
マイコンボードには直接JTAG I/Fに接続するコネクタが装備されていませんので、別途JTAG ICEと接続するコネクタを増設する必要があります。
TINY JTAG-ICE2と接続する場合も同様のコネクタが必要となります。
なお、CN6にはJTAG I/F及び電源端子がまとめて接続されています。
2009年6月以降に出荷されるマイコンボードは、ブートローダおよびユーザプログラムの不用意な消去から保護する目的でNVMのLOCKEビットをONに設定されています。本設定によりSAM-BAモード移行の操作と、JTAG I/Fからのアクセスが全て制限されます。
ブートローダのアップデートや、ブートローダ以外の方法でプログラミングやデバッグを行う場合は、予め以下の操作でLOCKEビットをOFFにする必要があります。
若干煩雑ですが、本操作にてマイコンのNVMやフラッシュROMは製造初期状態に初期化され、SAM-BAやJTAG I/Fが使用可能になります。
GCC Developer Liteでは1つのソースプログラムのみを対象とするため、機能別にソースを分割して編集やコンパイルするといった使い方は出来ません(完全にできないという訳でもありません)。だからと言って全ての機能を一つのソースに記述する事は、プログラムの見通しが悪くなりバグの温床になりかねません。
そこで、複数のソースに分割する事無くある程度のソースプログラムサイズでコーディングするために、頻繁に使用されるであろう一部の機能が専用のライブラリとして提供されます。
GCC Developer Liteを標準的な環境のPCへインストールすると、「C:\Program Files\BestTech\GCC Developer Lite\TARGET\SAM7X」フォルダに必要なファイルがコピーされます。必要に応じて本フォルダを参照できますし、ユーザがソースを修正しライブラリを再構築する事も可能です。
C言語で作成したプログラムを実行させるために、アセンブラないしC言語で記述された必要最低限の初期化処理プログラムです。
boot_remap.s (スタートアップルーチン本体のソースファイル)
remap.c (REMAP処理用のソースファイル)
boot.o, boot_thumb.o (アセンブル済みオブジェクトファイル)
実行条件に応じたメモリの割り当てを記述したファイルです。コンパイル時にリンカが参照し、コードの最終的な配置が決定されます。
sam7x512_ram.x (SRAM上で実行させるリンカスクリプト)
sam7x512_rom.x (フラッシュROM上で実行させるリンカスクリプト)
sam7x512_rom_term.x (ブートローダを介して実行させるリンカスクリプト)
マイコンに内蔵された各種ペリフェラルが持つレジスタは、決められたメモリ上のアドレスに配置されています。それらレジスタをアドレスではなくレジスタ毎に決められた名称を使い、変数のようにアクセスするためのマクロ定義が記述されています。
AT91SAM7X.h (レジスタのマクロ定義)
AT91SAM7X_BITDEFINE.h (各レジスタのビット情報)
作成したプログラムの動作を確認を行う際に、マイコンのシリアルポートを使用する事を推奨しています。マイコンと文字によるコミュニケーション機能を用意する事で、レジスタの値やプログラムの進捗の把握、さらにはマイコンに対してPCから指令を与えるといった使い方が出来ます。
本マイコンには複数のシリアルポートが備わっており、制御方法も多種多様なため、それに応じてライブラリとして提供する通信用APIも多くなっています。
us.h (APIのプロトタイプ宣言を含むヘッダファイル)
dbgu~.c (DBGUポートをポーリングで使用するAPIのソース群)
dbgu2~.c (DBGUポートを割り込みで使用するAPIのソース群)
us0~.c (USART0ポートを割り込みで使用するAPIのソース群)
us1~.c (USART1ポートを割り込みで使用するAPIのソース群)
udp_serial~.c (UDPポートでシリアルエミュレーションを行うAPI群)
.\cdc_serialemu (UDPポートでシリアルエミュレーションを行うドライバソース)
煩雑なPIOの初期化を簡便に行うためのAPIです。Atmel社の提供するサンプルコードと互換性を持っています。
piocfg.h (APIのプロトタイプ宣言を含むヘッダファイル)
piocfg.c (APIのソースファイル)
IRQとFIQの各割り込みを制御するには、コンパイラに依存するコードが必要です。簡便のためAPIとして提供します。
vic.h (APIのプロトタイプ宣言を含むヘッダファイル)
vic.c (APIのソースファイル)
各APIとremap.cをコンパイルし、一つのライブラリファイルにアーカイブして提供します。
makelib.bat (APIをARMモードでコンパイルし、アーカイブするバッチ)
makelib_thumb.bat (APIをTHUMBモードでコンパイルし、アーカイブするバッチ)
libsam7x.a (makelib.batで作成されるライブラリファイル)
libsam7x_thumb.a (makelib_thumb.batで作成されるライブラリファイル)
こちらにて公開中。