« mbed + GCCでprintfを使う | トップページ | FEZ Dominoでマルチスレッドを動かす »

FEZ Domino Get

MTM05でスイッチサイエンスさんから、FEZ Dominoをゲットしてしまいました。実は前から気になっていたのですが、イベント会場で買えると分かって誘惑に耐え切れず。.NET Micro Framework SDKやFEZ SDKはだいぶ前にインストールしていたのですが、環境構築・ファーム更新・お決まりのLチカまでをまとめました。

TinyCLR.comにFEZ Tutorialドキュメントやビデオチュートリアルがありますが日本人には英語の壁が立ちはだかりそうな環境ではあります。

2010/5/23追記: Tutorialドキュメントの場所が分かったため、記載を修正しました。

環境設定

以下のコンポーネントをインストールします。

  1. Visual C# 2008 Express (現時点は、.Net MFはVS2010には未対応です)
  2. .NET Micro Framework 4.0 SDK
  3. GHI NETMF SDK (FEZ固有部分のアセンブリー等)
    TinyCLR.comのダウンロードページからSDKをダウンロード(執筆時点はVersion 1.0.5が最新)
  4. FEZのDebug Interfaceドライバーをインストール
    GHI NETMF SDKをインストール後FEZをPCにUSB接続すると、不明なデバイスが現れるので(ひょっとすると、この時点でデバイスドライバーのインストールを要求してくるかも)、C:\Program Files\GHI Electronics\GHI NETMF v4.0 SDK\USB Drivers\GHI_NETMF_Interfaceのドライバーをマニュアルインストール

USBケーブルをつなぐと、出荷時に書き込まれたLチカが動作しました。

2010/5/23追記VS2010の対応はあと2ヶ月ぐらいで行うそうです。


ファームウェアの更新

<ファームウェア版数の確認>

最新のGHI NETMF SDKはFEZのファームウェアとして、USBizi V4.0.3.0を要求します。本体のファームウェア版数は、C:\Program Files\Microsoft .NET Micro Framework\v4.0\Tools\MFDeploy.exeで確認が可能です。DeviceプルダウンからUSBを選択し、Target→Device Capabilitiesを選択すると以下の表示が出ます。

FEZ_Ver_Initial

SolutionReleaseInfo.solutionVersionがファームウェア版数となり、4.0.2.0となります。即ち、V4.0.3.0へのアップデートが必要ということですが、ファームのバージョンアップ手順が少々複雑でつまづきました。

<バージョンアップ手順>

ファームのバージョンアップはXMODEMを使うのですが、ターミナルソフトとしてTeraTermが推奨となっています。ビデオではそんなこと言っていないと思うのですが、TutorialドキュメントではTeraTermのバージョンによってはXMODEMを使ったファイル転送で問題が出る場合があるため、メーカ側で確認が取れている、TinyCLR.comのダウンロードページにあるTeraTermを使用することと書いてあります。私がインストールしていたTeraTermよりバージョンが古いのですが、念のために推奨版をインストールしました。

いよいよ、ファームウェアの更新です。まず、FEZのLDRボタンを押しながらRESETします。この操作でブートローダーが起動しますが、ブートローダー用の仮想COMポートドライバーをインストールする必要があります。ここでWindowsがドライバーを要求してくるので、C:\Program Files\GHI Electronics\GHI NETMF v4.0 SDK\USB Drivers\GHI_Bootloader_Interfaceのドライバを指定します(環境設定でインストールした、Debug Interfaceドライバーとフォルダーが異なりますので要注意です)。私の環境では、ドライバーインストールが勝手に始まってエラー終了してしまい、ドライバーを聞いてこなかったのですが、その場合はデバイスマネージャーを開くと不明なデバイスが見えているので、マニュアルで上記フォルダーのドライバーをインストールします。

ドライバーインストール後、TeraTermを起動してシリアル接続を行うと、仮想COMポート経由で接続ができます(私の環境ではCOM11でした)。マニュアルやビデオでは、仮想COMポートドライバインストール前に、PC組み込みの物理COMポート(COM1とか)が見えることを確認する手順になっていますが、私のPCはBIOSでCOMポートを殺していたため(かつこのことを忘れており)、物理COMポートが見えないところでしばし足踏みしてしまいました。物理COMポートの確認なんて本質的には関係ないので、すぐに仮想COMポートの確認に行けばよいのに・・

仮想COMポート経由で接続ができると、TeraTermからブートローダーコマンドの投入が可能となります。以下のようにコマンドを投入して、ファームウェアをFEZに転送します。

  1. b(小文字)を入力して、BLが返ることを確認
  2. V(大文字)を入力して、ブートローダーバージョンを確認
  3. X(大文字)を入力するとCが連続して表示されます。これは、FEZがXMODEMのデーター受信待ち状態であることを示します
  4. TeraTermのファイル→ 転送→ XMODEM→ 送信メニューから、C:\Program Files\GHI Electronics\GHI NETMF v4.0 SDK\USBizi\Firmware\USBizi_CLR.GHIを選択します。この際、転送オプションとして「1K」を選択します
  5. 転送が終了したら接続を切断します。ここでbとかのコマンドを入れるとファーム更新に失敗します
  6. MFDeploy.exeでファームウェアバージョンを確認

FEZ_FrimUP_XMODEM_Option

手順2)と3)の間で、Eコマンドを入力して旧ファームを消去することもできるのですが、ビデオチュートリアルは直接上書きしていたので、消去の必要はないと思います。
 

サンプルプログラム

ビデオチュートリアルとにらめっこして、以下の通り、チュートリアル通りのサンプルLチカコードを作成しました。

using System.Threading;
using GHIElectronics.NETMF.FEZ;

namespace FezTest
{
    public class Program
    {
        public static void Main()
        {
            // Use FEZ_Componets driver class 
            FEZ_Components.LED onBoradLED = new FEZ_Components.LED(FEZ_Pin.Digital.LED);

            onBoradLED.StartBlinking(500, 100);     // On 500ms, Off 100ms

            Thread.Sleep(Timeout.Infinite);         // Sleep forever
        }

    }
}

LEDドライバークラスを使うと、すごく簡潔にコードが書けます。このあたりは、.NET Frameworkの威力ですが、ハードをどのように抽象化(クラスライブラリ化)しているのかまだよく分かっておらず、お勉強が必要です。IDEのイメージとLチカ動作中の写真を以下に示します。

FEZ_LED_blink

FEZ_LED_Flash

 

おわりに

デバックも軽く試してみましたが、レスポンスもそこそこでした。.NETの基本ライブラリがMicro Frameworkでどこまで使えるのかお勉強する必要がありますが、これがほぼ使えて、かつ色んなデバイスのドライバーがコミュニティーレベルでそろえば最強の環境かもと思えてきました。

FEZ Dominoのハードは、Arduinoのフォームファクターをあわせていることによる面積的な制約がありますが、144ピンのLPC2388を使っているのに、使用できるピン数がちと少ないと思います。まあ、COMポートが2ポートあることや、拡張コネクタの8ピンもDigital I/Oとして使えることを考えると通常の使用で不足することはなかろうかと思いますが、未配線のピンがいっぱいあってもったいないなぁと・・

プログラム実行面では、.NETなので中間コード(MSIL)をCLRがJITコンパイルインタープリターベースで実行しています。そのため、ネイティブコードで書いたプログラムとパフォーマンスの違いをベンチマークできればと思っています。インタフェース付録基板とFEZはLPC2388 72MHzで同等のMCUを積んでいるため、比較ができないかと思っています。

2010/5/29追記: MicrosoftのWhite Paperによると、NETMFは少メモリー環境で動かすために、JITコンパイルではなくインタープリター(逐次翻訳)ベースで動作します。そのため、C/C++で書いたネイティプコードに対して実行速度はあまり期待できません。

« mbed + GCCでprintfを使う | トップページ | FEZ Dominoでマルチスレッドを動かす »

dotNet MF」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« mbed + GCCでprintfを使う | トップページ | FEZ Dominoでマルチスレッドを動かす »

2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        
無料ブログはココログ