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


Ignore:
Timestamp:
06/09/17 00:54:37 (3 years ago)
Author:
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