2011年7月3日日曜日

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で何か新しいことに挑戦してみませんか?

    2011年7月2日土曜日

    LPCXpressoのライセンス登録方法(LPCXpresso週間)

    概要

    LPCXpressoは低価格(3千円程度)で購入できることから、中学生、高校生など、エンジニアの卵達にも教材としてもお勧めしたい一品です。

    このIDEですが、単にインストールした状態では8Kバイトを超えるコードを生成実行することはできません。例えば、mbedに搭載されているプロセッサLPC1768の場合、512KBのフラッシュロムを持ちますから、単純計算で1/64しか楽しめないのです。

    しかし、ライセンス登録するだけで128Kバイトまでのコードを生成実行することができるようになります。
    先の例ですと1/2まで楽しめるようになるわけです。

    エンジニアの卵達の中には、英語がネックになってライセンス登録を躊躇しているかもしれません。
    ということで、今回はライセンスを取って128KBまでのコードに対応できるようにしましょう。

    初回起動時のメッセージ

    初回起動時、ライセンス登録が行われていない事を示すダイアログが表示されます。


    これには
    • 未登録LPCXpressoは評価目的のみで使用可能であること。
    • 登録とアクティベートによって上記制限が取り除かれること。
    と書かれています。

    ライセンスの登録方法

    まずはシリアル番号を生成します。

    「Help(ヘルプ)」メニューから「Product activation(製品活性化)」を選択します。
    そこにある「Create Serial number and Activate...(シリアル番号の生成と活性化)」を実行します。


    以下のようなダイアログが表示されます。
    ここに表示されたSerial number(シリアル番号)は、LPCXpresso IDEが自動的に生成したシリアル番号です。
    このシリアル番号を選択してCtrl + Cなどで、クリップボードにコピーしておきます。


    Copy Serial Number to clipboard(クリップボードへシリアル番号をコピーする)にチェックを付けておけばOKボタンを押した時にクリップボードにシリアル番号を自動的にコピーしてくれます。

    次にcode_redのサイトにログインします。


    ログイン後にメニューにある「My Registrations(登録)」を選択します。

    「Enter serial number here(シリアル番号をここに入力)」と表示されています。
    ここに先ほどコピーしたシリアル番号をペーストします。

    シリアル番号をペーストしたら「Send me my activation code(活性化コードを送る)」ボタンを押します。


    code_redのサイトに登録してあるメールアカウントに活性化コードが送信されます。


    英文のメールですので、日本国内のメールサービスの中には誤ってスパムメールとして識別されてしまうかもしれません。


    メールの中にある「Your activation code is:(あなたの活性化コードは:)」の下に書いてある文字列が活性化コードです。

    「Help(ヘルプ)」から「Product activation(製品活性化)」を選択し、今度は「Enter Activation code(活性化コードを入力)」を実行します。


    ダイアログが表示されますので、先ほどコピーした活性化コードをペーストして下さい。


    活性化コードを入力してOKボタンを押すと製品活性化が完了します。


    以上でめでたく128KBまでのコード生成とデバッグができるようになりました。

    まとめ

    今回は、エンジニアの卵達にも気軽に使ってほしいとの思いで、ライセンス登録について触れてみました。

    2011年6月25日土曜日

    LPCXpressoの放置を防ぐお勧め取り組み方法(LPCXpresso週間)

    購入後に放置してしまいがちな評価ボード

    評価ボードの類は書籍などと同様で取り組むための時間の捻出が欠かせません。
    購入したものの部品箱の奥底に埋もれてしまう事はよくあることです。

    ありそうな理由を挙げてみましょう。
    • 本当に忙しくて時間を捻出できない。(それって本当?)
    • 購入した時点で興味を失ってしまった。(何がしたかったの?)
    • LEDをチカチカさせた後、どうして良いかわからない。(いかにもありそう。)
    • XXXを試したら興味を失ってしまった。(そのXXXを試す事が目的なら良いけど・・・。)

    流石に沢山の人が毎年同じようなループに陥るのは地球資源にも優しくありません。
    まず、上記のようになってしまう原因を探ってみましょう。

    自分のためになる何かを考える

    マイコン評価ボードは「そのマイコンを使ってみる」というところの主眼を置くと、ほとんどの場合触らなくなってしまいます。その触らなくなる瞬間までに何かが得られれば良いのですが、用意された環境を実行して終わりになってしまっては勿体無い限りです。

    そこで、評価ボードを使うということに必然性のある理由を追加します。
    例を挙げてみましょう。
    • この評価ボードを使ってネットワーク機能の実装方法を習得しよう。
    • この評価ボードを使ってUSBに関する理解を深めよう。
    • この評価ボードを使ってCANに関する理解を深めよう。
    • この評価ボードを使ってOSをポーティングし、アセンブラやOSに関する理解を深めよう。
    「この評価ボードに搭載されたXXXというマイコンを使う」というだけでは漠然とした目的になってしまいがちです。これでは忙しい毎日の生活の中で時間の捻出に繋がる動機を生み出せません。

    そこで、各自の「最終的に実現したいこと(学習のターゲット)」を要素として加えることで具体的な目標にします。
    これにより時間の捻出をしようという動機に繋げるという仕組みです。


    例えば、上記は「FATファイルシステムの動作を確かめればそれで良い。」という方向で使用した例です。(ぐちゃぐちゃですが、きれいに実装することが目的ではないので気にしません。)

    LPCXpressoがなぜお勧めなの?

    単に「マイコンを使う」という視点で見た場合、もっと他に楽しいボードが沢山ありそうです。
    LPCXpressoをお勧めするのは、
    • 「具体的な目標」に適切なボードが存在。
    • 開発環境のセットアップに比較的容易。
    • 実現したいことに対する投資としては安価。
    • 可搬性に優れた設計。
    • ターゲット回路構成がシンプル。
    など妥当な理由が存在するからです。


    例えばLPCXpressoの場合であれば、以下のような選択肢が考えられます。

    最終的に実現したいこと
    (学習のターゲット)
    ボード
    ネットワークLPC1769 LPCXpresso
    USBLPC11U14 LPCXpresso
    CANLPC11C24 LPCXpresso
    OSLPCXpresso全般

    組み込みエンジニアとしてネットワークやUSB、そしてOSに関する学習は外したくないところです。
    車載系装置のエンジニアならばCANも加わることでしょう。

    こんな風に、最終的に実現したいことを学習のターゲットとして設定し、LPCXpressoを購入することで、学習への第1段階に到達することができるのがLPCXpressoをお勧めする1つの理由です。

    もし、ご自宅で眠っているLPCXpressoがあれば、視点を変えて再度取り組んでみませんか?
    次回以降は環境の構築と具体的な学習への取り組みについて触れて行こうと思います。

    2011年6月24日金曜日

    LPCXpressoを選ぶ(LPCXpresso週間)

    色々あるけど全部一緒でしょ?

    前回の記事で現状で6つのLPCXpressoが存在することをお伝えしました。
    実は、単に搭載されているプロセッサが異なるだけというわけではありません。


    モデルによって搭載されている外部デバイスが異なったり、興味深い工夫が施されていたりします。今回はそれらを1つずつ見て行くことにしましょう。

    LPC1769 LPCXpresso



    現在のラインナップでの兄貴分と言えるのがLPC1769 LPCXpressoです。
    このボードにはイーサネット物理層デバイスも搭載されています。
    要するにRJ-45コネクタを外部に接続するだけでネットワーク機能を試す事ができます。
    搭載されているデバイスはSMSCのLAN8720Aです。
    ボード上にはネットワーク動作確認用のLEDも搭載されています。

    回路図から少し抜粋してみます。


    LAN8720AとLPC1769との間は、RMII(Reduced Media Independent Interface)で接続されています。RMIIは、主にMII(Media Independent Interface)の接続端子数を削減するために作られたものです。この辺りは興味深い事が沢山ありますので、色々と調べてみると面白そうです。

    また、EEPROMも搭載されています。


    I2Cペリフェラルを使ってみたい人は、このボード1つ購入するだけで試す事ができます。

    LPC1343 LPCXpresso



    幾つかのデバイスが搭載されていたLPC1769 LPCXpressoと対象的なのがLPC1343 LPCXpressoです。
    ターゲット側の回路図を見てみましょう。


    デバイスに接続されているのはLEDのみです。


    LPC1227 LPCXpresso



    LPC1227 LPCXpressoはパッと見ると何も面白くないのですが、中々興味深い工夫が施されています。
    その部分を回路図から抜粋します。


    低消費電力アプリケーション向けに意図されている事もあって、この評価ボードで簡単に消費電力を計測できるように意図されています。

    チカチカさせたい人のためのLEDももちろんあります。


    LPC11C24 LPCXpresso



    LPC11C24 LPCXpressoのターゲットにはCANが実装されています。
    そうです。LPC11C24のCはCANのCなんです。


    この評価ボードでお手軽にCANが試せると言うわけです。

    LPC11U14 LPCXpresso



    LPC11C24 LPCXpressoのCはCANのCでした。
    このLPC11U14 LPCXpressoに搭載されているデバイス、LPC11U14のUは何でしょうか?
    答えは・・・


    USBなのです。
    LPC11U14 LPCXpressoにはターゲット側にUSBコネクタまでが搭載されています。
    小型アプリケーションをプロセッサで実現したい時にUSBデバイスとして扱いたい事があります。
    そんな実験にもってこいなのがLPC11U14 LPCXpressoというわけです。

    LPC11U14 LPCXpressoの回路図にも低消費電力アプリケーション向けを意識した工夫を見つける事ができます。


    LPC1114 LPCXpresso



    LPC1114 LPCXpressoはC(CAN)もU(USB)もない普通のLPC1100シリーズのデバイスです。
    回路図にはLPC1343 LPCXpressoとの互換性に関する配慮がされています。


    今回のまとめ

    一口にLPCXpressoと言っても、ご覧の通りデバイスの特徴に合わせてちょっとした工夫が施されているのがLPCXpresso評価基板の特徴です。(LPC1343 LPCXpressoやLPC1114 LPCXpressoでさえも、際立った特徴を持たせないのが特徴だったりします。)

    LPCXpressoには沢山の種類があってどれを選んで良いのかわからなくなりそうですが、実際にやってみたい事や評価してみたい事を思い浮かべて回路図を眺めてみると、「これかな?」という候補が浮かんできたりします。


    是非みなさんも「これがやってみたい!」ということを頭に思い浮かべて、モデル選択を楽しんでみませんか?
    全ての回路図はボードを設計されているEmbedded Artists社のサイトからダウンロードすることができます。

    参考までに簡単な比較表を用意しました。

    名称搭載プロセッサシリーズSRAM[KB]Flash[KB]最大クロック周波数[MHz]デバッグLED
    LPC1114 LPCXpressoLPC1114Cortex-M083250PIO0_7
    LPC11U14 LPCXpressoLPC11U14Cortex-M063250PIO0_7
    LPC11U24 LPCXpressoLPC1124Cortex-M083250PIO0_7
    LPC1227 LPCXpressoLPC1227Cortex-M0812845PIO0_7
    LPC1343 LPCXpressoLPC1343Cortex-M383272PIO0_7
    LPC1769 LPCXpressoLPC1769Cortex-M364512120PIO0_22

    2011年6月22日水曜日

    LPCXpressoを皆でいじり倒そう!(LPCXpresso週間)

    LPCXpresso週間のイントロダクション

    ここ最近Embedded Artists社のLPCXpressoシリーズの動きが活発です。
    気付いたら6つものプロセッサから選択できるようになっていました。


    そこでCuBeatSystemsとしても何かやろうということで、「LPCXpressoを皆でいじり倒そう!」と題してLPCXpresso週間を始めることにしました。
    • 8ビット、16ビットマイコンを使っているけれど、ARMマイコンにも興味がある。
    • とりあえずARMマイコンを使っているけれど、もっと中身を知りたい。
    • その他。
    色々な方に楽しんで頂けるようなメニュー構成で進めたいと思います。

    LPCXpressoって何?

    事前知識の無い方に「LPCXpresso」と言っても何が何だかですので、簡単に特徴を整理しておきましょう。
    • NXPセミコンダクターズ社のARMマイコンが搭載された評価ボードです。
    • デバッガとターゲットが1つのコンパクトな基板になっています。(持ち運びが便利です。)
    • パソコンのUSBポートに接続するだけで使えます。(どこでもデバッグが楽しめます。)
    • 国内でも秋月電子通商マルツパーツ館などから容易に購入できます。
    • 評価ボードの部類ではかなり安いです。(3000円前後)
    • ダウンロード可能な開発環境が便利です。(Windows, Linuxで使えます。)
    • お手元のお気に入りな開発環境も使用可能です。
    • FreeRTOSやTOPPERS/ASPなどの動作も可能。
    近年、多くのマイコン評価ボードが出現しています。
    その中でも、ARM Cortex-M0やARM Cortex-M3を試すならLPCXpressoはかなりお勧めの選択肢です。

    インチキ・セレクション・マップ

    今回は私の体験を基にしたインチキなセレクション・マップを作ってみました。


    LPCXpressoやmbedが手元にあると「ちょっと何かを試したい時」に便利です。
    事前評価などでいちいち基板設計する必要もありません。
    また、価格も3000円前後と安く、気軽に様々な事を試す事ができるのも嬉しいポイントです。

    次回以降はその魅力に触れながら様々な活用方法について触れていきたいと思います。