I have several USB host shields which I intend on connecting to an Arduino UNO so I can connect a PS3 controller which will be used to control some electric motors controlled by an L298 H Bridge.

The issue I have is that half of the shields I have are working, the other half are not.

After lots of probing of the boards and testing using the USB host shield library 2.0 version 1.4.0 I have found that the D+ track on a working board is around 2.7V for the board which are not working the voltage is less than 0.1V.

I have tried to force the USB shield to recognize the USB device using the USB.cpp code on line 467, making a change

from: tmpdata = getVbusState();

to: tmpdata = 2;

which triggers the code to try and initialize the blue tooth dongle, but the process fails when it request the device information from the dongle.

rcode = getDevDescr(0, 0, sizeof (USB_DEVICE_DESCRIPTOR), (uint8_t*)buf);

I have also tried to force the initialization by connecting the 3.3V power supply directly to the D+ line. This will trigger a code response but again it fails when it tries to initialize the dongle.

Initially I was concerned it maybe a difference in the MAXIM3421e chip, however I have two chips manufactured in the same week from the same supplier and one works but the other does not. The only obvious difference between the boards is the one that works has 2045L on it, the others do not.

I am looking for suggestions as to how troubleshoot the issue and any ideas as to why the voltage on D+ is not registering the dongle being attached.

  • 1
    \$\begingroup\$ please add a picture of the working board and a picture of a non-working board .... orient the boards the same way .... front and back of the boards ... maybe something will be noticeable \$\endgroup\$
    – jsotola
    Sep 4, 2022 at 18:50

1 Answer 1


You've worked out that D+ must be pulled up by the device to start the USB session. So something is amiss right there. Either something on the shield is keeping that line low, or the PS3 controller isn't working.

When you "trick" the code into starting the session, it still doesn't fix the "D+ is low" problem. When you pull the D+ up 3.3V, now you're interfering with the data line and it wouldn't be able to work either.

Just as a guess, see if the PS3 controller is really getting power on its Vbus line.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.