なんとなく買ったIntel GalileoでSDからLinuxを起動し,i2c-toolsを使えるようにしたメモ.
FWの更新
- Intelのサイトからarduino-windows-1.0.3.7z をダウンロードする.
- 適当なフォルダに展開し,IDEを起動する.
- ヘルプからFirmware Updateを実行する
Linuxのインストール
- Intelのサイトから SDCard.1.0.3.zip をダウンロードする.
- 展開してできる image-full-galileo フォルダの中の image-full-galileo-clanton.ext3 を適当なLinuxマシンにコピーする.
- 容量を増やす
% dd if=/dev/zero of=image-full-galileo-clanton.ext3 bs=1M count=3500 oflag=append conv=notrun
% sudo e2fsck ./image-full-galileo-clanton.ext3
% sudo resize2fs ./image-full-galileo-clanton.ext3 - Micro SDにimage-full-galileoの中身をコピーする.
- スロットに挿して電源ON
開発環境のインストール
/etc/opkg/base-feeds.conf ファイルに以下を記載し,opkgを使えるようにする.
src all http://alextgalileo.altervista.org/pkgrepo/all src clanton http://alextgalileo.altervista.org/pkgrepo/clanton src i586 http://alextgalileo.altervista.org/pkgrepo/i586
開発環境一式をopkgで入れる
# opkg install make gcc-dev gcc-symlinks cpp cpp-symlinks g++ g++-symlinks uclibc-dev uclibc-utils binutils-dev binutils-symlinks python-dev coreutils-dev
i2c-toolsをインストール
i2c-toolsはパッケージになっていないのでソースから入れる.
Makefileを編集
# diff Makefile_orig Makefile --- Makefile_orig +++ Makefile @@ -41,6 +41,6 @@ all: EXTRA := -#EXTRA += py-smbus +EXTRA += py-smbus SRCDIRS := include lib eeprom stub tools $(EXTRA) include $(SRCDIRS:%=%/Module.mk)
あとは,make, make install で終わり.
i2cを有効にする
i2cのピンはADC4,5と共用になっていて,デフォルトでMUXがADCの方に倒れている.
なので,MUXをi2cの方に変更する必要がある.
MUXの制御GPIO番号はこれを見ると29番なので,GPIO29に0を書く.
- GPIO29を触れるようにする.
# echo -n 29 > /sys/class/gpio/export - 出力に設定
# echo -n out > /sys/class/gpio/gpio29/direction - 0を書き込む
# echo -n 0 > /sys/class/gpio/gpio29/value
これで,i2cdetectが反応するようになる.
MUXがADC側のときのi2cdetect結果
# /usr/local/sbin/i2cdetect -y -r 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
MUXがI2C側のときのi2cdetect結果
# /usr/local/sbin/i2cdetect -y -r 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
とりあえずつないだADT7410の0x048が認識した.
温度を読み取る
# /usr/local/sbin/i2cdump -y -r 0-3 0 0x48 b 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 0c a8 80 00 ???.
レジスタ3の7ビットめが0なので13ビット精度.レジスタ0とレジスタ1の計16ビットのうち,上位13ビットが温度レジスタになる.上の結果から,その値は 0x0ca8 >> 3 = 0x0195.
13ビット精度のときの分解能は 0.0625℃/LSB なので,0x195 * 0.0625 = 405 * 0.0625 =25.3125℃.
というわけで,値としては問題なさそう.