| 1 | {{{ |
| 2 | [epics@centos-rpi2 iocexample]$ cat /proc/cpuinfo |grep Revision |
| 3 | Revision : a01041 |
| 4 | [epics@centos-rpi2 iocexample]$ uname -a |
| 5 | Linux 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 | |
| 8 | i2cモジュールをロードする |
| 9 | {{{ |
| 10 | [root@centos-rpi2 ~]# modprobe i2c-dev |
| 11 | [root@centos-rpi2 ~]# modprobe i2c-bcm2708 |
| 12 | [root@centos-rpi2 ~]# lsmod|more |
| 13 | Module Size Used by |
| 14 | i2c_bcm2708 5994 0 |
| 15 | i2c_dev 6913 0 |
| 16 | ipt_REJECT 1747 2 |
| 17 | nf_reject_ipv4 3389 1 ipt_REJECT |
| 18 | xt_tcpudp 2526 11 |
| 19 | ...... |
| 20 | }}} |
| 21 | |
| 22 | i2c関係のツールを確認 |
| 23 | {{{ |
| 24 | [root@centos-rpi2 ~]# yum search i2c |
| 25 | 読み込んだプラグイン:fastestmirror |
| 26 | Loading mirror speeds from cached hostfile |
| 27 | =============================== N/S matched: i2c =============================== |
| 28 | i2c-tools.armv7hl : A heterogeneous set of I2C tools for Linux |
| 29 | i2c-tools-eepromer.armv7hl : Programs for reading / writing i2c / smbus eeproms |
| 30 | i2c-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 | |
| 61 | I/Oテストのため、まずは基板上のLEDをON/OFFしてみる |
| 62 | {{{ |
| 63 | [root@centos-rpi2 ~]# cat /sys/class/leds/led0/trigger |
| 64 | none 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 |
| 66 | none 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 | |
| 68 | LED0 は mmc0 になっていて、SDカードの読み書きで点灯 |
| 69 | LED1 は 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 | |
| 84 | i2cに関しては |
| 85 | https://wiki.centos.org/SpecialInterestGroup/AltArch/Arm32#head-008f0a6296760d4962dc98cb6ead76baa5c3c9de |
| 86 | に手順が記載されている。RasPi2, 3 それぞれ違うので手順に従う。 |
| 87 | |
| 88 | 具体的には |
| 89 | {{{ |
| 90 | /boot/config.txtに2行追加 |
| 91 | |
| 92 | dtparam=i2c1=on |
| 93 | dtparam=i2c_arm=on |
| 94 | |
| 95 | /etc/modules-load.d/i2c.conf という名前のファイルを作成し、中に |
| 96 | |
| 97 | i2c-bcm2708 |
| 98 | i2c-dev |
| 99 | |
| 100 | の2行を記載。 |
| 101 | }}} |
| 102 | その後、再起動 |
| 103 | |
| 104 | |
| 105 | ログイン後に確認 |
| 106 | {{{ |
| 107 | [root@centos-rpi2 ~]# lsmod | grep i2c |
| 108 | i2c_bcm2835 7017 0 |
| 109 | i2c_dev 6913 0 |
| 110 | i2c_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 | |
| 133 | devディレクトリを確認 |
| 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 |
| 143 | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 144 | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 145 | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 146 | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 147 | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 148 | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 149 | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 150 | 70: -- -- -- -- -- -- -- -- |
| 151 | }}} |
| 152 | まだ何も繋いでいないので、これでO.K. |
| 153 | |
| 154 | |
| 155 | 次にデバイスを接続。秋月の ADT7410 温度センサー。 |
| 156 | http://akizukidenshi.com/catalog/g/gM-06675/ |
| 157 | 500円はちと高い気もするが、お手軽にできるのはありがたい。 |
| 158 | |
| 159 | ピン配置は公式ドキュメントをみて |
| 160 | https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/ |
| 161 | https://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 |
| 165 | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 166 | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 167 | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 168 | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 169 | 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- |
| 170 | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 171 | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 172 | 70: -- -- -- -- -- -- -- -- |
| 173 | }}} |
| 174 | デバイスをアドレス 0x48 で認識している。O.K. |
| 175 | |
| 176 | |
| 177 | dumpでデータを確認。 |
| 178 | {{{ |
| 179 | [root@centos-rpi2 ~]# i2cdump -y 1 0x48 |
| 180 | No size specified (using byte-data access) |
| 181 | 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef |
| 182 | 00: 0c 30 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ?0?. .?.I???.... |
| 183 | 10: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 184 | 20: 0c 30 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ?0?. .?.I???.... |
| 185 | 30: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 186 | 40: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ..?. .?.I???.... |
| 187 | 50: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 188 | 60: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ..?. .?.I???.... |
| 189 | 70: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 190 | 80: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ..?. .?.I???.... |
| 191 | 90: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 192 | a0: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ..?. .?.I???.... |
| 193 | b0: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 194 | c0: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ..?. .?.I???.... |
| 195 | d0: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 196 | e0: 00 00 80 00 20 00 05 00 49 80 05 cb 00 00 00 00 ..?. .?.I???.... |
| 197 | f0: 00 00 00 00 00 00 00 00 64 00 06 00 00 00 00 00 ........d.?..... |
| 198 | }}} |
| 199 | 同じデータが繰り返していたりして、ちょっと不穏な動きをしている気がするが.... |
| 200 | |
| 201 | |
| 202 | また、チップ自体は 16bit だが、マニュアル(データシート)をみると |
| 203 | The 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 |
| 210 | 0x980e |
| 211 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 212 | 0x800e |
| 213 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 214 | 0x700e |
| 215 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 216 | 0x580e |
| 217 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 218 | 0x500e |
| 219 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 220 | 0x400e |
| 221 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 222 | 0x300e |
| 223 | [root@centos-rpi2 ~]# i2cget -y 1 0x48 0x00 w |
| 224 | 0x280e |
| 225 | }}} |
| 226 | 上位・下位を入れ替えれば、それなりの値か?要確認。 |
| 227 | |
| 228 | |
| 229 | |
| 230 | == EPICS から制御する == |
| 231 | Asyn + drvAsynI2C + stream device という構成が良さそう。 |
| 232 | |
| 233 | * https://github.com/ffeldbauer/drvAsynI2C |
| 234 | * https://github.com/ffeldbauer/epics-devgpio |
| 235 | |