| | 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 | |