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