N900 Hardware USB Host

(Status)
(Status)
Line 4: Line 4:
==Status==
==Status==
-
The current status is that USB Host mode is not reliable, even for those involved in development.
+
USB Host mode has reached beta status, and is working reliably with manual speed switching.
-
It can work, see [http://talk.maemo.org/showpost.php?p=656408&postcount=852 this post by egoshin on talk.maemo.org]. Who has succeeded in mounting a USB stick using an externally powered hub.
+
-
+
-
However, this is using the partially implemented [http://en.wikipedia.org/wiki/USB_On-The-Go OTG] driver, and confusing it into thinking it's talking to a OTG device in device mode.
+
-
 
+
-
This remains unreliable, and an implementation of host mode is likely to be much more stable.
+
Proper host mode would only require the normal cable, and a commonly available adapter. ([http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&item=250641334947 USB A-A adaptor])
Proper host mode would only require the normal cable, and a commonly available adapter. ([http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&item=250641334947 USB A-A adaptor])
-
A user friendly implementation that makes it easy to use host mode is some way off.
+
A pre-alpha of hostmode was released on the 23rd of September, here: http://talk.maemo.org/showthread.php?p=824298
 +
 
 +
This release is unreliable, and an implementation of proper host mode is likely to be much more stable.
 +
 
 +
A beta release, based on Paul's completely rewritten patches (see h-e-n's garage repository) was released on the 7th of November, and is the closest release yet to proper hostmode, http://talk.maemo.org/showthread.php?t=65232
There are several parts to getting USB host mode working for normal users.
There are several parts to getting USB host mode working for normal users.
Line 19: Line 18:
Some of these are quite easy, many are not.
Some of these are quite easy, many are not.
-
* Kernel modifications to make USB host work properly.
+
* Kernel modifications to make USB host work properly [done, thanks to Paul]
-
 
+
-
This is the part of the project that's holding everything else up - it's stalled.
+
* USB modules for supporting hardware.  This is fairly simple for most hardware - some hardware modules will not compile cleanly on ARM, and binary drivers that allow you to use windows drivers with some stuff will never work.
* USB modules for supporting hardware.  This is fairly simple for most hardware - some hardware modules will not compile cleanly on ARM, and binary drivers that allow you to use windows drivers with some stuff will never work.

Revision as of 15:43, 9 November 2010

This page is for those working on the implementation of friendly USB host mode.

See also the garage project.

Status

USB Host mode has reached beta status, and is working reliably with manual speed switching.

Proper host mode would only require the normal cable, and a commonly available adapter. (USB A-A adaptor)

A pre-alpha of hostmode was released on the 23rd of September, here: http://talk.maemo.org/showthread.php?p=824298

This release is unreliable, and an implementation of proper host mode is likely to be much more stable.

A beta release, based on Paul's completely rewritten patches (see h-e-n's garage repository) was released on the 7th of November, and is the closest release yet to proper hostmode, http://talk.maemo.org/showthread.php?t=65232

There are several parts to getting USB host mode working for normal users.

Some of these are quite easy, many are not.

  • Kernel modifications to make USB host work properly [done, thanks to Paul]
  • USB modules for supporting hardware. This is fairly simple for most hardware - some hardware modules will not compile cleanly on ARM, and binary drivers that allow you to use windows drivers with some stuff will never work.

For most drivers, if a particular driver does not work, it's generally a bug in the driver that should be fixed by that drivers maintainer.

This is in progress. All of the hardware required to make a BME clone is understood.

  • Usermode software.
    • The current software will not do the right thing if the user plugs in almost all devices - even if hostmode worked. To make a mouse work, you might want to enable a pointer for example.

Ideas for hostmode user-software

When an external power supply is found, the following should be done in sequence.


  • If the supply is a charger (D+,D- short, detected by the 1707a), fast charge.
  • Attempt to enumerate as a device, if this succeeds (including handling of suspended busses), then enumerate and charge as a device, respecting the enumerated current.
  • If enumeration as a device, and charger detection have failed, we may be plugged into a hub or device with reverse power. Attempt to enumerate connected devices. Charge at user-defined maximum current. For example - may be a 500mA power supply also supplying the hub and a keyboard = 2 unit loads - max draw = 300mA.