BeagleBone® Enhanced Developer Tutorial
Change USB device port to Host
Connect up to 20 devices to your BeagleBone® Enhanced
With more recent kernels there is a limitation for the number of devices that can be detected by the inbuilt USB hubs on the AM335x microprocessor.
If more than 10 devices are required to be connected, the second USB hub needs to be utilised.
Changing the device port to Host Mode allows another 10 devices to be connected giving a total of 20 devices.
To change the mode of the port there needs to be a hardware modification performed and a configuration modification.
Hardware modification to change device port to Host Mode
To force the USB port into device mode the option resistor needs to be fitted:
Place a 0 Ohm 0402 resistor at location R2100 (highlighted below)
To allow for 5V to be supplied to the USB port it needs to be connected to the appropriate pins on the 46 way connectors:
Provide power at pins 5/6 (5V) and ground at pins 1/2 on SK7001
Configuration modification to change device port to Host Mode
Login to the BBE via the serial terminal.
make sure you are in your home directory where you can do the editing and compiling of the device tree.
#cd ~
First you need to reverse compile the binary device tree back into an editable form
#dtc -I dtb -O dts -o ./am335x-sancloud-bbe.dts /boot/dtbs/4.4.54-ti-r93/am335x-sancloud-bbe.dtb
Then edit the file (I’m using vi…. why I hear you scream… because I can!!). You can use an editor of your choice, just make sure you change the correct line.
#vi am335x-sancloud-bbe.dts
Search for peripheral (non vi-ers /peripheral ENTER_KEY)
Should be around line 1869 (8.7-iot image)
usb@47401000 { compatible = "ti,musb-am33xx"; status = "okay"; reg = <0x47401400 0x400 0x47401000 0x200>; reg-names = "mc", "control"; interrupts = <0x12>; interrupt-names = "mc"; dr_mode = "peripheral"; mentor,multipoint = <0x1>; mentor,num-eps = <0x10>; mentor,ram-bits = <0xc>; mentor,power = <0x1f4>; phys = <0x3f>;
change to host
dr_mode = "host";
Save (non vi-ers Esc :wq ENTER_KEY)
Next compile the new dts file
#dtc –I dts –O dtb –o ./am335x-sancloud-bbe.dtb ./am335x-sancloud-bbe.dts
Would be wise to backup the original dtb file
#sudo mv /boot/dtbs/4.4.54-ti-r93/am335x-sancloud-bbe.dtb /boot/dtbs/4.4.54-ti-r93/am335x-sancloud-bbe.dtb.orig
Then you can copy the newly compiled dtb over ready for boot
#sudo cp ./am335x-sancloud-bbe.dtb /boot/dtbs/4.4.54-ti-r93/
To be safe, flush file buffers to make sure your changes have gone to SD/eMMC
#sync
Now reboot and when you perform an lsusb you should see 2 hubs:
debian@beaglebone:~$ lsusb Bus 002 Device 003: ID 0bda:b720 Realtek Semiconductor Corp. Bus 002 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub