[Beaglebone Black] No mass storage device when plugging into PC

Hi All,

I’ve received my BBB yesterday, and of course I wanted to play with it right away :-). When I plugged it into my laptop it unfortunately did not register as mass storage device, the blue leds were blinking, so clearly it was getting power. The leftmost led (flash access) eventually stabilised to ‘off’, so it looked like it booted. I plugged it into my television (through HDMI) to verify its functionality, and surely is was booting, I got a nice gui. The keyboard that I attached was also detected, and when I looked up the version I noticed there was a newer available. I’ve reflashed the board to 2013.06.20, but to no avail.

I’ve attached an FTDI serial cable, so I have access to the console. Is there any way I can debug the USB-device interface (as is force it to present itself as a mass storage device or CDC device)?

Things I’ve already tried:

  • Another cable
  • Another PC
  • External 5V/1A adapter attached
  • Installing drivers

Windows doesn’t even seem to detect an USB device present (no new hardware whatsoever)

The solderconnections on the mini-usb connector are looking fine (also, power is provided).

Anyone any ideas? It’s not that the board is useless to me now, I can also reach it through ethernet, but I would really like everything to work ok.

(if any ‘dmesg |grep usb’ kind of things are usefull, let me know)

There seems to be a software issue in some kind of startup script. I traced the problem to be in the gadget driver, which gives
root@beaglebone:~# systemctl start storage-gadget-init.service
root@beaglebone:~# [ 1866.099336] g_multi: ' invalid for parameter AA’

However, if I manually modprobe g_multi like:
root@beaglebone:/# modprobe g_multi file=/dev/mmcblk0p1

I have yet to discover the valid arguments for this module (i guessed the device which held the BEAGLEMEDIA was a good starting point, don’t blame my stupidity;-)) , but surely my PC enumerated all the usb gadget drivers, so there’s definitely no hardware-issue. None of the devices work however, though I didn’t expected them anyway by lack of parameters provided.

Solved!

There is a bug in the script /usr/bin/g-ether-load.sh
It tries to resolve the MAC address of the ethernet device for usb tethering from
/proc/device-tree/ocp/ethernet@4a100000/slave@4a100300/mac-address

But on my board it doesn’t yield a valid mac address (hexdump gives 90:59:AF:55:*AA:)
However, the fallback mechanism in the script (if “/proc/device-tree/ocp/ethernet@4a100000/slave@4a100300/mac-address” doesn’t exists ) which pokes directly into the memory works.

So the fix is quite simple; use the fallback mechanism :slight_smile:

mac_address=“/proc/device-tree/ocp/ethernet@4a100000/slave@4a100300/mac-address”

if [ -f ${mac_address} ] ; then

DEV_ADDR=$(hexdump -e ‘1/1 “%02X” “:”’ ${mac_address} | sed ‘s/.$//’)

#dgb

echo Address bestaat: ${DEV_ADDR}

else

DEVMEM_ADDR_LO=$(get_devmem 0x44e10638|bc)
DEVMEM_ADDR_LO=$(reverse_bytes ${DEVMEM_ADDR_LO})

DEVMEM_ADDR_HI=$(get_devmem 0x44e1063C)
DEVMEM_ADDR_HI=$(reverse_bytes ${DEVMEM_ADDR_HI})

DEV_ADDR=$(hex_to_mac_addr “${DEVMEM_ADDR_HI}${DEVMEM_ADDR_LO}”)

fi

<<<