Changes between Initial Version and Version 1 of epics/raspberrypi/setup_epics_i2c


Ignore:
Timestamp:
06/09/17 00:54:37 (8 years ago)
Author:
Takashi Obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/raspberrypi/setup_epics_i2c

    v1 v1  
     1{{{
     2[epics@centos-rpi2 iocexample]$ cat /proc/cpuinfo |grep Revision
     3Revision        : a01041
     4[epics@centos-rpi2 iocexample]$ uname -a
     5Linux centos-rpi2 4.9.13-v7.1.el7 #1 SMP Mon Feb 27 10:45:31 UTC 2017 armv7l armv7l armv7l GNU/Linux
     6}}}
     7
     8i2cモジュールをロードする
     9{{{
     10[root@centos-rpi2 ~]# modprobe i2c-dev
     11[root@centos-rpi2 ~]# modprobe i2c-bcm2708
     12[root@centos-rpi2 ~]# lsmod|more
     13Module                  Size  Used by
     14i2c_bcm2708             5994  0
     15i2c_dev                 6913  0
     16ipt_REJECT              1747  2
     17nf_reject_ipv4          3389  1 ipt_REJECT
     18xt_tcpudp               2526  11
     19......
     20}}}
     21
     22i2c関係のツールを確認
     23{{{
     24[root@centos-rpi2 ~]# yum search i2c
     25読み込んだプラグイン:fastestmirror
     26Loading mirror speeds from cached hostfile
     27=============================== N/S matched: i2c ===============================
     28i2c-tools.armv7hl : A heterogeneous set of I2C tools for Linux
     29i2c-tools-eepromer.armv7hl : Programs for reading / writing i2c / smbus eeproms
     30i2c-tools-python.armv7hl : Python bindings for Linux SMBus access through
     31                         : i2c-dev
     32
     33  Name and summary matches only, use "search all" for everything.
     34}}}
     35とりあえず eeprom に関しては後で確認するとして、2つインストール
     36{{{
     37[root@centos-rpi2 ~]# yum install i2c-tools i2c-tools-python
     38
     39[root@centos-rpi2 ~]# rpm -ql i2c-tools
     40/etc/modprobe.d/i2c-dev.conf
     41/etc/udev/makedev.d/99-i2c-dev.nodes
     42/usr/bin/decode-dimms
     43/usr/bin/decode-vaio
     44/usr/sbin/i2c-stub-from-dump
     45/usr/sbin/i2cdetect
     46/usr/sbin/i2cdump
     47/usr/sbin/i2cget
     48/usr/sbin/i2cset
     49....
     50
     51[root@centos-rpi2 ~]# rpm -ql i2c-tools-python
     52/usr/lib/python2.7/site-packages/smbus-1.1-py2.7.egg-info
     53/usr/lib/python2.7/site-packages/smbus.so
     54/usr/share/doc/i2c-tools-python-3.1.0
     55/usr/share/doc/i2c-tools-python-3.1.0/README
     56
     57
     58}}}
     59
     60
     61I/Oテストのため、まずは基板上のLEDをON/OFFしてみる
     62{{{
     63[root@centos-rpi2 ~]# cat /sys/class/leds/led0/trigger
     64none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock [mmc0] timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input panic
     65[root@centos-rpi2 ~]# cat /sys/class/leds/led1/trigger
     66none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock mmc0 timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on [input] panic
     67
     68LED0 は mmc0 になっていて、SDカードの読み書きで点灯
     69LED1 は input になっているので電源電圧が十分あれば点灯する
     70
     71[root@centos-rpi2 ~]# echo none > /sys/class/leds/led0/trigger
     72[root@centos-rpi2 ~]# echo 1 > /sys/class/leds/led0/brightness
     73[root@centos-rpi2 ~]# echo 0 > /sys/class/leds/led0/brightness
     74
     75
     76これで基板上のLEDが制御できることを確認した。
     77
     78元に戻すのは
     79[root@centos-rpi2 ~]# echo mmc0 > /sys/class/leds/led0/trigger
     80}}}
     81
     82
     83
     84i2cに関しては
     85https://wiki.centos.org/SpecialInterestGroup/AltArch/Arm32#head-008f0a6296760d4962dc98cb6ead76baa5c3c9de
     86に手順が記載されている。RasPi2, 3 それぞれ違うので手順に従う。
     87
     88具体的には
     89{{{
     90/boot/config.txtに2行追加
     91
     92dtparam=i2c1=on
     93dtparam=i2c_arm=on
     94
     95/etc/modules-load.d/i2c.conf という名前のファイルを作成し、中に
     96
     97i2c-bcm2708
     98i2c-dev
     99
     100の2行を記載。
     101}}}
     102その後、再起動
     103
     104
     105ログイン後に確認
     106{{{
     107[root@centos-rpi2 ~]# lsmod | grep i2c
     108i2c_bcm2835             7017  0
     109i2c_dev                 6913  0
     110i2c_bcm2708             5994  0
     111}}}
     112
     113{{{
     114[root@centos-rpi2 ~]# dmesg
     115[    0.000000] Booting Linux on physical CPU 0xf00
     116[    0.000000] Linux version 4.9.13-v7.1.el7 (mockbuild@armv7-02.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Mon Feb 27 10:45:31 UTC 2017
     117[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
     118[    0.000000] CPU: div instructions available: patching division code
     119
     120.....
     121
     122[    5.054352] systemd[1]: Reached target Encrypted Volumes.
     123[    5.067410] systemd[1]: Starting Encrypted Volumes.
     124[    5.607119] i2c /dev entries driver
     125[    7.448169] EXT4-fs (mmcblk0p3): re-mounted. Opts: (null)
     126[    7.605797] systemd-journald[112]: Received request to flush runtime journal from PID 1
     127[    7.989178] gpiomem-bcm2835 3f200000.gpiomem: Initialised: Registers at 0x3f200000
     128.....
     129}}}
     130
     131
     132
     133devディレクトリを確認
     134{{{
     135[root@centos-rpi2 ~]# ls /dev/i2c*
     136/dev/i2c-1
     137}}}
     138作成されている。
     139
     140{{{
     141[root@centos-rpi2 ~]# i2cdetect  -y 1
     142     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
     14300:          -- -- -- -- -- -- -- -- -- -- -- -- --
     14410: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     14520: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     14630: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     14740: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     14850: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     14960: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     15070: -- -- -- -- -- -- -- --
     151}}}
     152まだ何も繋いでいないので、これでO.K.
     153
     154
     155次にデバイスを接続。秋月の ADT7410 温度センサー。
     156http://akizukidenshi.com/catalog/g/gM-06675/
     157500円はちと高い気もするが、お手軽にできるのはありがたい。
     158
     159ピン配置は公式ドキュメントをみて
     160https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
     161https://pinout.xyz/
     162{{{
     163[root@centos-rpi2 ~]# i2cdetect  -y 1
     164     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
     16500:          -- -- -- -- -- -- -- -- -- -- -- -- --
     16610: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     16720: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     16830: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     16940: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
     17050: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     17160: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     17270: -- -- -- -- -- -- -- --
     173}}}
     174デバイスをアドレス 0x48 で認識している。O.K.
     175
     176
     177dumpでデータを確認。
     178{{{
     179[root@centos-rpi2 ~]# i2cdump -y 1 0x48
     180No size specified (using byte-data access)
     181     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
     18200: 0c 30 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ?0?. .?.I???....
     18310: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     18420: 0c 30 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ?0?. .?.I???....
     18530: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     18640: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ..?. .?.I???....
     18750: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     18860: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ..?. .?.I???....
     18970: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     19080: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ..?. .?.I???....
     19190: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     192a0: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ..?. .?.I???....
     193b0: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     194c0: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ..?. .?.I???....
     195d0: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     196e0: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00    ..?. .?.I???....
     197f0: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00    ........d.?.....
     198}}}
     199同じデータが繰り返していたりして、ちょっと不穏な動きをしている気がするが....
     200
     201
     202また、チップ自体は 16bit だが、マニュアル(データシート)をみると
     203The power-on default setting has a 13-bit temperature data value.
     204とある。
     205
     206センサーを手で触って温度データ値が上下するかどうか確認する
     207
     208{{{
     209[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2100x980e
     211[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2120x800e
     213[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2140x700e
     215[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2160x580e
     217[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2180x500e
     219[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2200x400e
     221[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2220x300e
     223[root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w
     2240x280e
     225}}}
     226上位・下位を入れ替えれば、それなりの値か?要確認。
     227
     228
     229
     230== EPICS から制御する ==
     231Asyn + drvAsynI2C + stream device という構成が良さそう。
     232
     233 * https://github.com/ffeldbauer/drvAsynI2C
     234 * https://github.com/ffeldbauer/epics-devgpio
     235