Intel EdisonのMCU SDKの日本語意訳(2/9):MCU SDK for the Intel® Edison boardを使用したアプリケーションの作成

はじめに

このメモはIntel Edison Compute Module用のMCU SDKの公式ページ群を“さかきけい”が読んで解釈した内容を元に日本語で書き起こしたものです。このメモで雰囲気を感じ取ったうえで原文をご参照いただければと思います。なお、リンク先がないものやリンク先が英語表記になっているものは現状ではまだメモを作成していないものです。

お願い

もしもIntelの関係者で、私がこの日本語ドキュメントを公開することが何らかのライセンスや法的問題があるとお考えであるならば、メールにてご連絡をいただければと思います。その際は、私がメールの送付主がIntel関係者であることを認識できるようにIntel社内からメールを送信し、所属・肩書き等を添えてください。

著作権等

英語版の資料をベースにしているこの日本語ドキュメントはIntelの著作権が及ぶ範囲内にあります。その上で、この日本語ドキュメントには“さかきけい”の著作権が発生しています。“さかきけい”はすべての著作権法上の権利を留保します(詳しくは「ご利用上の注意とお願い」を参照ください)。

免責の表明

この日本語ドキュメントはIntel Corporationが公開しているIntel Edison Compute Module用のMCU SDKの公式ページ群の情報を元に、“さかきけい”の理解で作成したものです。このためIntel Corporationには何らこの日本語ドキュメントに対する責任はありませんので、この日本語ドキュメントに関連する問い合わせをIntelに対して行うことを禁止します。

また、この日本語ドキュメントを作成した“さかきけい”も何ら責任を負いません。この日本語ドキュメントの内容は、利用者自身の責任においてのみ使用することができます。

使用上の注意

  • 複数の英単語によって構成される語は、単語間に「・」を入れて表現しています。例:ルート・ファイル・システム※1
  • 原則として単語末の長音記号「ー」は省略しない方針で編集しています。例:プロセッサー※2
  • 気づいたTypoや編集ミスなどは明確であると考えられる場合に若干修正しています。
  • 日本語での記述におかしいと思われる個所がある場合には原書をあたってください。
  • 技術的などの理由で記載内容にわからない事項がある場合には別途調べてください(“さかきけい”に質問のメールを送るのはご遠慮ください※3)。
  • 明らかな誤訳がある場合には具体的なご指摘をメールでお知らせいただけると助かります。
  • 記述内容に誤りがある場合にもお知らせいただけると嬉しく思います。ただし、原書も間違っている場合には特に日本語ドキュメントを修正することはせずに、訳注を追加するだけとするかもしれません。
  • 前述の内容と被りますが、“さかきけい”は何ら責任や義務を負うものではありません。

文書についてのご指摘をいただける方へのお願い

  • なるべく平坦でかつ理解しやすい程度に周辺情報を含む、日本語でのご指摘をお願いします。特に今回は“さかきけい”の理解の範疇を超えたハードウェアに関する部分のため、従来より多くの問題が存在し、それを理解するための周辺情報も多く必要であることが見込まれます。
  • “さかきけい”の主観において、いただいた情報の適用を行わないことがあることをあらかじめご理解ください。
  • ご連絡をいただける際には、以下の優先度でお願いします:
    1. “さかきけい”へのメール
    2. Facebook経由でのコンタクト
    3. このメモへのコメント

    ただし、このメモへのコメントの場合、大量のスパム・コメントに埋もれて反応が遅くなったり気づかない可能性があります。できる限りメールかFacebookでお願いします。


MCU SDK for the Intel® Edison boardを使用したアプリケーションの作成

このガイドに含まれるステップは、Intel® Edisonボードで使用するMCU SDKにおける一般的なマイクロコントローラー・ユニット(MCU)を使用したアプリケーションの作成、ビルド、そしてデバッグです。MCU SDKはEclipse*ベースのソフトウェア開発キットのWindows*、Mac* OS X*、およびLinux*版を使用して、MCU用のアプリケーションを作成します。それは、Eclipse SDK for the Intel® Atom™ processorとは異なるものです。MCUに含まれるコンポーネントは以下の通りです:

  • スクリプトと環境変数を設定するツール、バイナリー・プログラムのダウンロード、MCUデバイスのトレースのモニター、などを行います。
  • MCU APIのためのドキュメント。MCU APIはIntel Atomプロセッサーのプログラムで使用するAPIとは異なるものです。
  • MCU SDKにアップデートの適用とEclipseを実行するためのランチャー
  • LinuxスクリプトをWindows上で実行するためのCygwin

MCUはホストCPUとMCU自身で構成されています。MCUはGPIO、UART、およびI2Cインターフェースに対する、シンプルでリアルタイムのペリフェラル制御能力を開発者に提供します。Intel Edisonデバイスでは、ホストCPUはLinuxを実行するIntel Atomプロセッサーであり、そしてMCUは(スレッド・スケジューリング、メモリー管理、割り込みディスパッチなどを含む、基本的なOS機能のサポートを提供するWind Riverリアルタイム・オペレーティング・システム(RTOS)である)Viper*を実行するMinute Intel® アーキテクチャー CPUです。

MCUに接続したペリフェラルの独立した制御を行うMCUアプリケーションは、Viperカーネル上のアプリケーションとして実行されます。例えば、それはGPIOポートを管理し、センサーのデータの制御と収集を行い、さらにホストのIntel Atomプロセッサーと通信するとします。また、ボード上のIntel Atomプロセッサーをスリープ状態に保ち、必要に応じてプロセッサーをMCUがスリープの解除をさせることにより、MCUによって電力を節約することができます。

MCUドライバーは、IPCプロトコルのサポートを提供し、MCUアプリケーションをデバイスにダウンロードすることを可能にします。

ホストCPUとMCUのアーキテクチャーのダイヤグラム

MCUサブシステム

MCUサブシステムは、Intel® Pentium®アーキテクチャーに対する互換性を備えた省電力Minute Intelアーキテクチャー(IA)という486ベースのCPUシステム、I/O (IPC, I2C, GPIO, HSU, DMA)、およびSRAMを特徴とします。MCUサブシステムには以下のものが含まれます:

  • Minute Intelアーキテクチャーは486をベースとし、Pentium IA ISA互換性が追加されています。
  • 完全にアクティブなD0デバイス・パワー・ステートに入る場合、CPUの周波数は 100 MHz; S0ix “アクティブ・アイドル”なスリープ・ステートに入る場合、CPUの周波数は38.4 MHzに低下します。
  • SRAM: コードとデータの両方で使用できる192 KB SRAM
  • IPC: MCUは、MCUとIntelアーキテクチャ・コアの間のスレッドベースの通信だけではなく、サブシステムのコントロールを可能にするIPCメカニズムを提供します。
  • I2C: システム・コントローラー・ユニット(SCU)クラスターのI2C8およびI2C9は、MCUで使用するために割り当てられています。
  • UART: MCUはUART1およびUART2へアクセスすることができ、またLinuxカーネル・コンソールでも使用することがあります。
  • GPIO: MCUはすべてのGPIOポートへアクセスすることができます。
  • MCUはすべてのGPIOをホストのIntelアーキテクチャーと共有します。
  • PWM: MCUはすべてのPWMをホストのIntelアーキテクチャーと共有します。
  • MCUはマイクロ秒レベル(1 µs)の高精度ディレイAPIを提供します。詳細については補助APIセクションを参照ください。
  • デバッグ目的のために、それぞれのログ・レベルを備えたトレーシング機能を提供します。
  • MCU SDKは複数のオペレーティング・システム(Windows、MacOS X、およびLinux)において、MCUアプリケーションをユーザーが作成、ビルド、ダウンロード、およびデバッグをするためのEclipseベースのSDKです。

もしシステム全体を設計しているのであれば、ハードウェア・リソースにアクセスする際に、ホスト・システムとMCUがお互いに衝突(コンフリクト)しないことを確実にしてください。

MCU SDKのコンポーネントを以下の図に示します:

MCU SDKに含まれるコンポーネントのダイアグラム

凡例:

  • JREは、Java Runtime Environment
  • Cygwinは、WindowsにおいてLinuxスクリプトの実行を提供
  • Toolchainは、Intel® Edison Linux* OSのためのGCCクロスコンパイル・ツールチェーン
  • Launcherは、MCU SDKのランチャー・ユーザー・インターフェース
  • Scripts and toolsは、環境変数のセット、バイナリーのダウンロード、デバイスからトレースの取得、およびその他を提供

MCUアプリケーション

Intel EdisonボードのMCUアプリケーションは、Wind Riverの提供するリアルタイム・オペレーティング・システムであるViper*上で動作するユーザー・アプリケーションです。MCUアプリケーションのバイナリー・ファイルは、LinuxのRootFSに保存されて、Linux*カーネルの起動時に、MCUドライバーによってダウンロードされます。MCUアプリケーションは、独立してGPIOとUARTを制御して、センサー・データを収集および前処理を行い、ホストCPU(Intel EdisonボードのIntel Atomプロセッサー)に伝えることができ、MCUが処理を実行している間、ホストCPUは省電力状態に入ることができます。Intelは、MCUアプリケーションを開発するのを助けるために、MCU SDKとAPIのセットを提供します。

ホスト側インターフェース

ユーザー空間のLinuxアプリケーションがMCU側と通信をするために、以下にリストアップされたTTYチャンネルといくつかのsysfsノードが定義され、提供されています。

TTYインターフェース

  • /dev/ttymcu0: ホスト・アプリケーションは、このインターフェースを通じてデータをMCUと送受信することができ、そして、MCUアプリケーションはhost_sendおよびhost_receiveを介してホストと通信することができます。
  • /dev/ttymcu1: このチャネルは、MCUログ・メッセージを取得するためのインターフェースが定義されています。

Sysfsインターフェース

  • /sys/devices/platform/intel_mcu/control: このチャネルはアプリケーションをロードするための書き込み専用の制御ノードです。現状では、このノードは内部使用のためだけのものです。
  • /sys/devices/platform/intel_mcu/fw_version: MCUアプリケーションをビルドするために使用するMCU SDKのバージョンです。
  • /sys/devices/platform/intel_mcu/log_level: 現在のMCUアプリケーションのログレベルを設定および取得するための読み/書きができるノードです。サポートする入力文字列はfatal、error、warning、info、およびdebugです。

MCU SDK

MCU SDKはMCUアプリケーションを開発するためのEclipseプラグインを含んでいます。それは、MCUアプリケーションのビルド、ダウンロード、およびデバッグを行うprebuiltツールを含んでいます。テンプレート・ソース・コードはプロジェクトを作成する際に含まれ、デプロイされます。MCU SDKに含まれる主な特徴は以下の通りです:

  • MCUプロジェクトの作成
  • MCUアプリケーションのビルド
  • ターゲット機器へMCUアプリケーションのダウンロード
  • デバッグ・メッセージの表示

既知の制限

以下はIntel® Edisonプラットフォームにおける、MCU実装に関する既知の制限です:

  • CPUとMCUの間のプロセス間通信のために使用できる最大のメッセージ・サイズは現在のところ255バイトに制限されています。
  • 現在のViper OSのリリースは、それがロードされた後に、MCUユーザー・アプリケーションをロードすることをサポートしていません。ユーザーはダウンロードしたバイナリーをロードするためにデバイスをリブートしなければなりません。
  • MCUアプリケーションの更新にはLinuxのリブートを必要とします。
  • MCUバイナリーのサイズは、現状では最大で120 KBに制限されています。
  • 現在のViper OSのリリースの制限により、MCU OSの最小分解能時間(tick value)は10 msです。
  • パス名にスペースを含む、どのようなディレクトリーに対してもSDKをインストールすることはできません(例えば、Program FilesMy Documentsは許されません)。
  • MCUでは浮動小数点のサポートを全く行いません(MCUで浮動小数点を使用するコードをビルドすることができますが、それは実行時に例外を生成します)。
  • MCUは2×I2Cに制限されます。
  • MCUアプリケーションはシングル・スレッドの使用に制限されます。
  • 最初にLinuxをブートさせることなくMCUをブートさせることはできません。
  • Intel AtomプロセッサーとMCUの間において、アクセス制御は全く存在しません。両者が間髪入れずに同じI/Oを構成することができます。これは潜在的に衝突(コンフリクト)を引き起こす可能性があり、ユーザーによる管理が必要です。
  • C/C++ Eclipse SDK for the Intel Atom processorとMCU SDK(Eclipse)は、それぞれ異なり別のものです。
  • MCU I/O APIはIntel AtomプロセッサーのためのAPIとしては配置されていません。Intel AtomプロセッサーからMCUへ移行するためにコードを書き直す必要があります。
  • MCUにはウォッチドッグ・タイマーが存在しません。
  • 現在のところ、MCUはSPI機能のサポートをしていません。
  • EclipseあるいはCygwinの制限により、Windowsにおけるいくつかのネットワーク構成下でMCU SDKを実行すると、長い待機時間を必要とすることがあります。
  • MCUを開始する前に、Linuxインターフェースを通してピンの多重化制御(Arduino拡張ボードの構成)をする必要があります。詳細についてはSystem on a Chip (SoC)のGPIOをテストするためにIntel® Edisonボードを設定するを参照ください。
  • このモジュールにアクセスするためには、Linux側からPWM実行時のパワー・マネージメントを無効にする必要があります。詳細についてはPWMポートを制御するを参照ください。
  • MCUで使用可能などのようなプログラマブルなタイマー割り込みは存在しません。

まとめ

基本的なIntel Edison Compute ModuleにおけるMCUの位置づけと、MCU SDKについての各種説明です。いろいろな可能性と、意外な制限があり、対応するMCUアプリケーションの開発はそれなりに手がかかりそうな印象です。

このページからリンクされているページのうち、日本語意訳メモを作成していないものは原文のページへのリンクとしています。日本語メモを作成し次第、リンク先を差し替える予定です。

※Intel Corporationあるいは関連会社より削除の要請があった場合には予告なく削除しますので、あらかじめご了承ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です