Intel EdisonのMCU SDKの日本語意訳(8/9):MCU SDKのためのサンプル・スクリプト

はじめに

このメモは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のためのサンプル・スクリプト

このセクションにはMCU SDKから参照されているコードの例を含むサンプル・スクリプトと、利便性のためのダウンロード・リンクが含まれます。

スクリプト ダウンロード・リンク
init_DIG.sh http://downloadmirror.intel.com/24910/eng/init_DIG.sh
init_i2c8.sh http://downloadmirror.intel.com/24910/eng/init_i2c8.sh
init_mcu_PWM.sh http://downloadmirror.intel.com/24910/eng/init_mcu_PWM.sh
set_DIG.sh http://downloadmirror.intel.com/24910/eng/set_DIG.sh
read_DIG.sh http://downloadmirror.intel.com/24910/eng/read_DIG.sh
init_UART1.sh http://downloadmirror.intel.com/24910/eng/init_UART1.sh

init_DIG.sh

このシェル・スクリプトは以下の場所から利用可能です: http://downloadmirror.intel.com/24910/eng/init_DIG.sh

#!/bin/sh
#author: David Pierret (davidx.pierret@intel.com)
#this script setup Edison/Arduino board to use DIG0 to DIG13 as GPIOs
#
#history
#
# V1 : only use debugfs for SoC gpios
# V2 : only use sysfs for SoC gpios
# V3 : use both debugfs and sysfs for SoC gpios
# V4 : correction of bugs.

DIG=""
DIR=""

usage() {
echo "usage $0 -o [num] -d [direction]" >&2
echo "work only on build edison-latest-99-2014-07-16_14-39-50 and next"
echo "num : number of the digital output 0->13" >&2
echo "direction : 'input' or 'output'" >&2
exit 1
}

export_gpio() {
        if [ $# -ne 1 ]; then
                echo "erreur appel fonction $0"
                exit 2
        fi
        if [ ! -d /sys/class/gpio/gpio$1 ]; then
                echo $1 > /sys/class/gpio/export
        fi
}

while getopts "o:(output)d:(direction)" optname
        do
                case "$optname" in
        "o")
                        DIG=$OPTARG
          ;;
        "d")
                        DIR=$OPTARG
          ;;
        "?")
                        usage
          ;;
        ":")
                        usage
          ;;
        *)
        # Should not occur
          echo "Unknown error while processing options"
          ;;
                esac
        done

echo "DIG = $DIG"
echo "DIR = $DIR"
# check the dig number var
if [ ! "$DIG" -ge 0 -a "$DIG" -le 13 ]; then
        usage
fi
# check the direction var
if [ "$DIR" != "output" -a "$DIR" != "input" ]; then
        usage
fi

export_gpio 214

echo low > /sys/class/gpio/gpio214/direction

case $DIG in
#gp130 to DIG0
0)
        export_gpio 248
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio130/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio248/direction #config as output
                echo out > /sys/class/gpio/gpio130/direction
        else
                echo low > /sys/class/gpio/gpio248/direction #config as input
                echo in > /sys/class/gpio/gpio130/direction
        fi
;;

#gp131 to DIG1
1)
        export_gpio 249
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio131/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio249/direction #config as output
                echo out > /sys/class/gpio/gpio131/direction
        else
                echo low > /sys/class/gpio/gpio249/direction #config as input
                echo in > /sys/class/gpio/gpio131/direction
        fi
;;

#gp128 to DIG2
2)
        export_gpio 250
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio128/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio250/direction #config as output
                echo out > /sys/class/gpio/gpio128/direction
        else
                echo low > /sys/class/gpio/gpio250/direction #config as input
                echo in > /sys/class/gpio/gpio128/direction
        fi
;;

#gp12 to DIG3
3)
        export_gpio 251
        export_gpio 12
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio12/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio251/direction #config as output
                echo out > /sys/class/gpio/gpio12/direction
        else
                echo low > /sys/class/gpio/gpio251/direction #config as input
                echo in > /sys/class/gpio/gpio12/direction
        fi
;;

#gp129 to DIG4
4)
        export_gpio 252
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio129/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio252/direction #config as output
                echo out > /sys/class/gpio/gpio129/direction
        else
                echo low > /sys/class/gpio/gpio252/direction #config as input
                echo in > /sys/class/gpio/gpio129/direction
        fi
;;

#gp13 to DIG5
5)
        export_gpio 253
        export_gpio 13
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio13/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio253/direction #config as output
                echo out > /sys/class/gpio/gpio13/direction
        else
                echo low > /sys/class/gpio/gpio253/direction #config as input
                echo in > /sys/class/gpio/gpio13/direction
        fi
;;

#gp182 to DIG6
6)
        export_gpio 254
        export_gpio 182
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio182/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio254/direction #config as output
                echo out > /sys/class/gpio/gpio182/direction
        else
                echo low > /sys/class/gpio/gpio254/direction #config as input
                echo in > /sys/class/gpio/gpio182/direction
        fi
;;

#gp48 to DIG7
7)
        export_gpio 255
        export_gpio 48
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio48/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio255/direction #config as output
                echo out > /sys/class/gpio/gpio48/direction
        else
                echo low > /sys/class/gpio/gpio255/direction #config as input
                echo in > /sys/class/gpio/gpio48/direction
        fi
;;

#gp49 to DIG8
8)
        export_gpio 256
        export_gpio 49
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio49/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio256/direction #config as output
                echo out > /sys/class/gpio/gpio49/direction
        else
                echo low > /sys/class/gpio/gpio256/direction #config as input
                echo in > /sys/class/gpio/gpio49/direction
        fi
;;

#gp183 to DIG9
9)
        export_gpio 257
        export_gpio 183
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio183/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio257/direction #config as output
                echo out > /sys/class/gpio/gpio183/direction
        else
                echo low > /sys/class/gpio/gpio257/direction #config as input
                echo in > /sys/class/gpio/gpio183/direction
        fi
;;

#gp41 to DIG10
10)
        export_gpio 258
        export_gpio 240
        export_gpio 263
        echo low > /sys/class/gpio/gpio240/direction
        echo high > /sys/class/gpio/gpio263/direction

        if [ ! -d /sys/class/gpio/gpio41 ]; then
                echo 41 > /sys/class/gpio/export
        fi
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio41/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio258/direction #config as output
                echo out > /sys/class/gpio/gpio41/direction
        else
                echo low > /sys/class/gpio/gpio258/direction #config as input
                echo in > /sys/class/gpio/gpio41/direction
        fi
;;

#gp43 to DIG11
11)
        export_gpio 259
        export_gpio 241
        export_gpio 262
        export_gpio 43
        echo low > /sys/class/gpio/gpio241/direction
        echo high > /sys/class/gpio/gpio262/direction
        
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio43/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio259/direction #config as output
                echo out > /sys/class/gpio/gpio43/direction
        else
                echo low > /sys/class/gpio/gpio259/direction #config as input
                echo in > /sys/class/gpio/gpio43/direction
        fi
;;

#gp42 to DIG12
12)
        export_gpio 260
        export_gpio 242
        export_gpio 42
        echo low > /sys/class/gpio/gpio242/direction
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio42/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio260/direction #config as output
                echo out > /sys/class/gpio/gpio42/direction
        else
                echo low > /sys/class/gpio/gpio260/direction #config as input
                echo in > /sys/class/gpio/gpio42/direction
        fi
;;

#gp40 to DIG13
13)
        export_gpio 261
        export_gpio 243
        export_gpio 40
        echo low > /sys/class/gpio/gpio243/direction
        echo mode0 > /sys/kernel/debug/gpio_debug/gpio40/current_pinmux
        if [ $DIR == "output" ]; then
                echo high > /sys/class/gpio/gpio261/direction #config as output
                echo out > /sys/class/gpio/gpio40/direction
        else
                echo low > /sys/class/gpio/gpio261/direction #config as input
                echo in > /sys/class/gpio/gpio40/direction
        fi
;;
*) 
        usage
;;
esac

echo high > /sys/class/gpio/gpio214/direction

init_i2c8.sh

このシェル・スクリプトは以下の場所から利用可能です: http://downloadmirror.intel.com/24910/eng/init_i2c8.sh

echo 28 > /sys/class/gpio/export
echo 27 > /sys/class/gpio/export
echo 204 > /sys/class/gpio/export
echo 205 > /sys/class/gpio/export
echo 236 > /sys/class/gpio/export
echo 237 > /sys/class/gpio/export
echo 14 > /sys/class/gpio/export
echo 165 > /sys/class/gpio/export
echo 212 > /sys/class/gpio/export
echo 213 > /sys/class/gpio/export
if [ ! -d /sys/class/gpio/gpio214 ]; then
        echo 214 > /sys/class/gpio/export
fi
echo high > /sys/class/gpio/gpio214/direction
echo low > /sys/class/gpio/gpio204/direction
echo low > /sys/class/gpio/gpio205/direction
echo in > /sys/class/gpio/gpio14/direction
echo in > /sys/class/gpio/gpio165/direction
echo low > /sys/class/gpio/gpio236/direction
echo low > /sys/class/gpio/gpio237/direction
echo in > /sys/class/gpio/gpio212/direction
echo in > /sys/class/gpio/gpio213/direction
echo mode2 > /sys/kernel/debug/gpio_debug/gpio28/current_pinmux
echo mode2 > /sys/kernel/debug/gpio_debug/gpio27/current_pinmux

init_mcu_PWM.sh

このシェル・スクリプトは以下の場所から利用可能です: http://downloadmirror.intel.com/24910/eng/init_mcu_PWM.sh

#!/bin/sh
#based on exemple from GSG_GPIO_PinMux_Control_FabB.pdf Intel internal document.
#exporting TRI_STATE_ALL
if [ ! -d /sys/class/gpio/gpio214 ]; then
        echo 214 > /sys/class/gpio/export
fi
echo low > /sys/class/gpio/gpio214/direction
#PWM 0 to DIG3
echo 251 > /sys/class/gpio/export
echo 219 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio251/direction
echo in > /sys/class/gpio/gpio219/direction

#PWM 1 to DIG5
echo 253 > /sys/class/gpio/export
echo 221 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio253/direction
echo in > /sys/class/gpio/gpio221/direction

#PWM 2 to DIG6
echo 254 > /sys/class/gpio/export
echo 222 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio254/direction
echo in > /sys/class/gpio/gpio222/direction

#PWM 3 to DIG9
echo 257 > /sys/class/gpio/export
echo 225 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio257/direction
echo in > /sys/class/gpio/gpio225/direction

#PWM 4 to DIG10 (PWM2)
#echo 263 > /sys/class/gpio/export
#echo 258 > /sys/class/gpio/export
#echo 225 > /sys/class/gpio/export
#echo high > /sys/class/gpio/gpio214/direction
#echo high > /sys/class/gpio/gpio263/direction
#echo high > /sys/class/gpio/gpio258/direction
#echo in > /sys/class/gpio/gpio226/direction
#echo mode1 > /sys/kernel/debug/gpio_debug/gpio182/current_pinmux
#echo low > /sys/class/gpio/gpio214/direction
#echo 2 > /sys/class/pwm/pwmchip0/export

echo high > /sys/class/gpio/gpio214/direction

set_DIG.sh

このシェル・スクリプトは以下の場所から利用可能です: http://downloadmirror.intel.com/24910/eng/set_DIG.sh

#!/bin/sh
#author: David Pierret (davidx.pierret@intel.com)
#this script setup Edison/Arduino board to use DIG0 to DIG13 as GPIOs

DIG=""
VAL=""

usage() {
echo "usage $0 -o [num] -v [value]" >&2
echo "init_DIG.sh must be called before"
echo "num : number of the digital output 0->13" >&2
echo "value : 'low' or 'high'" >&2
exit 1
}

## set_output [mux] [gpio] [value]
## [mux] gpio to check to control level switcher
## [gpio] gpio number to read
## [value] value to apply
set_output() {
        if [ $# -ne 3 ]; then
                echo "erreur appel fonction $0"
                exit 2
        fi
        if [ ! -d /sys/class/gpio/gpio$1 ]; then
                usage
        fi
        if [ ! $(cat /sys/class/gpio/gpio$1/direction) == "out" ]; then
                usage
        fi
#       echo $VAL > /sys/kernel/debug/gpio_debug/gpio130/current_value
        echo $3 > /sys/class/gpio/gpio$2/direction
}

while getopts "o:(output)v:(value)" optname
        do
                case "$optname" in
        "o")
                        DIG=$OPTARG
          ;;
        "v")
                        VAL=$OPTARG
          ;;
        "?")
                        usage
          ;;
        ":")
                        usage
          ;;
        *)
        # Should not occur
          echo "Unknown error while processing options"
          ;;
                esac
        done


echo "DIG = $DIG"
echo "VAL = $VAL"
# check the dig number var
if [ ! "$DIG" -ge 0 -a "$DIG" -le 13 ]; then
        usage
fi
# check the direction var
if [ "$VAL" != "high" -a "$VAL" != "low" ]; then
        usage
fi

if [ ! -d /sys/class/gpio/gpio214 ]; then
        echo 214 > /sys/class/gpio/export
fi
echo low > /sys/class/gpio/gpio214/direction

case $DIG in
#gp130 to DIG0
0)
        set_output 248 130 $VAL
;;
#gp131 to DIG1
1)
        set_output 249 131 $VAL

;;

#gp128 to DIG2
2)
        set_output 250 128 $VAL
;;

#gp12 to DIG3
3)
        set_output 251 12 $VAL
;;

#gp129 to DIG4
4)
        set_output 252 129 $VAL
;;

#gp13 to DIG5
5)
        set_output 253 13 $VAL
;;

#gp182 to DIG6
6)
        set_output 254 182 $VAL

;;

#gp48 to DIG7
7)
        set_output 255 48 $VAL
;;

#gp49 to DIG8
8)
        set_output 256 49 $VAL
;;

#gp183 to DIG9
9)
        set_output 257 183 $VAL
;;

#gp41 to DIG10
10)
        set_output 258 41 $VAL
;;

#gp43 to DIG11
11)
        set_output 259 43 $VAL
;;

#gp42 to DIG12
12)
        set_output 260 42 $VAL
;;

#gp40 to DIG13
13)
        set_output 261 40 $VAL
;;

*) 
        usage
;;

esac

echo high > /sys/class/gpio/gpio214/direction

read_DIG.sh

このシェル・スクリプトは以下の場所から利用可能です: http://downloadmirror.intel.com/24910/eng/read_DIG.sh

#!/bin/sh
#author: David Pierret (davidx.pierret@intel.com)
#this script setup Edison/Arduino board to use DIG0 to DIG13 as GPIOs

DIG=""
VAL=""

usage() {
echo "usage $0 -o [num]" >&2
echo "init_DIG.sh must be called before"
echo "num : number of the digital input 0->13" >&2
exit 1
}

## set_output [mux] [gpio]
## [mux] gpio to check to control level switcher
## [gpio] gpio number to read
read_input() {
        if [ $# -ne 2 ]; then
                echo "erreur appel fonction $0"
                exit 2
        fi
        if [ ! -d /sys/class/gpio/gpio$1 ]; then
                usage
        fi
        if [ ! $(cat /sys/class/gpio/gpio$1/direction) == "out" ]; then
                usage
        fi
#       cat /sys/kernel/debug/gpio_debug/gpio$2/current_value
        cat /sys/class/gpio/gpio$2/value
}

while getopts "o:(output)" optname
        do
                case "$optname" in
        "o")
                        DIG=$OPTARG
          ;;
        "?")
                        usage
          ;;
        ":")
                        usage
          ;;
        *)
        # Should not occur
          echo "Unknown error while processing options"
          ;;
                esac
        done

# check the dig number var
if [ ! "$DIG" -ge 0 -a "$DIG" -le 13 ]; then
        usage
fi

if [ ! -d /sys/class/gpio/gpio214 ]; then
        echo 214 > /sys/class/gpio/export
fi
echo high > /sys/class/gpio/gpio214/direction

case $DIG in
#gp130 to DIG0
0)
        read_input 248 130
;;
#gp131 to DIG1
1)
        read_input 249 131

;;

#gp128 to DIG2
2)
        read_input 250 128
;;

#gp12 to DIG3
3)
        read_input 251 12
;;

#gp129 to DIG4
4)
        read_input 252 129
;;

#gp13 to DIG5
5)
        read_input 253 13
;;

#gp182 to DIG6
6)
        read_input 254 182

;;

#gp48 to DIG7
7)
        read_input 255 48
;;

#gp49 to DIG8
8)
        read_input 256 49
;;

#gp183 to DIG9
9)
        read_input 257 183
;;

#gp41 to DIG10
10)
        read_input 258 41
;;

#gp43 to DIG11
11)
        read_input 259 43
;;

#gp42 to DIG12
12)
        read_input 260 42
;;

#gp40 to DIG13
13)
        read_input 261 40
;;

*) 
        usage
;;

esac

echo low > /sys/class/gpio/gpio214/direction

init_UART1.sh

このシェル・スクリプトは以下の場所から利用可能です: http://downloadmirror.intel.com/24910/eng/init_UART1.sh

#!/bin/sh
#author:Jiujin Hong (Jiujinx.hong@intel.com)
#
#this script setup Edison/Arduino board to use DIG0/DIG1 as UART1 RX/UART1 TX
#
#

export_gpio() {
        if [ $# -ne 1 ]; then
                echo "erreur appel fonction $0"
                exit 2
        fi
        if [ ! -d /sys/class/gpio/gpio$1 ]; then
                echo $1 > /sys/class/gpio/export
        fi
}

#config DIG0 UART1 RX mode and level shiffter
export_gpio 248
echo mode1 > /sys/kernel/debug/gpio_debug/gpio130/current_pinmux
echo low > /sys/class/gpio/gpio248/direction #config as input
echo in > /sys/class/gpio/gpio130/direction

#config DIG1 UART1 RX mode and level shiffter
export_gpio 249
echo mode1 > /sys/kernel/debug/gpio_debug/gpio131/current_pinmux
echo high > /sys/class/gpio/gpio249/direction #config as output
echo out > /sys/class/gpio/gpio131/direction

まとめ

このページはどこまで日本語訳をすべきなのか少々考え込みました。1つは掲載するソース・リストに手を入れて日本語化してしまう方法、もう1つはそのまま掲載する方法です。今回はオリジナルのファイルをダウンロードするためのリンクとともに掲載していることから、後者のそのまま掲載する方法を採用しました。もしも掲載分だけでも日本語訳の方がいいというような意見がありましたらコメントあるいはメールでその理由などをいただければと思います。

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


  • インテル株式会社による表現がそうなっているので、それに合わせています。
  • インテル株式会社による表現がそうなっているので、それに合わせています。
  • 質問者の技術レベルに応じて必要な回答を用意するのは、非常に高いスキルと多くの時間を必要とするものです。私はこれらのサービスが可能な状態にはありません。

コメントを残す

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