Serviceに頼む。(EAGLE用の一発生成CAMファイルや、ガーバデータの検証方法もあります。Clockを設計して早くも1週間が経ちました。その間に色々な試行錯誤を経て若干の機能追加をしたりしました。Serviceに頼むことにしました。EAGLE用の一発生成CAMファイルEAGLEでガーバを出力する場合にはCAMプロセッサというものを使います。基板設計側の画面を表示します。CAMプロセッサのアイコンをクリックします。CAMプロセッサのダイアログが表示されます。ここでCAMプロセッサに対する作業を定義したファイルを読み込みます。Service向けのCAMプロセッサ用ファイルを自作してガーバ出力作業に使用することにしました。名付けてFusionPCB-gerb274x-excellon.camです。それでは読み込んでみます。Serviceでは生成したガーバデータの拡張子名が指定されています。自作したCAMプロセッサ用ファイルには以下の特徴があります。Serviceで指定された拡張子名で自動生成してくれるようにしました。Serviceで指定された名称にしてあります。ドリルデータも一緒に生成するようにしました。Serviceに書かれた内容で照合します。ドリルラックファイルなどは不要なのかもしれませんが、添付しても問題ないでしょう。出力されたデータを確かめるこの手の作業は、複数のツールを組み合わせたダブルチェックが欠かせません。出力したデータファイルのみで(←ここ重要)期待した結果が得られるのか?が確認するポイントとなります。私は工場に提出するガーバデータの確認をGraphiCode社のGC-Prevueで行っています。先ほど出力したデータファイルを開いてみましょう。「ファイル」メニューから「インポート」を選択します。GC-Prevueのインポート機能は非常に手軽で、Ctrlキーを押しながら所望のファイルを選択することで複数のファイルを一括読み込みすることができるようになっています。インポートを実行するとファイル情報の検証が行われます。その後、ツールの管理テーブルへのマッピングが表示されるようになっています。最後にファイル毎のインポート結果の詳細が示されるダイアログが出現します。ここで表示色や形式などを選択する事ができるようになっています。この時点でお気に入りのツールと表示色をあわせると見やすいですね。ガーバデータは複数のファイルで1つの基板の情報を管理しますので、「間違って同じデータを違う拡張子で送っちゃった!」とか、「全然関係ないデータを送っちゃったよ!」なんてあるかもしれません。読み込み時に画面で確認しながら読み込めるGC-Prevueはそういう意味で非常に便利です。シルクレイヤを見てみると以下のようになります。こちらは部品面のガーバ。ベタ面の描画が粗いように見えますが、拡大すればきちんと表示されます。レイヤー毎の表示・非表示は画面左側のツリー表示の部分で切り換えることができます。Service向けCAMプロセッサファイルはこちらからダウンロードできます。自己責任でお使い下さい。Serviceに頼む過程を示してみました。概要LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)は、参加者の方々が各自で取り組んでいることを持ち込んでモクモクと何かをしようという会合ですが、具体的なTODOがない方にとっては参加しづらいものです。そこで、今回はLPCXpressoを手にしてみたけど具体的なTODOが思いつかないなぁという方でも参加しやすいような小道具を考えてみました。先の部会に参加される方の中で、希望される方に基板を無償で配布します。Clockの特徴を以下に示します。リアルLPCXpressoサイズ。製作後は完全なスタンドアロン動作が可能。見やすい7セグメントLEDによるディジタル表示時計。4つの入力スイッチ付き。LEDのダイナミック表示を学びたい方に最適。LPCXpressoに合体させるだけでオリジナルクロックの出来上がりという算段です。LPCXpressoを使って小規模組み込みシステム開発を楽しんだ後はリビングのおしゃれ時計に変身するという1粒で2度美味しい作戦です。以下は完成した時のイメージ図です。現在のところ基板設計の初版を終わらせた状態。LPCXpressoはCPU周辺回路が完成しているので、こういった試作基板は簡単に設計が済んでしまいます。この回路も約1時間ほどで電気設計と基板設計が完了しました。忙しい毎日でも時間を作って試してみることができるのが嬉しいところ。単なるディジタル時計ですが、自分でプログラムを組めるし、基板外形はLPCXpressoとピッタンコ同じで、少しカッコイイ!・・・というのが目論見です。今回は「リアルLPCXpressoサイズ」に(だけ)こだわって設計しています。完成したらどんな風になるのか楽しみです。備考この基板はLPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)にも持っていこうと考えています。興味のある方は@shintamainjpまで御連絡下さい。Clock2011年7月3日日曜日LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)は横浜近郊に在住していて、「都内に出てモクモクする気力はないけれど横浜なら行ってもいいかな?」という方のためのLPCXpressoモクモク会です。都内からの参加も歓迎です。USB!以前の記事、LPCXpressoの放置を防ぐお勧め取り組み方法(LPCXpresso週間)では、放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。LPCXpressoを使って、USBを研究する例を取り上げてみましょう。Cortex-M0をコアに持つNXPセミコンダクターズ社のプロセッサです。LPC11U14の場合、内臓フラッシュは32KB、SRAMは6KBあり、そのうち2KBがUSB用となっています。GPIOは40本、ADCも8チャンネル搭載されており、USBも接続できるため様々な応用例が考えられます。データシートからブロック図を見てみましょう。おっと、データシートはまだドラフトのようですね。Unit)が搭載されています。PMUはLPC11U14では特徴的な機能の1つと言えそうです。メモリマップは以下のようになっています。メモリマップを見てもわかるように6KBのSRAMは連続した領域ではなく、2KBのUSB用RAMと残りの4KBに分かれていることがわかります。?USBは?ひとくにちUSBといってもホストやらデバイスやら色々あるわけです。2.0デバイス」を指します。2.0デバイス・コントローラの機能は以下の通りです。2.0フル・スピード・デバイス・コントローラ搭載。1つのコントロール・エンド・ポイントを含む、10個の物理(5個の論理)エンド・ポイントをサポート。シングル・バッファリングとダブル・バッファリングをサポート。非コントロール・エンド・ポイントはそれぞれ、バルク、インタラプトかアイソクロナス・エンド・ポイントをサポートします。USB動作におけるディープ・スリープ・モードからのウェイク・アップとリモート・ウェイク・アップをサポートします。ソフト・コネクトをサポートします。LPC11U14のUSBハードウェアここで、ハードウェア・ブロック図を見てみましょう。アナログ・トランシーバが内臓されているおかげで、外付けデバイスなしでUSB接続ができます。DMAエンジンはAHB_MASTERに接続されています。ENGINE(SIE)はUSBプロトコル層をハードウェアで実現したものです。このため、ソフトウェアの介在なしにUSBプロトコル層を処理できるようになっています。USB用RAMとUSBバスにおけるエンド・ポイント・バッファ間のデータ転送はこのハードウェアによって処理されます。LPC11U14のUSBソフトウェアエンド・ポイント・リスト・ポインタはアドレス0x20004000にあるUSB用RAMブロック内を指すようにします。データはどのSRAMにも格納することができます。これらを図示したのが以下の図です。上記のようにレジスタにアドレスを設定しておけば、SRAMにデータが格納するまでを勝手にやってくれるという仕組みです。FIQ割り込み(USB_Int_Req_FIQ)の2つの割り込み線が存在します。リクエストの処理は通常これらの割り込みを使って処理することになります。どこから手を付ける?「じゃあ、始めましょう!」と言って笑顔でコーディングを始めても良いのですが、出来上がるまでに何回くらい日が暮れるのかわかりません。HIDのサンプルを提供してくれています。今回はこれを使ってUSBの研究を始めることにします。LPC11U14」を選択してクリックして下さい。アーカイブされたプロジェクトをダウンロードすることができます。アーカイブされたプロジェクトの使い方は私の記事「LPCXpressoのサンプルを使ってみよう(LPCXpresso週間)」も参考にして下さい。先ほどのアーカイブ・プロジェクトにはCMSISが含まれていませんが、実際には必要です。ダウンロードして読み込んでおきましょう。ビルドしたバイナリを書き込んで、LPC11U14側に接続されたUSBコネクタに接続するとUSB入力デバイスとして認識されることがわかります。デバイス・ディスクリプタのソースコードと見比べてみても、ふむふむ確かに同じだということがわかると思います。HIDサンプル・プロジェクトの中身について調べてみます。「一体このサンプルは何をすることができるのか?」興味のあるところです。HIDと言っても色々あるので、一体何と主張しているのかを調べます。これはディスクリプタを見ればすぐにわかるはずです。キーボードかマウスかな?と思いましたが、両方外れでした。HID_PROTOCOL_NONE(値:0)が指定されています。具体的にどんな実装になっているのかプロジェクトからdemo.cを見てみましょう。demo.cのGetInReportとSetOutReportはリクエストがあった時点で呼ばれる処理関数です。これを見る限り1ビットの入力と4ビットの出力をサポートしているようです。1つずつ調べていくと色々なことがわかってきます。やりたいのはPCとの連携(USBなんだから)さて、先ほどのSetOutReportに気になる記述があります。*/HIDユティリティとは何だ?ということで調べてみました。それが何を指すのかいまいちよくわかりません。今、非常にやりたいのはこの独自デバイス(今は評価基板ですが)をPCから制御できるようにしたいわけです。HIDクライアントのサンプルがあります。HIDとして動作しているので、デバイスドライバを開発する必要はありません。HIDクライアントのサンプル目当てでWDKを使います。