I am having problems getting USB to work in u-boot with the OMAP3530 and TPS65950. We are using the OTG in 'host' mode to use a USB flash storage device for running Linux. We are finding that the VBUS signal is only reaching a level of 1.5V - no where near the required 5V for USB. Does anyone have any ideas as to why this may be?
We have noticed that the OMAO3530 EVM uses an external OTG transceiver, instead of the one as part of the TPS65950 device. I can confirm that USB works using the EVM running the same u-boot software. Is there a particular reason why the TPS65950 is not used as an OTG transceiver?
I do not think the issue you are having with VBUS is directly related to the transceiver differences. VBUS on the OMAP3EVM OTG port is sourced from a high current 5.0 volt supply and controlled by a TPS2042 power switch which will limit the VBUS current source to a minimum current of 500mA.
Check the VBUS power source on your hardware platform and confirm it is able to source the current required by the attached device.
Thanks for your reply. The VBUS power source comes directly from the TPS65950 power chip, which I am lead to believe that it will output the necessary 5V. from looking at the datasheet, this 5V is sourced from the USB charge pump, which has an input of 3.6V. I have measured the voltage of the VBUS to be 1.5-2V when there is no USB connected to draw any current. The datasheet also does say that the current is 100mA... would this be too low for a USB flash stick?
I do not know if your USB Flash is a high power device that requires more than 100mA. The USB specification requires all devices to enumerate with a current consumption less than 100mA. If it requires more than 100ma, it must request permission from the host and only increase the current consumption after the host grants permission.
If you limit your host port to 100mA you will never be able to support high power USB devices.
The original TPS659xx silicon had some issues with USB so an alternate transceiver was used on the EVM. The EVM can be configured to support the on-board TPS659xx device, but the board assembly was never changed after the TPS659xx USB issues were resolved
The ID pin of the transceiver should be connected to ground to tell the OTG controller to operate in host mode. Is the ID pin connected to ground?
The connection of two OTG devices is normally initiated by the user by pressing a menu button. So the standard Linux kernel may be waiting for a command to initiate the connection.
Try to enter the following command at the Linux console prompt to initiate a USB session.
$ echo “F” > /proc/driver/musb_hdrc
We only intend to use the USB host for a flash drive, so it is not a problem only supporting low power USB devices. The EVM we are using is a revision D board, which seems to use a TWL4030 device but as I understand, this is essentially the same device. I can also confirm that the ID pin of the OTG transceiver is grounded.
As I mentioned in my first post, I am trying this in u-boot, entering the 'usb reset' command to initiate the USB connection. The intention is to boot Linux from the USB device and so, with the current problems I am experiencing, I am unable to test the USB host in Linux.
It is interesting that the original TPS659xx silicon had some issues, I am assuming that configuring an older Rev D EVM to support the on-board TPS659xx device would experience some of the same issues?
As an update my current situation, have confirmed the following:
Has anyone been able to successfully get u-boot to read a USB stick using the OMAP3530 and TPS65950 devices?
Can anyone help?
Please check if twl4030_usb_ulpi_init() is getting called from drivers/usb/musb/omap3.c file. This function does the necessary TPS65950 PHY clock and power init.
If my reply answers your question then please click on the green button "Verify Answer"
Thank you for your reply. I can confirm that the twl4030_usb_ulpi_init() is being called. The output I receive is:
> usb reset (Re)start USB... USB:
****** at this point there is a long delay (over 30 seconds)******
scanning bus for devices... No USB Device found scanning bus for storage devices... 0 Storage Device(s) found
Is there any additional power set-up I need to do in the board file or x-loader? The problem just seems to be that the charge pump is not outputting 5V. As I mentioned in my previous post, the USB worked when connecting the VBUS to an external 5V.
Have you connected the msc device to board using mini-A plug or made sure ID pin is grounded?
The ID pin is definitely grounded. This is also proven by the fact that the USB memory stick works in Linux.
I'm having the same problem with a AM37x EVM. Anybody figured this out? I'm trying to run the itbok otg tests and I'm encountering the same problems.
Can you describe your issue a little more? I have not tried to run the itbok test suite, but perhaps we can start by just having u-boot interact wit a USB Memory stick.
On the 37xEvm if you connect a Mini-A to A adapter and connect a memory stick to it from u-boot you should be able to display the usb stick's content as follows:
OMAP3_EVM # usb resetOMAP3_EVM # fatls usb 0:1
The Mini-A to A adapter ensure that the ID pin is grounded to let the MUSB OTG subsystem act as a USB Host.
If my reply answers your question then please click on the "Verify Answer" button.
The issue that I was having was actually that the IDpin was not grounded. That automagically fixed the issue.
Thank you much for your help.
I am also having problems that look like the issues above.Trying to use the OTG as host.
My situation is:
* Beagleboard (rev.B7) using TWL4030 OTG port.* OTG-port is connected to a mini-A connector (yes, ID pin is grounded!!!!).* OTG-port --> mini-A --> mini-B --> USB self powered Hub.* VBAT = 4.2 V
* USB-OTG (host) works in Linux (2.6.33). Self powered Hub is detected.* USB-OTG (host) DON'T work in U-Boot (usb reset time out). Self powered Hub is NOT detected.
I have noticed the following in U-Boot:
* VBUS is only driven to 4.2 V when bit DRVVBUS is activated.* As soon as session is started (DEVCTL.SESSION=1) VBUS falls down to 0 V.* DEVCTL.HOSTMODE is never set, leading to timeout for command 'usb reset'.* Experimented with register TESTMODE (bit FORCE_HOST) with no luck.
I have noticed the following in Linux:
* VBUS is driven to 5.1 V.
Why is VBUS never near 5 V in U-Boot but 4.2V (which seems to be same level as VBAT)?The Linux kernel have no problems with the same hardware and cable configuration.
I've instrumented the code in U-Boot and tried to follow the sequence and function twl4030_usb_ulpi_init() is getting called.I've also tried to compare the U-Boot code with kernel code and it looks like the init-sequence is the same. But I'am missing something.
Any hints would be appreciated.
All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.
TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs andembedded processors, along with software, tools and the industry’s largest sales/support staff.