| 161 | |
| 162 | == BBBとの接続 == |
| 163 | |
| 164 | このボードを実際に使用(運用)する場合には、BBB(又はRaspberryPI)とはUSBで接続するが、最大5個程度の複数接続をする予定なので、udevでデバイス名を固定する必要がある。[[br]] |
| 165 | USB HUBを経由して、BBBと接続した時のdmesgは、 |
| 166 | |
| 167 | {{{ |
| 168 | [ 4503.229147] usb 1-1.4: new full-speed USB device number 3 using musb-hdrc |
| 169 | [ 4503.330429] usb 1-1.4: New USB device found, idVendor=0403, idProduct=6015 |
| 170 | [ 4503.330493] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 |
| 171 | [ 4503.330526] usb 1-1.4: Product: FT231X USB UART |
| 172 | [ 4503.330556] usb 1-1.4: Manufacturer: FTDI |
| 173 | [ 4503.330584] usb 1-1.4: SerialNumber: DC00xxxx |
| 174 | [ 4503.552556] usbcore: registered new interface driver usbserial |
| 175 | [ 4503.552905] usbcore: registered new interface driver usbserial_generic |
| 176 | [ 4503.557348] usbserial: USB Serial support registered for generic |
| 177 | [ 4503.586971] usbcore: registered new interface driver ftdi_sio |
| 178 | [ 4503.587143] usbserial: USB Serial support registered for FTDI USB Serial Device |
| 179 | [ 4503.587503] ftdi_sio 1-1.4:1.0: FTDI USB Serial Device converter detected |
| 180 | [ 4503.587845] usb 1-1.4: Detected FT-X |
| 181 | [ 4503.617619] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0 |
| 182 | }}} |
| 183 | |
| 184 | となっていて、ttyUSB0としてアクセスできるようになっていることがわかる。[[br]] |
| 185 | 更に詳細な情報を見てみる。[[br]] |
| 186 | |
| 187 | {{{ |
| 188 | debian@beaglebone:~$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) |
| 189 | : |
| 190 | looking at parent device '/devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-1/1-1.4': |
| 191 | KERNELS=="1-1.4" |
| 192 | SUBSYSTEMS=="usb" |
| 193 | DRIVERS=="usb" |
| 194 | ATTRS{authorized}=="1" |
| 195 | ATTRS{avoid_reset_quirk}=="0" |
| 196 | ATTRS{bConfigurationValue}=="1" |
| 197 | ATTRS{bDeviceClass}=="00" |
| 198 | ATTRS{bDeviceProtocol}=="00" |
| 199 | ATTRS{bDeviceSubClass}=="00" |
| 200 | ATTRS{bMaxPacketSize0}=="8" |
| 201 | ATTRS{bMaxPower}=="90mA" |
| 202 | ATTRS{bNumConfigurations}=="1" |
| 203 | ATTRS{bNumInterfaces}==" 1" |
| 204 | ATTRS{bcdDevice}=="1000" |
| 205 | ATTRS{bmAttributes}=="a0" |
| 206 | ATTRS{busnum}=="1" |
| 207 | ATTRS{configuration}=="" |
| 208 | ATTRS{devnum}=="3" |
| 209 | ATTRS{devpath}=="1.4" |
| 210 | ATTRS{idProduct}=="6015" |
| 211 | ATTRS{idVendor}=="0403" |
| 212 | ATTRS{ltm_capable}=="no" |
| 213 | ATTRS{manufacturer}=="FTDI" |
| 214 | ATTRS{maxchild}=="0" |
| 215 | ATTRS{product}=="FT231X USB UART" |
| 216 | ATTRS{quirks}=="0x0" |
| 217 | ATTRS{removable}=="unknown" |
| 218 | ATTRS{serial}=="DC00xxxx" |
| 219 | ATTRS{speed}=="12" |
| 220 | ATTRS{urbnum}=="16" |
| 221 | ATTRS{version}==" 2.00" |
| 222 | : |
| 223 | }}} |
| 224 | |
| 225 | 他にも色々出てくるが、重要なのはここ。[[br]] |
| 226 | そして、udevの定義に必要は情報は、以下の3つの情報。[[br]] |
| 227 | |
| 228 | {{{ |
| 229 | ATTRS{idProduct}=="6015" |
| 230 | ATTRS{idVendor}=="0403" |
| 231 | ATTRS{serial}=="DC00xxxx" |
| 232 | }}} |
| 233 | |
| 234 | この情報を基にudevのルールを設定する。 |
| 235 | |
| 236 | === udev === |
| 237 | |
| 238 | udevの設定ファイルは{{{/etc/udev/rules.d/99-ftdi.rules}}}としておく。 |
| 239 | |
| 240 | {{{ |
| 241 | root@beaglebone:/etc/udev/rules.d# emacs -nw 99-ftdi.rules |
| 242 | |
| 243 | SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", ATTRS{serial}=="DC00xxxx", SYMLINK+="ttyUSBSens0", MODE="0666" |
| 244 | }}} |
| 245 | |
| 246 | ファイルを作成したら、設定を反映させる。 |
| 247 | |
| 248 | {{{ |
| 249 | root@beaglebone:/etc/udev/rules.d# /etc/init.d/udev reload |
| 250 | }}} |
| 251 | |
| 252 | USBを挿抜すると、 |
| 253 | |
| 254 | {{{ |
| 255 | root@beaglebone:/etc/udev/rules.d# ls -la /dev/ttyUSB* |
| 256 | crw-rw-rw- 1 root dialout 188, 0 May 22 02:37 /dev/ttyUSB0 |
| 257 | lrwxrwxrwx 1 root root 7 May 22 02:37 /dev/ttyUSBSens0 -> ttyUSB0 |
| 258 | }}} |
| 259 | |
| 260 | デバイスファイルに対してシンボリックリンクが作成され、デバイスファイルのパーミッションが0666に設定される。[[br]] |
| 261 | デバイスを増やす時には、同様の設定をファイルに追加してやればいい。[[br]] |
| 262 | 追加したデバイスには、後で混乱しないように、デバイスのシリアル番号とデバイス番号のシールを張っておいたほうがいい。 |
| 263 | |
| 264 | == EPICS IOC == |
| 265 | |
| 266 | EPICS IOCは、asyn + streamdeviceで作成。但し、複数デバイスになることを考慮する必要がある。 |
| 267 | |
| 268 | === configure/RELEASE === |
| 269 | |
| 270 | {{{ |
| 271 | EPICS_BASE = /opt/epics/R315.5/base |
| 272 | |
| 273 | ASYN=$(EPICS_BASE)/../modules/soft/asyn/4-31 |
| 274 | STREAM=$(EPICS_BASE)/../modules/soft/stream/2.7.7 |
| 275 | }}} |
| 276 | |
| 277 | |
| 278 | === DB === |
| 279 | |
| 280 | {{{ |
| 281 | debian@beaglebone:~/epics/usbTemp/usbTempApp/Db$ more usbtemp.db |
| 282 | record(ai, "$(user):temp") |
| 283 | { |
| 284 | field(DESC, "Get temperature") |
| 285 | field(DTYP, "stream") |
| 286 | field(INP, "@usbtemp.proto getTemp $(dev)") |
| 287 | field(SCAN, "$(scan)") |
| 288 | field(EGU, "degC") |
| 289 | field(PREC, "3") |
| 290 | } |
| 291 | debian@beaglebone:~/epics/usbTemp/usbTempApp/Db$ more usbtemp.proto |
| 292 | TERMINATOR = CR LF; |
| 293 | |
| 294 | getTemp { |
| 295 | in "T:%f"; |
| 296 | } |
| 297 | }}} |
| 298 | |
| 299 | === src/Makefile === |
| 300 | |
| 301 | {{{ |
| 302 | debian@beaglebone:~/epics/usbTemp/usbTempApp/src$ more Makefile |
| 303 | TOP=../.. |
| 304 | |
| 305 | include $(TOP)/configure/CONFIG |
| 306 | #---------------------------------------- |
| 307 | # ADD MACRO DEFINITIONS AFTER THIS LINE |
| 308 | #============================= |
| 309 | |
| 310 | #============================= |
| 311 | # Build the IOC application |
| 312 | |
| 313 | PROD_IOC = usbTemp |
| 314 | # usbTemp.dbd will be created and installed |
| 315 | DBD += usbTemp.dbd |
| 316 | |
| 317 | # usbTemp.dbd will be made up from these files: |
| 318 | usbTemp_DBD += base.dbd |
| 319 | |
| 320 | # Include dbd files from all support applications: |
| 321 | usbTemp_DBD += asyn.dbd |
| 322 | usbTemp_DBD += stream.dbd |
| 323 | usbTemp_DBD += drvAsynSerialPort.dbd |
| 324 | |
| 325 | # Add all the support libraries needed by this IOC |
| 326 | usbTemp_LIBS += asyn |
| 327 | usbTemp_LIBS += stream |
| 328 | |
| 329 | # usbTemp_registerRecordDeviceDriver.cpp derives from usbTemp.dbd |
| 330 | usbTemp_SRCS += usbTemp_registerRecordDeviceDriver.cpp |
| 331 | |
| 332 | # Build the main IOC entry point on workstation OSs. |
| 333 | usbTemp_SRCS_DEFAULT += usbTempMain.cpp |
| 334 | usbTemp_SRCS_vxWorks += -nil- |
| 335 | |
| 336 | # Add support from base/src/vxWorks if needed |
| 337 | #usbTemp_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary |
| 338 | |
| 339 | # Finally link to the EPICS Base libraries |
| 340 | usbTemp_LIBS += $(EPICS_BASE_IOC_LIBS) |
| 341 | |
| 342 | #=========================== |
| 343 | |
| 344 | include $(TOP)/configure/RULES |
| 345 | #---------------------------------------- |
| 346 | # ADD RULES AFTER THIS LINE |
| 347 | }}} |
| 348 | |
| 349 | |
| 350 | |
| 351 | |
| 352 | == 参照HP == |
| 353 | |
| 354 | [http://d.hatena.ne.jp/pyopyopyo/20160223/p1 usb-serial のデバイスファイル名を固定する方法][[br]] |
| 355 | [https://qiita.com/caad1229/items/309be550441515e185c0 udevでデバイス名を固定する][[br]] |