FreeBSD で認識するかどうか条件によって変わる問題

  • PC:DELL Inspiron910
  • 先に挿すと認識しないケースでは LED2 が点かない(main が実行できない)場合と点く場合がある
  • OS: FreeBSD-10.2, ファーム v.28
    • 本体の USB 端子に挿すと認識しない(USB_ERR_TIMEOUT)
    • ダイソーの USB1.0 2ポートハブでは認識するが、ハブにデバイスを先に挿しておくと認識しない
    • ELECOM USB1.0 4ポートハブでは全く認識しない
    • USB2.0 ハブ経由では認識するが、ハブにデバイスを先に挿しておくと認識しない(USB_ERR_STALLED)
  • OS: FreeBSD-10.2, ファーム v.28(ブートローダなし+250ms版)
    • 本体の USB 端子に挿すと認識する
    • ダイソーの USB1.0 2ポートハブでは認識するが、ハブにデバイスを先に挿しておくと認識しない, LED2点く
    • ELECOM USB1.0 4ポートハブでは全く認識しない(USB_ERROR_IOERROR)
    • USB2.0 ハブ経由では認識するが、ハブにデバイスを先に挿しておくと認識しない
  • OS: FreeBSD-10.2, ファーム v.28(ブートローダなし+1000ms+250ms版)
    • 本体の USB 端子に挿すと認識する
    • ダイソーの USB1.0 2ポートハブでハブにデバイスを先に挿しても認識する
    • ELECOM USB1.0 4ポートハブでは全く認識しない
  • OS: FreeBSD-10.2, ファーム v.28(1000ms+250ms版)
    • 本体の USB 端子に挿すと認識しない(USB_ERR_TIMEOUT)
    • ダイソーの USB1.0 2ポートハブでは認識するが、ハブにデバイスを先に挿しておくと認識しない(USB_ERR_STALLED) COLOR(BLUE){LED2付かない)
    • USB2.0 ハブ経由では認識するが、ハブにデバイスを先に挿しておくと認識しない(USB_ERR_STALLED), LED2点かない
  • OS Knoppix7.4, ファーム v.28(ブートローダなし+250ms版)
    • 本体の USB 端子に挿すと認識する
    • ダイソーの USB1.0 2ポートハブにデバイスを先に挿しても認識する
    • ELECOM USB1.0 4ポートハブでは全く認識しない
    • USB2.0 ハブ経由では先に挿しておいても認識する
  • OS Windows10, ファーム v.28(ブートローダなし版)
    • ELECOM USB1.0 4ポートハブで先に挿しても認識する

まとめ

  • FreeBSD-10.2
    -ブートローダありブートローダなし,250msブートローダなし,1000+250msエラー
    USB2ハブ(○)-
    USB1ハブ(ダイソー)-
    USBハブなし×USB_ERR_TIMEOUT
    USB1ハブ,USB2ハブ(※1)××(○)USB_ERR_STALLED
    USB1ハブ(ELECOM)×××USB_ERR_IOERROR
    (※1): ハブにデバイスを挿してから、PC にハブを挿した場合
[エラーメッセージ(USB_ERR_TIMEOUTT)]
Dec 12 03:03:26 milk kernel: usbus4: port reset timeout
Dec 12 03:03:26 milk kernel:
uhub_reattach_port: port 3 reset failed, error=USB_ERR_TIMEOUT
Dec 12 03:03:26 milk kernel: uhub_reattach_port:
device problem (USB_ERR_TIMEOUT), disabling port 3
[エラーメッセージ(USB_ERR_STALLE)]
Dec 12 03:43:28 milk kernel:
usb_alloc_device: set address 3 failed (USB_ERR_STALLED, ignored)
Dec 12 03:43:30 milk kernel:
usbd_setup_device_desc: getting device descriptor at addr 3 failed,
USB_ERR_STALLED
Dec 12 03:43:30 milk kernel:
usbd_req_re_enumerate: addr=3, set address failed! (USB_ERR_STALLED, ignored)
[エラーメッセージ(USB_ERR_IOERROR)]
Dec 12 20:52:49 milk kernel:
usb_alloc_device: set address 4 failed (USB_ERR_IOERROR, ignored)
Dec 12 20:52:51 milk kernel:
usbd_setup_device_desc:getting device descriptor at addr 4 failed,
USB_ERR_IOERROR
Dec 12 20:52:51 milk kernel:
usbd_req_re_enumerate: addr=4, set address failed! (USB_ERR_IOERROR, ignored)
  • Knoppix7.4
    -ブートローダなし,250msエラー
    USB2ハブ-
    USB1ハブ(ダイソー)-
    USBハブなし-
    USB1ハブ,USB2ハブ(※1)-
    USB1ハブ(ELECOM)×IO
    (※1): ハブにデバイスを挿してから、PC にハブを挿した場合
  • Windows10
    -ブートローダなしエラー
    USB2ハブ-
    USB1ハブ(ダイソー)-
    USBハブなし-
    USB1ハブ,USB2ハブ(※)-
    USB1ハブ(ELECOM)-

改良

  • ブートローダなし版を作成(Digispark としては使えなくなるが、FreeBSD に直接挿したときの認識率が改善する)
    • 従来 micronucleus(DigiSpark 用 USB 経由のライタ) で書き込んでいたファームウェア(HEX ファイル)と全く同じコードを、Digispark の Flash の 0番地から AVR ライタで直接書き込む
  • 起動時に 1000+250ms ウェイトを入れる(FreeBSD ハブにデバイスを挿してから、PC にハブを挿した場合の認識率が改善する)
usbInit(); // *1
uchar j=0; // *1
while(--j){
    wdt_reset(); // if watchdog is active, reset it // *1
    _delay_ms(4); } // *1
} // *1
usbDeviceDisconnect();
uchar i = 0;
while(--i){       // fake USB disconnect for > 250 ms
    wdt_reset();  // if watchdog is active, reset it
    _delay_ms(1); // library call -- has limited range
}
usbDeviceConnect();

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-14 (水) (2173d)