Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 05 Apr 2021 14:03:23 +0800
From:      "Ben Woods" <woodsb02@freebsd.org>
To:        freebsd-usb@freebsd.org
Subject:   mount_msdosfs not working for USB device SparkFun Pro nRF52840 Mini
Message-ID:  <dde56279-b27c-4b16-a154-c3bfe177be4b@www.fastmail.com>

next in thread | raw e-mail | index | archive | help
Hi FreeBSD USB peeps,

I recently bought myself a small bluetooth development board to tinker with - a SparkFun Pro nRF52840 Mini:
https://www.sparkfun.com/products/15025

But I am having difficulty mounting the mass storage device it presents when in bootloader mode (accessible by double tapping the reset button).  In this mode it presents 3 devices at once - a USB serial (CDC), a DFU (device firmware upgrade) and a mass-storage device (MSD).

When I attempt to mount the FAT32 formatted mass storage device I get the error:
mount_msdosfs: /dev/da1: Invalid argument

I suspect the issue is a USB quirk, and I may just need to use usbconfig with the right command to fix it. I'm hoping someone is able to help me get this mounting, or troubleshoot further?

Cheers,
Ben

--- Output below from bootloader mode ---

# camcontrol devlist
<Generic- SD/MMC CRW 1.00>         at scbus0 target 0 lun 0 (pass0,da0)
<SparkFun nRF525840 Mini 1.0>      at scbus1 target 0 lun 0 (pass1,da1)

# ls -lah /dev/da1*
crw-r-----  1 root  operator   0xc9  5 Apr 13:56 /dev/da1

# mount -t msdosfs /dev/da1 /mnt
mount_msdosfs: /dev/da1: Invalid argument

# mount -t msdosfs /dev/msdosfs/NRF52BOOT /mnt
mount_msdosfs: /dev/msdosfs/NRF52BOOT: Invalid argument

# fstyp -lu /dev/da1
msdosfs NRF52BOOT

# file -s /dev/da1
/dev/da1: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "UF2 UF2 ", root entries 64, sectors 7998 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 32, sectors/track 1, heads 1, serial number 0x420042, label: "NRF52BOOT  ", FAT (16 bit)

# dmesg
ugen0.10: <Adafruit Industries Bluefruit nRF52840 DFU> at usbus0
umodem0 on uhub1
umodem0: <Bluefruit Serial> on usbus0
umodem0: data interface 1, has no CM over data, has no break
umass1 on uhub1
umass1: <Bluefruit UF2> on usbus0
umass1:  SCSI over Bulk-Only; quirks = 0x0000
umass1:1:1: Attached to scbus1
da1 at umass-sim1 bus 1 scbus1 target 0 lun 0
da1: <SparkFun nRF525840 Mini 1.0> Removable Direct Access SCSI-2 device
da1: Serial Number C1599CE596019A19
da1: 1.000MB/s transfers
da1: 3MB (8000 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>

# usbconfig -d 0.10 dump_all_desc
ugen0.10: <Adafruit Industries Bluefruit nRF52840 DFU> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0200
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002
  bDeviceProtocol = 0x0001
  bMaxPacketSize0 = 0x0040
  idVendor = 0x1b4f
  idProduct = 0x5284
  bcdDevice = 0x0100
  iManufacturer = 0x0001  <Adafruit Industries>
  iProduct = 0x0002  <Bluefruit nRF52840 DFU>
  iSerialNumber = 0x0003  <C1599CE596019A19>
  bNumConfigurations = 0x0001

Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0062
    bNumInterfaces = 0x0003
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080
    bMaxPower = 0x0032

    Additional Descriptor

    bLength = 0x08
    bDescriptorType = 0x0b
    bDescriptorSubType = 0x00
     RAW dump:
     0x00 | 0x08, 0x0b, 0x00, 0x02, 0x02, 0x02, 0x01, 0x00


    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0002  <Communication device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0001
      iInterface = 0x0004  <Bluefruit Serial>

      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x24
      bDescriptorSubType = 0x00
       RAW dump:
       0x00 | 0x05, 0x24, 0x00, 0x20, 0x01


      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x05, 0x24, 0x01, 0x00, 0x01


      Additional Descriptor

      bLength = 0x04
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x04, 0x24, 0x02, 0x02


      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x05, 0x24, 0x06, 0x00, 0x01


     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>

    Interface 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x000a  <CDC-data>
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0002  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 2
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0002
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x0008  <Mass storage>
      bInterfaceSubClass = 0x0006
      bInterfaceProtocol = 0x0050
      iInterface = 0x0005  <Bluefruit UF2>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0003  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000

     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0083  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


--
From: Ben Woods
woodsb02@freebsd.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?dde56279-b27c-4b16-a154-c3bfe177be4b>