If you came here to read about the N810, then scroll down to the N810 section.
The Nokia N800 is a PDA sized Linux device which Nokia markets as being an "Internet Tablet". This device is quite open from a software point of view and lots of its source code is freely available. Unfortunately the hardware interface possibilities for homebrew hardware are quite limited as the device does not come with easily accessible legacy ports like rs232. The USB port present on those devices is only meant to connect to PCs.
Interestingly, the device indeed comes with a so-called USB on the go (OTG) capable USB controller like its predecessor the N770 and like the next gen N810. The stock N800 (as well as the N770 and N810) use USB only to provide target functionality. This means that the N800 can only be connected to a PC to act as a mass storage device or for firmware upload. In its delivery state it cannot act as a USB host itself in order to connect to peripheral hardware like USB memory sticks. This is sad as the hardware OTG capabilities of the N800 in fact allow the device to be switched into host mode. Furthermore Nokia did not use a OTG capable Mini-AB recepticle on the N800. Instead they used a so-called Mini-B receptacle which is only specified for target use.
Three problems have thus to be solved to use the N800 as a USB host:
First, a USB OTG capable operating system is needed. The kernel included with the os2007 version of the Linux operating system delivered with the N800 is not capable to support USB OTG. Fortunately someone had a look at this and provides matching patches. Nokia even released the latest os2008 (Maemo 4.0) version of their operating system for the N800 with USB OTG support already included.
OS2008 with USB OTG support for the N800 can be downloaded directly from Nokias site and be installed to the N800 as described here.
There are at least three ways for the next steps. These vary in with repect to the hardware modifications required and with respect to their simplicity during daily use.
Let's begin with the solution that requires the least hardware changes. In fact only off the shelf components are being used as depicted in the following image:
This setup only uses the USB cable delivered with the N800 and a so-called female-USB-A to female-USB-A adapter to connect this cable to the cable of a USB target device like the i2c-tiny-usb shown above.
The huge downside of this rather simple apporach is the fact that the N800 will not automatically switch into host mode. This is due to the fact that the Mini-B connector on any USB cable like the one delivered with the N800 does not provide the necessary electrical connection (a direct connection between the ID pin 4 and the GND pin 5 on the Mini-USB connector) to inform the N800 to do the role change. Only Mini-A connectors provide the required connection between pins 4 and 5. But cables using the Mini-A connector don't fit into the Mini-B recepticle Nokia is using at the N800.
The OS2008 therefore provides a software mechanism to force the N800 into operating its USB interface as a host even if the Mini-B connector does not provide the necessary connection between pins 4 and 5. You need to become root and issue the follwing command in the xterm:
echo host > /sys/devices/platform/musb_hdrc/mode
This will force the N800 into USB host mode regardless of the actual cable type being used. For further details found here.
Manually switching the N800 into host mode sure is cumbersome and isn't the way USB OTG is meant to be used. To make the automatic role switching work one of two things has to be done:
If there was a Mini-B plug equipped cable that provided the connection between pins 4 and 5 the N800 could be tricked into host mode. Unfortunately such a cable doesn't seem to be sold anywhere. Therefore the following instructions will explain how to build such a cable.
The construction of the cable starts with a defective retractable Mini-B equipped cable. First the Mini-B plug needs to be cut off and the entire plastic has to be removed removed using e.g. a sharp knife:
The thecmetal part of the connector can be opened which reveals ... even more plastic inside which also has to be removed so finally the entire connector can be taken apart:
Luckily the connection to pin 4 is accessible (can barely be seen in the picture). So a connection between pins 4 and 5 can carefully be soldered using a thin wire. Then cut another USB extension cable has to be sacrificed and its standard female USB-A end is cut off. This is then connected to the modified Mini-B plug:
Finally the Mini-B plug has to be reassembled in order to finish the cable:
A final test shows that everything works as expected and a memory stick connected to the cable is automatically detected by the N800 and the file manager shows up all by itself:
Although this cable does not comply with the USB standard as the Mini-B plug must not be used to connect to a host device, the use of this cable is not very dangerous. No harm will be done even if this cable is used on non-OTG aware devices. You could only connect two target devices using this cable which won't work (what should e.g. two memory stick tell each other?) but it also won't damange anything.
This is the most dangerous variant as you have to solder at your N800. But it's sure the "right" solution as this is how USB OTG is meant to be used.
I have not tested this (yet) and i probably won't do this to my precious N800. You'd also need to get hold of a matching Mini-AB recepticle. Please drop me an email if you'd be willing to donate a N800 for such experiments.
Even with the correct cable and with the latest os2008 kernel this "USB device not supported" message will appear whenever a device is connected to the n800. You can usually safely ignore this message as it's even not true in most cases. Devices that often work out of the box regardless of this message are mass storage devices (e.g. memory sticks and harddisks) and keyboards. But even some of those may not work if they e.g. draw too much power (or just claim to do so). You have to keep in mind that a device like the n800 cannot provide as much power to a usb target device as a typical PC can. Thus e.g. the use of a self powered hub (one coming with its own power brick) between the n800 and the target may be required. Other devices like mice and joysticks will not work at all since the stock os2008 is not coming with the necessary drivers. Some of these can easily be installed afterwards, some need a complete re-install of an updated kernel and some can be used using the libusb already present on the n800.
With the n810 most USB headaches are gone. It comes with os2008 pre-installed and thus already comes with USB host support on the operating system. Furthermore it comes with a micro-USB-OTG recepticle (note the "micro" instead of "mini" since the n810 is using the latest and smallest of the standard compliant USB connectors). This recepticle accepts micro-b plugs as the one on the cable delivered with the n810 as well as micro-a plugs required for host mode. So no custom built cables are needed. Although the required micro-a cables are quite rare since micro-usb is a very new standard, many places already have the necessary cables. These cables should have a micro-a connector on one end and either one of the different b-style connectors at the other end in order to directly plug into a target device. Or it should have a female usb-a connector to be used with the cable that came with the target device to be used.