Intel EdisonのMCU SDKの日本語意訳(6/9):MCU SDKとAPIの使用: コードの例

はじめに

このメモは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とAPIの使用: コードの例

このセクションではMCU SDKと付随するAPIを使用するためのコードの例を示します。以下のリンクを参照ください:

要件

このページの例は、以下の要件を満たしていることを前提としています:

I2Cデバイスから値を読み出してホストに送る

この例では、I2Cインターフェースを通してMPU6050センサーのWHOAMIレジスターの値を読み出し、それをホストに送り返します。このセットアップのために、ブレッドボード、適切な値の抵抗(I2Cデバイス仕様に従うもの)、およびいくつかのジャンパー・ワイヤーなどの何らかの付加的なハードウェアを必要とすることがあります。

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
    
    /* MPU6050のI2Cアドレス */
    #define MPU6050_ADDR    0x68
    /* WHOAMIレジスターのレジスターアドレスで、これはデバイスの識別や
       検証をするために使用します。 */
    #define MPU6050_WHOAMI          ((unsigned char)0x75)
    #define MPU6050_WHOAMI_VALUE    ((unsigned char)0x68)
    
    static unsigned char mpu6050_read_whoami()
    {
        unsigned char id;
        int res;
        res = i2c_read(MPU6050_ADDR, MPU6050_WHOAMI, &id, 1);
        if (res)
        {
            debug_print(DBG_ERROR, "mpu6050_i2c_read whoami fail...");
            // 「mpu6050_read_whoamiの失敗...」の意
            return 0Xff;
        }
        if (id != MPU6050_WHOAMI_VALUE)
        {
            debug_print(DBG_ERROR, "wrong chip ID 0x%x, expected 0x%x\n", 
                        id, MPU6050_WHOAMI_VALUE);
            // 「想定しないチップID 0x%x, 想定値 0x%x」の意
            return 0xff;
        }
        return id;
    }
    
    void mcu_main()
    {
        unsigned char device_id;
        char buf[16];
        int len;
        while (1)
        {
            mcu_sleep(300);
            debug_print(DBG_INFO, "after sleep 3 seconds\n");
            // 「3秒間スリープしました。」の意
            device_id = mpu6050_read_whoami();
            len = mcu_snprintf(buf, 16, "id = %d\n", device_id);
            host_send((unsigned char*)buf, len);
        }
    }
  3. MPU6050センサーとIntel Edisonボードの間のI2C回路をセット・アップします。以下の図で示すように、I2CインターフェースのSDA、SCL、VCC、およびGNDポートを接続します。この例では、ArduinoにMPU-6050の3軸ジャイロスコープおよび加速度センサー・モジュールを使用しました。

    I2C回路の設定図

  4. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  5. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  6. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  7. Edisonのシェルで「init_i2c8.sh」を実行します。
  8. 「cat /dev/ttymcu0」と実行して、MCUがhost_send() APIで送信したデータを受け取った例を以下に示します:
    root@edison:~# cat /dev/ttymcu0
    id = 104
    id = 104
    id = 104

3秒ごとに出力がなされることを確認することができます。

UARTを経由してデータを送信する

ホストとMCUでUART2(例えば、ttyMFD2)を共有しているため、MCUを通じてデータをUART2へ送ることができます。UARTでデータを送るためのMCUプロジェクトを作成するためには以下のようにします:

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
    /*
     * このプログラムはUART2へ3秒ごとに文字列を送信します。
     */
    void mcu_main()
    {
        /* your configuration code starts here */
        /* (ここに構成するためのコードを開始します) */
        uart_setup(2, 115200);
     
        while (1)
        {
            uart_write(2, (unsigned char*)"hello mcu\r\n", 11);
            // 「こんにちは、MCU」の意
            mcu_sleep(300);
        }
    }
  3. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  4. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  5. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  6. UART2が現時点で接続されていないなら、Arduinoシリアル・ポートをコンピューターに接続します。
  7. もしも成功しているなら、MCUからの以下の出力を確認することができます:
    hello mcu
    hello mcu
    hello mcu

PWMポートを制御する

MCUはPWM0からPMW3までのすべてのPWMポートにアクセスすることができます。PWM周期は104 nsから218,453,000 nsまでを設定することができます。この例では、MCUがどのようにPWMを制御することができるかを示します。

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
     
    #define PORT 0
     
    void mcu_main()
    {
            /* PWMの構成と有効化 */
            pwm_configure(PORT, 60000, 200000);
            pwm_enable(PORT);
     
            while (1)
            {
                    mcu_sleep(2000);
                    debug_print(DBG_INFO, "I am still alive...\n");
                    // 「私はまだ生きてる...」の意
            }
    }
  3. 以下に示すように/etc/intel_mcu/mcu_fw_loader.shファイルを編集して、Linux*側でPWMパワー・マネージメントを無効にします。これによってMCUがPWMモジュールを構成することができるようになります。
    root@edison:/etc/intel_mcu# cat mcu_fw_loader.sh
    #!/bin/sh
    #author: JiuJin Hong (jiujinx.hong@intel.com)
    if [ ! -d "/sys/devices/platform/intel_mcu" ];then
            exit
    fi
    if [ ! -f "/lib/firmware/intel_mcu.bin" ];then
            exit
    fi
    echo "on" > /sys/devices/pci0000\:00/0000\:00\:17.0/power/control
    echo "load mcu app" > /sys/devices/platform/intel_mcu/control
  4. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  5. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  6. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  7. init_mcu_PWM.shを実行して、Arduino拡張ボードのためにPWMを構成するためのセット・アップを行います。
  8. PWM0がマップされたDIG3※5の出力を測定します。以下のイメージと同様のDIG出力をスクリーンで確認することができるでしょう:

    デジタル出力の表示スクリーンの例

デフォルトのArduinoのDIG番号が以下の表に示すようにPWMポート番号に割り当てられています:

PWMポート 0 1 2 3
Arduinoのデジタル・ポート 3 5 6 9

GPIOポートのための割り込みハンドラーを登録する

この例では、MCUのための割り込みハンドラーをどのように登録するかを示します。

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
     
     
     /*
      * このプログラムは、割り込みハンドラーとしてEdison ArduinoボードのDIG 7に
      * 接続されたGPIO 48を使用します。GPIO 48で定義したISRのトリガーとなる、
      * GPIO 49(DIG 8)を割り込み入力としてシミュレートします。
      */
     
     int my_irq(int req)
     {
       debug_print(DBG_INFO, "Interrupt triggered!\n");
       /* 「割り込みが呼び出された!」の意 */
       return IRQ_HANDLED;
     }
     
     void mcu_main()
     {
        /* your configuration code starts here */
        /* (ここに構成するためのコードを開始します) */
        gpio_setup(48, 0);  /* GPIO 48を入力に設定します */
        gpio_setup(49, 1);  /* GPUO 49 (DIG) を出力に設定し、割り込みトリガーとします */
        gpio_register_interrupt(48, 0, my_irq); /* GPIO 48にISRを定義します */
        while (1)
        {
            debug_print(DBG_INFO, "I am in main loop!\n");
            /* 「私はメイン・ループです!」の意  */
            gpio_write(49, 0);
            mcu_sleep(300);         /* 3秒間スリープ */
            gpio_write(49, 1);
            mcu_sleep(300);         /* 3秒間スリープ */
        }
     }
  3. ワイヤーでArduinoのデジタル・ポート7をデジタル・ポート8に接続します。DIG 7は割り込みとして使用します。そして、DIG 8はトリガーをシミュレートするために使用します。
  4. デバイスの電源を入れます。
  5. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  6. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  7. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  8. リブート後に、Arduino拡張ボードのためのGPIOの構成をセットアップするためにinit_DIG.sh -o 7 -d inputおよびinit_DIG.sh -o 8 -d outputと実行します。
    root@edison:~# ./tools/init_DIG.sh -o 7 -d input
    DIG = 7
    DIR = input
    root@edison:~# ./tools/init_DIG.sh -o 8 -d output
    DIG = 8
    DIR = output
    root@edison:~#
  9. cat /dev/ttymcu1を実行して、MCUからのデバッグ・メッセージを取得します。以下に示すように、メイン・スレッドとGPIOのハンドラー関数の両方からログ・メッセージへ割り込みをかける様子を確認することができます。
    root@edison:~# cat /dev/ttymcu1
    ( INFO): I am in main loop!
    ( INFO): Interrupt triggered!
    ( INFO): I am in main loop!
    ( INFO): Interrupt triggered!
    ( INFO): I am in main loop!
    ( INFO): Interrupt triggered!
    ^C

ホストとMCUの間で通信をする

この例はMCUがどのようにホストからコマンドを受け取り、その応答をホストに送ることができるかを示します。

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
    #include <string.h>
     
    void mcu_main()
    {
        /* your configuration code starts here */
        /* (ここに構成するためのコードを開始します) */
        char buf[64];
        int len;
     
        while (1)       /* your loop code starts here */
        {
            do {
                len = host_receive((unsigned char *)buf, 64);
                mcu_sleep(10);
            } while (len <= 0);
            if (strncmp(buf, "start", 5) == 0)
            {
                debug_print(DBG_INFO, "received start command!\n");
                // 「コマンドの受信を開始!」の意
                host_send((unsigned char*)"hello mcu\n", 10);
            }
        }
    }
  3. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  4. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  5. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  6. 対象のデバイスでecho "start" > /dev/ttymcu0を実行します。
  7. 以下に示す例の出力のようにcat /dev/ttymcu0は応答を受け取ります:
    root@edison:~# cat /dev/ttymcu0
    ^C
    root@edison:~# echo “start” > /dev/ttymcu0
    root@edison:~# cat /dev/ttymcu0
    hello mcu
    ^C

あるいは、代替手段としてC言語によるコードを使用することで応答を得ることができます。以下に示すコードの例はホスト側のC言語のコードによって接続を行う例です:

#include <stdio.h>   /* 標準入出力の定義 */
#include <fcntl.h>   /* ファイル制御の定義 */
int main()
{
    int fd;
    unsigned char data;
    unsigned char buf[100];
    int i, n;
    fd = open("/dev/ttymcu0", O_RDWR | O_NOCTTY);
    if (fd == -1)
    {
        printf("open ttymcu0 failed!\n");
        // 「ttymcu0のオープンに失敗しました」の意
        return 1;
    }
 
    i = 0;
 
    do
    {
        n = read(fd, amp;data, 1);
        buf[i] = data;
        i++;
    } while(data != '\n' amp;amp; i < 100);
 
    i = (i >=99? 99:i);
    buf[i] = '\0';
    printf("Response from MCU: %s", buf);
    // 「MCUからの応答」の意
 
    close(fd);
    return 0;
}

MCUを使用してホストCPUを目覚めさせる

消費電力が重要な状況下において、MCUがアクティブとなって必要なデータを収集してからCPUをスリープ状態を解除することにより、ホストCPUをスリープ状態に保つことができます。MCUはhost_sendおよびhost_receiveというAPIを通じてホストと通信することができます。MCUがhost_sendを使用することでホストのスリープを解除することができます。この例では、2分毎にCPUのスリープを解除するためにどのようにMCUが動作すべきかを示しています。

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
     
     
    void mcu_main()
    {
        /* your configuration code starts here */
        /* (ここに構成するためのコードを開始します) */
     
        while (1)       /* your loop code starts here */
                        /* (ここにループで実行するコードを開始します) */
        {
            mcu_sleep(12000);   /* wake up CPU every 2 minutes */
                                /* (2分毎にCPUを目覚めさせる) */
            host_send((unsigned char*)"wake up!\n", 10);
            // 「目覚めて!」の意
        }
    }
  3. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  4. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  5. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  6. 以下に示すように、cat /proc/interruptsを使用してMCUからの割り込み数のカウントと/dev/ttymcu0への出力を確認してください:
    Poky (Yocto Project Reference Distro) 1.6.1 edison ttyMFD2
    
    edison login: root
    root@edison:~#
    root@edison:~# cat /proc/interrupts | grep intel_psh_ipc
     47:          1          1   IO-APIC-fasteoi   intel_psh_ipc
    root@edison:~# cat ttymcu0
    ^C
    root@edison:~#

    注記: シリアル・ポートのパワー・マネージメントを有効にするために、以下のコマンドを実行する必要があることがあります:
    echo auto > /sys/devices/pci0000\:00/0000\:00\:04.3/power/control
    シリアル・ポートからの入力が全くない場合には、CPUをスリープ状態にします。

  7. 数分間待ったうえで再度確認を行ってください。以下に示すようにMCUからの割り込みによってスリープ状態を解除されたCPUが/dev/ttymcu0からMPUによる文字列を表示することを確認することができます:
    root@edison:~# cat /proc/interrupts | grep intel_psh_ipc
    47: 2 2 IO-APIC-fasteoi intel_psh_ipc
    root@edison:~# cat ttymcu0
    wake up!
    wake up!
    ^C
    root@edison:~#

MCUからデバッグ・メッセージを取得する

TTYドライバーはLinux側に位置しており、デバッグ・メッセージを取得するためにMCUと通信することができます。
以下のサンプルはMCUが異なるログ・レベルにおいてどのようにLinux側にメッセージを出力するかを示しています。MCUからTTYノードへのデバッグ・メッセージを取得することがd系ます。

  1. テンプレートから新しいプロジェクトを作成します。手順については、新しいMCUプロジェクトを作成を参照ください。
  2. メイン・ファイルの中に、以下のコードをペーストします:
    #include "mcu_api.h"
    #include "mcu_errno.h"
    /*
    * This program outputs debug messages to host in different loglevel every 10 seconds
    */
    void mcu_main()
    {
        /* your configuration code starts here */
        /* (ここに構成するためのコードを開始します) */
        while (1)       /* your loop code starts here */
                        /* (ここにループで実行するコードを開始します) */
       {
            debug_print(DBG_DEBUG, "mcu dbg message print in DEBUG      level...\n");
            // 「DEBUGレベルのMCUデバッグ・メッセージ」の意
            debug_print(DBG_INFO, "mcu dbg message print in INFO level...\n");
            // 「INFOレベルのMCUデバッグ・メッセージ」の意
            debug_print(DBG_WARNING, "mcu dbg message print in WARNING level...\n");
            // 「WARNINGレベルのMCUデバッグ・メッセージ」の意
            debug_print(DBG_ERROR, "mcu dbg message print in ERROR level...\n");
            // 「ERRORレベルのMCUデバッグ・メッセージ」の意
            debug_print(DBG_FATAL, "mcu dbg message print in FATAL level...\n");
            // 「FATALレベルのMCUデバッグ・メッセージ」の意
            mcu_sleep(1000);
        }
    }
  3. プロジェクトをビルドするため、「MCU > Build Project」と選択します。「Console」タブにビルド・プロセスのログが表示されます。プロジェクトのビルドが成功し、「Build Finished」メッセージが表示されることを確認します。
  4. 「MCU > Download」と選択します。デバイスへプログラムがダウンロードされます。
  5. 「OK」をクリックしてデバイスの更新とリブートをします。ボードがリスタートするまで2分程度の時間が必要です。
  6. Intel Edisonボードに接続し、実行します:
    1. cat /dev/ttymcu1 – MCUからのデバッグ・メッセージを取得します。
    2. cat /sys/devices/platform/intel_mcu/log_level – MCUの現在のログ・レベルを取得します。
    3. echo debug > /sys/devices/platform/intel_mcu/log_level MCUのデバッグ・ログ・レベルを設定します。
      root@edison:~# cat /dev/ttymcu1
      (DEBUG) : mcu dbg message print in DEBUG level...
      ( INFO) : mcu dbg message print in INFO level...
      ( WARN) : mcu dbg message print in WARN level...
      (ERROR) : mcu dbg message print in ERROR level...
      (FATAL) : mcu dbg message print in FATAL level...
      root@edison:~#
      root@edison:~# cat /sys/devices/platform/intel_mcu/log_level
      debug
      root@edison:~#
      root@edison:~# echo "debug" > /sys/devices/platform/intel_mcu/log_level
      root@edison:~#

利用可能なすべてのログ・レベルからメッセージを得たいのであれば、debuglog_levelに設定すべきです。debugは最高レベルにあります。レベルが現在のレベルよりも低いものをMCUはメッセージ出力します。MCUのログ・レベルはfatalerrorwarninginfoおよびdebugがあります

System on a Chip (SoC)のGPIOをテストするためにIntel® Edisonボードを設定する

このセクションでは、Intel EdisonボードのGPIOにおけるテストを準備するための情報を提供します。GPIOをテストするために、一連のスクリプトをボードにアップロードし、chmodコマンドを使用して実行可能にする必要があります。MCU SDKスクリプトをボードにロードするための説明のように、すでにこれらのスクリプトをアップロードしているのであれば、手順のこの部分を繰り返す必要はありません。

注記: Arduinoシールドで使用可能なSoCのGPIOだけをテストしました。

要件

  1. GPIOをテストするためにボードを初期化する必要があります。そのために、init_DIG.shset_DIG.sh、およびread_DIG.shというファイルをホスト・システムの/home/lab/GPIOディレクトリーへダウンロードします。
  2. シェルを開いて、ファイルをボードに送るための以下のコマンドを実行します:
    scp ~/GPIO/*.sh root@192.168.2.15:~
    ssh root@192.168.2.15 "chmod +x ~/*_DIG.sh "

    注記: IP_ADDR変数をexportします(オプション)。Intel EdisonボードのIPアドレスをそれぞれのテスト手順で個別に指定することを避けるために、以下のコマンドを使用することで現在のシェル環境に(それを)設定することができます:
    IP_ADDR=192.168.2.15
    あるいは、(あらゆるシェルの)プロフィールである~/.profileファイルを編集し、最終行に以下の内容を加えます:
    export IP_ADDR=192.168.2.15

    注記: GPIOをテストするために、シールド上へSoCのGPIOを割り当てるためにマルチプレクサー(多重化)を設定するための初期化スクリプトinit_DIG.shを使用します。
    root@edison:~# init_DIG.sh -o <number> -d <direction>

    …<number>はデジタル出力番号および<direction>は入力(input)または出力(output)モードを指定します。

  3. 以下は出力として動作するコマンドの例です:
    1. DIG3を出力に初期化します:
      root@edison:~# ./init_DIG.sh -o 3 -d output
    2. Highレベルの出力を設定します:
      root@edison:~# ./set_DIG.sh -o 3 -v high
    3. Lowレベルの出力を設定ます:
      root@edison:~# ./set_DIG.sh -o 3 -v low
  4. 以下は入力で動作するコマンドの例です:
    1. DIG3を出力にするための初期化:※6
      root@edison:~# ./init_DIG.sh -o 3 -d input
    2. 入力ステータスを読み出します(lowまたはhigh):
      root@edison:~# ./read_DIG.sh -o 3

まとめ

この例によって、現在のMCU SDKでサポートされるコードの例が一通り示されています。ホスト側(Atom側)とMCU側の使い分けをうまくすることで負荷分散をしつつ、細かい制御が可能になり、また低消費電力化が進められる可能性があります。より効果的にIntel Edison Compute Moduleを使用するために、参考になるコードの例となることでしょう。

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


  • インテル株式会社による表現がそうなっているので、それに合わせています。
  • インテル株式会社による表現がそうなっているので、それに合わせています。
  • 質問者の技術レベルに応じて必要な回答を用意するのは、非常に高いスキルと多くの時間を必要とするものです。私はこれらのサービスが可能な状態にはありません。
  • 訳注: 原文のリンク先はNot Foundであったため、「おそらくこのページにリンクをしたかったのだろう」と思われるリンク先に変更しています。
  • 訳注: Arduino拡張ボードのD3のことです。
  • 訳注: どうみても入力の初期化です。

コメントを残す

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