2011年7月23日土曜日

EAGLEで設計した基板の製造をFusion PCB Serviceに頼む。(EAGLE用の一発生成CAMファイルや、ガーバデータの検証方法もあります。)

概要

LPCXpresso Clockを設計して早くも1週間が経ちました。
その間に色々な試行錯誤を経て若干の機能追加をしたりしました。


今回の基板(LPCXpresso Clock)の製造は、激安基板製造でお馴染みのFusion PCB Serviceに頼むことにしました。

EAGLE用の一発生成CAMファイル

EAGLEでガーバを出力する場合にはCAMプロセッサというものを使います。

まずは基板設計側の画面を表示します。


CAMプロセッサのアイコンをクリックします。


CAMプロセッサのダイアログが表示されます。
ここでCAMプロセッサに対する作業を定義したファイルを読み込みます。

ここでは、Funsion PCB Service向けのCAMプロセッサ用ファイルを自作してガーバ出力作業に使用することにしました。

名付けてFusionPCB-gerb274x-excellon.camです。


それでは読み込んでみます。


Fusion PCB Serviceでは生成したガーバデータの拡張子名が指定されています。


自作したCAMプロセッサ用ファイルには以下の特徴があります。
  • Fusion PCB Serviceで指定された拡張子名で自動生成してくれるようにしました。
  • CAMプロセッサジョブ名は、Fusion PCB Serviceで指定された名称にしてあります。
  • ドリルデータも一緒に生成するようにしました。


「Process」ボタンを押したら出力されたファイルをFusion PCB Serviceに書かれた内容で照合します。


ドリルラックファイルなどは不要なのかもしれませんが、添付しても問題ないでしょう。

出力されたデータを確かめる

この手の作業は、複数のツールを組み合わせたダブルチェックが欠かせません。
出力したデータファイルのみで(←ここ重要)期待した結果が得られるのか?が確認するポイントとなります。

私は工場に提出するガーバデータの確認をGraphiCode社GC-Prevueで行っています。
早速先ほど出力したデータファイルを開いてみましょう。

「ファイル」メニューから「インポート」を選択します。


GC-Prevueのインポート機能は非常に手軽で、Ctrlキーを押しながら所望のファイルを選択することで複数のファイルを一括読み込みすることができるようになっています。


インポートを実行するとファイル情報の検証が行われます。


その後、ツールの管理テーブルへのマッピングが表示されるようになっています。


最後にファイル毎のインポート結果の詳細が示されるダイアログが出現します。
ここで表示色や形式などを選択する事ができるようになっています。
この時点でお気に入りのツールと表示色をあわせると見やすいですね。


ガーバデータは複数のファイルで1つの基板の情報を管理しますので、「間違って同じデータを違う拡張子で送っちゃった!」とか、「全然関係ないデータを送っちゃったよ!」なんてあるかもしれません。

読み込み時に画面で確認しながら読み込めるGC-Prevueはそういう意味で非常に便利です。
例えば、シルクレイヤを見てみると以下のようになります。


こちらは部品面のガーバ。
ベタ面の描画が粗いように見えますが、拡大すればきちんと表示されます。


レイヤー毎の表示・非表示は画面左側のツリー表示の部分で切り換えることができます。


リソース

EAGLE用のFusion PCB Service向けCAMプロセッサファイルはこちらからダウンロードできます。
自己責任でお使い下さい。

まとめ

今回はEAGLEで設計した基板の製造をFusion PCB Serviceに頼む過程を示してみました。

2011年7月18日月曜日

LPCXpresso Clockの設計

概要

LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)は、参加者の方々が各自で取り組んでいることを持ち込んでモクモクと何かをしようという会合ですが、具体的なTODOがない方にとっては参加しづらいものです。

そこで、今回はLPCXpressoを手にしてみたけど具体的なTODOが思いつかないなぁという方でも参加しやすいような小道具を考えてみました。

名付けて「LPCXpresso Clock」です。
先の部会に参加される方の中で、希望される方に基板を無償で配布します。(先着5名様)

LPCXpresso Clockの特徴

LPCXpresso Clockの特徴を以下に示します。
  • リアルLPCXpressoサイズ。
  • 製作後は完全なスタンドアロン動作が可能。
  • 見やすい7セグメントLEDによるディジタル表示時計。
  • 4つの入力スイッチ付き。
  • LEDのダイナミック表示を学びたい方に最適。
LPCXpressoに合体させるだけでオリジナルクロックの出来上がりという算段です。
LPCXpressoを使って小規模組み込みシステム開発を楽しんだ後はリビングのおしゃれ時計に変身するという1粒で2度美味しい作戦です。

以下は完成した時のイメージ図です。


現在のところ基板設計の初版を終わらせた状態。


LPCXpressoはCPU周辺回路が完成しているので、こういった試作基板は簡単に設計が済んでしまいます。
この回路も約1時間ほどで電気設計と基板設計が完了しました。
忙しい毎日でも時間を作って試してみることができるのが嬉しいところ。

単なるディジタル時計ですが、自分でプログラムを組めるし、基板外形はLPCXpressoとピッタンコ同じで、少しカッコイイ!・・・というのが目論見です。

今回は「リアルLPCXpressoサイズ」に(だけ)こだわって設計しています。
完成したらどんな風になるのか楽しみです。

備考

この基板はLPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)にも持っていこうと考えています。
興味のある方は@shintamainjpまで御連絡下さい。

2011年7月3日日曜日

LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)

LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)は横浜近郊に在住していて、「都内に出てモクモクする気力はないけれど横浜なら行ってもいいかな?」という方のためのLPCXpressoモクモク会です。もちろん都内からの参加も歓迎です。



詳しくはATNDで!
http://atnd.org/events/17595

LPC11U14 LPCXpressoを使ってUSBを研究しよう! - USB研究部会 - (LPCXpresso週間)

USB! USB! USB!

以前の記事、LPCXpressoの放置を防ぐお勧め取り組み方法(LPCXpresso週間)では、放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。
今回はLPC11U14 LPCXpressoを使って、USBを研究する例を取り上げてみましょう。

LPC11U14の概要

LPC11U14は最大クロック周波数50MHzのARM Cortex-M0をコアに持つNXPセミコンダクターズ社のプロセッサです。
LPC11U14の場合、内臓フラッシュは32KB、SRAMは6KBあり、そのうち2KBがUSB用となっています。


GPIOは40本、ADCも8チャンネル搭載されており、USBも接続できるため様々な応用例が考えられます。

まずはデータシートからブロック図を見てみましょう。
おっと、データシートはまだドラフトのようですね。


USARTやI2C、SPI(SSP)はもとより、SMARTCARD INTERFACEやPMU(Power Management Unit)が搭載されています。
PMUはLPC11U14では特徴的な機能の1つと言えそうです。

メモリマップは以下のようになっています。


メモリマップを見てもわかるように6KBのSRAMは連続した領域ではなく、2KBのUSB用RAMと残りの4KBに分かれていることがわかります。

で?USBは?

ひとくにちUSBといってもホストやらデバイスやら色々あるわけです。
LPC11U14で言うUSBは「USB 2.0デバイス」を指します。

LPC11U14に搭載されたUSB 2.0デバイス・コントローラの機能は以下の通りです。
  • USB 2.0フル・スピード・デバイス・コントローラ搭載。
  • 1つのコントロール・エンド・ポイントを含む、10個の物理(5個の論理)エンド・ポイントをサポート。
  • シングル・バッファリングとダブル・バッファリングをサポート。
  • 非コントロール・エンド・ポイントはそれぞれ、バルク、インタラプトかアイソクロナス・エンド・ポイントをサポートします。
  • USB動作におけるディープ・スリープ・モードからのウェイク・アップとリモート・ウェイク・アップをサポートします。
  • ソフト・コネクトをサポートします。

    LPC11U14のUSBハードウェア

    ここで、ハードウェア・ブロック図を見てみましょう。

    アナログ・トランシーバが内臓されているおかげで、外付けデバイスなしでUSB接続ができます。
    DMAエンジンはAHB_MASTERに接続されています。


    SERIAL INTERFACE ENGINE(SIE)はUSBプロトコル層をハードウェアで実現したものです。
    このため、ソフトウェアの介在なしにUSBプロトコル層を処理できるようになっています。
    USB用RAMとUSBバスにおけるエンド・ポイント・バッファ間のデータ転送はこのハードウェアによって処理されます。

    LPC11U14のUSBソフトウェア

    エンド・ポイント・リスト・ポインタはアドレス0x20004000にあるUSB用RAMブロック内を指すようにします。
    データはどのSRAMにも格納することができます。

    これらを図示したのが以下の図です。


    上記のようにレジスタにアドレスを設定しておけば、SRAMにデータが格納するまでを勝手にやってくれるという仕組みです。
    このUSBコントローラにはUSB IRQ割り込み(USB_Int_Req_IRQ)とUSB FIQ割り込み(USB_Int_Req_FIQ)の2つの割り込み線が存在します。
    リクエストの処理は通常これらの割り込みを使って処理することになります。

    どこから手を付ける?

    「じゃあ、始めましょう!」と言って笑顔でコーディングを始めても良いのですが、出来上がるまでに何回くらい日が暮れるのかわかりません。

    幸いにもNXPセミコンダクターズがLPC11U14で使えるUSB HIDのサンプルを提供してくれています。
    今回はこれを使ってUSBの研究を始めることにします。

    情報が豊富で頻繁にアップデートされているサポートサイトは http://ics.nxp.com/support/lpcxpresso/ にあります。


    上記ページにある「LPCXpresso USB HID Example Project for LPC11U14」を選択してクリックして下さい。
    アーカイブされたプロジェクトをダウンロードすることができます。
    アーカイブされたプロジェクトの使い方は私の記事「LPCXpressoのサンプルを使ってみよう(LPCXpresso週間)」も参考にして下さい。

    先ほどのアーカイブ・プロジェクトにはCMSISが含まれていませんが、実際には必要です。
    これも http://ics.nxp.com/support/lpcxpresso/zip/CMSISv2p00_LPC11Uxx.zip からダウンロードして読み込んでおきましょう。


    ビルドしたバイナリを書き込んで、LPC11U14側に接続されたUSBコネクタに接続するとUSB入力デバイスとして認識されることがわかります。


    デバイス・ディスクリプタのソースコードと見比べてみても、ふむふむ確かに同じだということがわかると思います。



    USB HIDサンプル・プロジェクトの中身

    今度はUSB HIDサンプル・プロジェクトの中身について調べてみます。
    まずは「一体このサンプルは何をすることができるのか?」興味のあるところです。

    HIDと言っても色々あるので、一体何と主張しているのかを調べます。
    これはディスクリプタを見ればすぐにわかるはずです。


    キーボードかマウスかな?と思いましたが、両方外れでした。
    HID_PROTOCOL_NONE(値:0)が指定されています。

    では、具体的にどんな実装になっているのかプロジェクトからdemo.cを見てみましょう。
    demo.cのGetInReportとSetOutReportはリクエストがあった時点で呼ばれる処理関数です。
    これを見る限り1ビットの入力と4ビットの出力をサポートしているようです。


    1つずつ調べていくと色々なことがわかってきます。
    楽しいですね。

    やりたいのはPCとの連携(USBなんだから)

    さて、先ほどのSetOutReportに気になる記述があります。

    /* port1, bit 14~17 are used as LED indication from
    HID utility. */
    

    HIDユティリティとは何だ?ということで調べてみました。
    が、それが何を指すのかいまいちよくわかりません。

    今、非常にやりたいのはこの独自デバイス(今は評価基板ですが)をPCから制御できるようにしたいわけです。

    実はWindows Driver Kit (WDK)にUSB HIDクライアントのサンプルがあります。
    今回はターゲットがUSB HIDとして動作しているので、デバイスドライバを開発する必要はありません。

    今回はUSB HIDクライアントのサンプル目当てでWDKを使います。


    まずは Windows Driver Kit (WDK) をダウンロードします。(2011/07/03現在、バージョンは7600.16385.1 でした。)
    ダウンロードしたisoファイルに含まれるセットアップを実行します。
    isoファイルをファイルシステムをマウントするツールもあるのですが、そのツールの信頼性を確認したりするのが面倒なので私はCD-Rに焼いてから実行しました。

    次に VisualStudio 2010 Express から Visual C++ 2010 Express をダウンロードします。


    VisualStudioも通常通りインストールしておきましょう。

    次にWDKに含まれるHIDのサンプルをビルドします。
    USB HIDのサンプルは幾つかあります。
    今回は C:\WinDDK\7600.16385.1\src\hid\hclient を試します。


    コンソール画面が出ます。
    先ほどのディレクトリにcdしてbuildを実行します。


    これで hclient なるサンプルのビルドが完了しました。
    ターゲットディレクトリの下を見るとディレクトリが生成されていると思います。
    その中の hclient.exe を実行して下さい。
    以下のような画面が現れます。


    さて、LPC11U14の入力ポートの状態をこのクライアントアプリケーションで見てみましょう。
    まずは、接続したLPC11U14を探し出します。


    見つかったら、VID、PIDを確認して、同じVIDとPIDを持つデバイスをSample HID client appのウィンドウ上で探します。


    これで準備ができました。
    早速ポートの値を読んでみましょう。

    ウィンドウにある「Blocked Read Data」を選択します。

    以下のようなダイアログが出現します。
    このダイアログの「連続読みだし」ボタンを押すとデバイスからのブロック・データ読みだしが実行できます。


    それではLPCXpressoの入力ポートの状態を変化させてみましょう。
    基板上にある「P0_1」ポートに対して入力を与えると、上記のダイアログのように出力内容が変化します。

    要するにターゲットのHIDがホスト上のアプリケーションの要求に応答してポートの状態を返しているのです。


    Sample HID client appはMicrosoftからソースコードが公開されているアプリケーションで、今回は提供されているサンプルをそのまま使いました。
    この中で使われているAPIを調べる事で、自分のデバイスに対する自分だけのライブラリやアプリケーションを仕立てることも可能になります。

    まとめ(何が揃ったのか)

    我々は、LPCXpresso評価基板1つの投資で以下の物を手に入れました。
    • 自由にいじれるUSB HIDのデバイス側。
    • 自由にいじれるUSB HIDのホスト側アプリケーション。
    マイコンの世界でクローズするのではなく、今回のようにアプリケーションを組み合わせることで沢山の応用例に発展させることができるようになります。

    デバイス・ドライバを開発することなく、独自のUSBデバイスを接続できる手軽さは、かなり魅力的です。また、今回のようにホスト側もターゲット側も自由に改造して楽しむことができますので、USBをもっと身近に感じてみたいエンジニアにとっては格好の材料となりそうです。

    皆さんも是非「USBは難しそう」と思わずに気軽に挑戦してみませんか?

    他にどんな情報が必要ですか?

    何か必要な情報があれば、本家も訪ねてみてください。

    LPCXpressoのサンプルを使ってみよう(LPCXpresso週間)

    はじめに

    LPCXpressoを始めた人にとって、「IDEが立ち上がった後どうすれば良いか?」は大きな問題です。
    ここでは、プリインストールされたサンプルプログラムを読み込んで実行するまでをご紹介します。

    プロジェクトの読み込み

    LPCXpresso IDEには便利な「Quickstart Panel」というものがあります。
    LPCXpresso用の専用パネルで、カテゴリ別に操作可能な項目が並べられています。


    今回はここから、アーカイブされたプロジェクトの実行機能を試してみましょう。
    実はLPCXpresso IDEをインストールすると幾つかのサンプルプログラムが含まれています。


    Windowsにインストールした場合、通常はシステムドライブの直下にnxpというディレクトリを作ってインストールしていると思います。この中に含まれるLPCXpresso IDEのExamplesディレクトリがサンプルが含まれるディレクトリです。


    ファイルを選択後にFinishボタンを押すとプロジェクト画面にプロジェクトが出現します。


    プロジェクトのビルドと実行

    それではさっそくプロジェクトをビルドしてみましょう。


    以上でサンプルプロジェクトを実行するための準備ができました。
    早速LPCXpressoを接続します。

    初回接続時にはドライバが自動的にロードされると思います。


    「Quickstart Panel」は状況に応じて表示内容や操作可能な項目が変化する仕組みです。
    サンプルプロジェクトを使ってデバッグを実行する時には以下のようにします。


    Windowsの場合、ファイアウォールに関する警告が出るかもしれません。
    この時には「アクセスを許可する」を選択して下さい。


    これでめでたくソースコード表示付きのデバッグが楽しめます。


    デバッグしてみる

    ソースコードをステップ毎に実行したい時には・・・


    こんな風に簡単にステップ実行できます。


    続けて実行したい場合には、「Resume」を選択します。
    通常の実行に近い形で実行することができます。
    この時、ブレークポイントを設定してあれば、そこで停止させることができます。


    デバッグを終了したい時には「Terminate」を選択して下さい。


    まとめ

    前回のLPCXpressoのライセンス登録方法(LPCXpresso週間)に続き、初めてマイコン開発される方のためのコンテンツとしてサンプルプロジェクトの実行について触れてみました。

    LPCXpressoは3千円ほどで購入できるARMマイコンが搭載された評価基板です。
    みなさんも今年の夏休みはLPCXpressoで何か新しいことに挑戦してみませんか?