マイコン工作実験日記

Microcontroller を用いての工作、実験記録

SAM3の開発環境

2011-04-28 22:27:46 | SAM3
ようやくと製作を始めたSAM3ボードですが、きょうはソフトの開発環境について書いておくことにします。これまではほとんどのプロジェクトをLinux上でGCCを使ってコンパイルしていました(実際にはXPをホストとするVMWareを使い、LinuxをゲストOSとして使用)。また、RTOSとしてはTOPPERS/JSPを使っており、昨年からSAM3Uで実験的にASPを使っています。今回のSAM7Sを使ったドッチーモジャケットも、最初は (VMWare上の)LinuxとTOPPERS/ASPで作っていたのですが、途中から開発環境をRowleyのCrossWorks for ARMに引っ越しています。

ちまたではembed/LPCXpressoやSTM32が開発環境を含めて提供されていることから人気ですが、ATMELを中心に使っており時々はLPCやSTM32等にも浮気するかもしれないという嗜好を持つわたしとしては、ベンダー・ニュートラルな環境の方が便利です。CrossWorksは基本的にはgccベースなのですが、ATMELを含む各社のARM7,ARM9,Cortex-M3のCPUサポートが含まれる開発環境となっており、個人向けにPersonal License($150)が用意されているのが魅力です。じつはすでに昨年末に購入してあったのですが、3月からようやくと使い始めたような次第です。このCrossWorksですが、ライブラリの一部として、CTL (CrossWorks Tasking Library)というマルチタスクのライブラリが用意されています。そこで、今回はTOPPERSを使わずに、このCTLを使ってみています。RTOSとしての機能はかなり限定されている印象を受けるのですが、最低限必要な機能は備わっているので、TOPPERSで使っていたコードを、思ったよりも簡単に移植することができそうです。




SAM7Sで書いたコードを、順次書き換えてSAM3に持ってきています。いつものように、最初にUSB仮想シリアルのドライバを動かして、デバック用モニタを動かすとこまできました。CrossWorksではARMのDCC (Debug communication Channel)を使ってのデバック用メッセージの表示もできますので、シリアルを使ったデバック用メッセージ出力を使わずに済むのも助かります。

これまでIDEというやつをほとんど使ったことがなかったので、最初はちょっと戸惑いましたが、ようやくと慣れてきました。開発環境がレッツノートCF-T5という5年も前のノートPCなので、Eclipsは重くて耐えられなかったのですが、CorssWorksは使い物になります!!



JTAGにはATMELのSAM-ICEを使っています。これはSeggerのJ-LinkのOEM品です。J-Linkに比べると安く買えますが、ATMELのARMでしか使えないという制約があります。SAM-ICEはSAM-BAでも使えるので、ATMEL中心のわたしとしては持っていても損はないだろうということで購入したものです。もちろんCrossWorksでもJ-Linkはサポートされていますので、このSAM-ICEも利用可能です。そしてSAM-ICE(J-Link)とCrossWorksの両者ともにSWDにも対応しているので、Cortex-M3使用時にはSWDでのデバックが可能となっています。今のところはまだJTAGで使っていますが、最初動作が不安定でデバッガを使って実行を開始するとエラーが出たり、JTAGをコネクトしようとするとSAM-ICEはATMELのデバイスでしか使えませんというエラーが出たりして、しばらく悩んでいました。JTAG接続の設定の中にあるクロック速度のパラメータをためしに500KHzに設定したら安定して動くようになりました。もう少し早くしても大丈夫かもしれません。このあたりは、ボードの配線のまずさが影響しているのかもしれません。


いよいよSAM3Sを始める

2011-04-25 00:51:29 | SAM3
前回の記事にも書いたように、まだまだドッチーモ・ジャケットの開発途中なのですが、並行して新たなボードの製作を始めました。こちらのボードではW-SIMを搭載しないBluetooth専用として小型化することで、少しでも見栄えを良くして「トラ技オフ会」に持ち込むことを短期的な目標としていますが、それ以外にも次のような目的を持っています。
  1. 購入しただけで手をつけていなかったSAM3S4Aを使い、ようやくとSAM3Sの利用と勉強を本格化させること。
  2. Bluetooth専用として試作をおこない、その後プリント基板の製作まで進める。
  3. ドッチーモ実験ボードではCODECとしてAIC3253を使用したが、これをAIC3254に変更する。
ドッチーモジャケットも最終的にはSAM3SかSAM3Uに変更したいと考えているので、その準備も兼ねてARM7からCortex-M3に乗り換えです。コアは変わっても周辺機能には大きな違いはないので、SAM7S用に書いたコードは簡単にSAM3Sに移行できるはずです。



主要な部品の配置を終えましたが、まだLCDとデジタルマイクが載ってません。これらは別基板にして載せるつもりでいますが、具体的な方法はまだこれから検討しなければならないような状態だったりします。まずはマイコン廻りの最低限の配線だけは済ませて、なんとかSAM-BAでアクセスできるところまで漕ぎつけました。しばらくクリスタルのハンダ・ブリッジに気が付かずに、かなり時間消費してしまいました。メッシュ基板は電源とパスコンの配線が楽なので重宝するのですが、その半面VCCやGNDとの短絡も発生しやすくなるのがつらいところです。

使用しているマイコンは48ピンのSAM3S4Aです。SAM7Sと比べると、次のような点が非常に嬉しいです。
  • UDP(USB Device Port)がUSBプルアップ機能を内蔵しているので、GPIOを消費しない。
  • RTC内蔵なので、外付け不要。
  • PLL用の外付けRCが不要になった。
  • TWI(I2C)でPDC(DMA)が使えるようになった。
  • 12MHzのクリスタルが標準になったので、入手が用意。
SAM7では18.43MHzというボーレート生成向けの周波数が標準だったため秋葉でも安く買えなくて不便でしたが、今回は32KHz, 12MHzともに秋月で調達。RTCのための32KHzクリスタルを付けると、USARTでRTS/CTSが使えなくなってしまうのがちょと残念かな。

SAM3S4Aの上に配置されているのは32ピンのAIC3254。今回はアイテムラボの変換基板を使ってみました。AIC3253が24ピンだったので、パッケージは一回り大きくなりましたがコア電源用のLDOを内蔵しているので、わたしの用途では実質的な部品面積は小さくできます。最初からこちらを使っていれば良かったんですが。。。

CODECの上にはBluetoothのWT32がかぶさる予定で、ソケットだけ立てました。左上のソケットは20ピンのARM標準JTAGソケットですが、これも場所取るのでこの実験ボードでSWDを使うことを覚えて、プリント基板製作時にはこのJTAGソケットを取り去りたいと考えています。

SAM3UでASPを動かす - その2

2010-05-16 11:14:44 | SAM3
SAM3UでASPを起動した際の画面を再掲しておきます。



バナーのメッセージは全て正しく表示されているので、タスクが起動される前の初期化で使用されるシリアルポートへの出力は正しく動いています。main_taskの始めで出力されるべきメッセージも正しく表示されています。よって、シリアルの割り込み処理もちゃんと動いているように思われます。ところが、そのあとで例外が発生してしまっているので、何回かシリアル割り込みが連続するか、あるいはタイマ割り込みが発生した時点で例外が発生しているように見受けられます。

そのように考えて、デバイス依存部のコードを見直したのですが、SAM7Sと大きく変わる箇所があるわけでもなし、問題となりそうな点は見つかりません。NVICやSystick関連はSTM32と同一でいいはずで、異なるのはベクタの番号関連の部分だけですし。同じCortex-M3でも、STM32とSAM3Uとで異なる点があるかどうかと考えて、ようやく重要なポイントがあることを思い出しました。STM32はもう2年も前にDWMのおまけになったくらいで、Cortex-M3コアを採用したデバイスとしては比較的初期に登場したものです。そのため、Corex-M3コアのレビジョン1が採用されています。それに対して、まだ発表されて日が浅いSAM3Uはレビジョン2が採用されています。レビジョンの違いいよって例外を生じる要因があるのではないかと推測して、「ARM Cortex-M3システム開発ガイド」の17章を確認すると、レビジョン2では例外処理時のスタックのアライメントがディフォルトで8バイトに設定されっているとの説明を見つけました。SAM3Uのマニュアルを確認すると、確かにCCRレジスタのSTKALIGNビットのディフォルト設定は8バイトになっています。レビジョン1では4バイトで動作するようなので、この点が影響しているようです。

そこでhardware_init_hook()に
    *AT91C_NVIC_CCR = 0;
の1行を追加してビルドし直してみると...



メデタクsample1がちゃんと動くようになりました!! LPC17xxのマニュアルも確認してみましたが、こちらもレビジョン2ですね。同じ箇所で引っ掛かるでしょう。

SAM3UでASPを動かす - その1

2010-05-13 23:25:47 | SAM3
せっかく購入したSAM3U-EKなので、TOPPERS/ASPを動かすことにしました。

ASPではすでにDWMのSTM32おまけ基板がターゲットとしてサポートされているので、こいつを基にすれば容易に移植が可能なはずです。ARM7やARM9では割り込みコントローラやタイマは各ベンダ毎にその仕様がことなっていましたが、Cortex-M3ではNVIC, SysTickとして共通になっていますので、この部分のコードは変更無しに使えるはずです。そのため、SAM3Uへの移植作業はその分簡単になるわけです。

実際の作業はまずはクロックの初期化のコードの準備からです。おおよその流れはSAM7やSAM9と同じなのですが、これまでとは変わった点がいくつかあります。
  • SAM7/SAM9ではリセット後はRC発振器の32KHzで動作開始。SAM3ではRC発振器の4MHzで動作開始。
  • SAM7ではPLLがひとつしかなかったが、SAM3UではUSB用にUTMI PLLが用意されている。
続いてピン・コンフィグですが、これはほぼSAM7,SAM9と同じ考え方。

SAM3Sだと、各PIOピンにはPeripheral A, B, Cの3つの機能を割り当てられるのですが、SAM3Uでは従来どうりAとBのふたつだけになっています。ただし、その選択の仕方が変更されています。これまでは、PIO_ASR、PIO_BSRでPeripheral A/Bの選択をおこない、PIO_ABSRでどちらが選択されているかを示すという方式でした。この方式では、PIO_ABSRはread-onlyのレジスタでした。ところが、SAM3UではPIO_ASR/PIO_BSRが廃止され、PIO_ABSRがread-writeとなって選択機能を持つようになっています。従来の方式は他のレジスタの構成との整合性もとれていたし、解りやすく使いやすいSAM7/SAM9の特徴のひとつを成していただけに、残念ではあります。SAM3UではSAM3Sとの整合性を意識して、このような方式に変更されているようです。SAM3Sでは機能選択のためにPIO_ABCDSR1とPIO_ABCDSR2のふたつのレジスタの操作が必要になっていますが、SAM3UではPIO_ABCDSRが0x0で固定であり、PIO_ABCDSR1がPIO_ABSRという別名で呼ばれていると考えることができるからです。

つづいては、ログ出力用のシリアルポートの設定。SAM7/SAM9ではDBGUの一部の機能でしたが、SAM3ではUARTになっています。位置づけと名前は変更されていますが、機能的には同等。実際のところ、ATMEL提供のヘッダファイルでは従来との互換性を意識してかDBGUという名前でレジスタ参照するようになっていました。

ざっと、こんな作業でASPのバナーが出力されるようになったのですが、その先で例外発生して止まってしまいました。↓



この原因調査でハマッテいたのですが、その件については次回の記事とすることにします。

待ち切れずに

2010-05-06 23:19:00 | SAM3
ずっとCortex-M3を始めようと思ってはいたのですが、SAM3Sがなかなか入手できずにいます。SAM3Sに時間がかかるのであれば、SAM3Uから使い始めようと考えたわけですが、こちらもちょうど次のロットが流れるまでの狭間にあるようで入手困難な模様。それにピン数が多いので自分でハンダづけするのも面倒です。そこで、手早くSAM3Uにとりかかるために、評価ボードを買ってしまいました。ATMELのSAM3U-EKです。



200USDとお値段は高いのですが、タッチパネル液晶はあるし、PSRAMやNANDフラッシュも載っているので、自分でこれだけのものを作ることを想像すると安いもんだと割りきれます。キットの中身は、ボードに加えて電源アダプタとUSBケーブルという一般的な構成です。CD-ROMはありません。あらかじめ焼いてあるデモがUSBメモリデバイスとして機能するので、NANDフラッシュに置いてあるファイルを読み取れるようになっています。



ボード上にはコーデックも実装されているので、マイク、ヘッドフォンをつなぐことができます。各ピンに対応するヘッダが用意され、基板上の回路と分離するためのジャンパもあるので、確かに評価用には便利に使えそうです。



実はこのボード自体はかれこれ1カ月ほど前に到着していたのですが、先月は封をきらずにいたような始末。連休は天気が良かったので毎日のように外出。結局まだあまり使っていません。SAM3Uを勉強しながら、ボチボチやっていこうかと思います。