UDOO Switch between adb Debug and ADK connection
Android don’t use the uart serial to communicate with the Atmel SAM3X microcontroller but the native USB OTG bus on both sides. The i.Mx6 processor is always connected to the bus while the other side of the bus can be switched between SAM3X microcontroller and the external microUSB CN3. The switch is controlled by two i.Mx6 pins.
To power on the OTG USB bus you need to plug the J2 jumper on which enables the voltage supply to the bus.
Android Accessory Mode
By default the Android OTG BUS is switched to SAM3X, the starting connection is between the two processors which means that if you plug an USB cable to the CN3 connector it doesn’t work.
With this configuration the i.Mx6 communicates with the SAM3X using the ADK protocol. The SAM3X needs to be programmed by a sketch which includes some specific libraries then install an app on Android configured to use the ADK protocol.
USB Debug mode
UDOO can use the Android Debug Bridge (adb) to to install debug and test applications like a normal Android device. To do so you need to switch the OTG bus to the microUSB port, then connect your personal computer to the CN3 microUSB port and use the standard adb tools on UDOO.
By default the OTG bus is connected to SAM3X. To switch the OTG bus channel and use the adb protocol follow the steps listed in the appropriate section.
The first time Android show an text alert like this.
Allow USB debugging? The computer's RSA key fingerprint is: 01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF  Always allow from this computer
Android asks you to accept the fingerprint of your pc. Select the option “Always allow from this computer” and press ok button.
If you launch a console on your host computer and you have installed the Android SDK, you can access to UDOO with adb protocol.
You can download the Android SDK and get the full documentation here: http://developer.android.com/sdk/index.html
The ADB protocol guide is available here: http://developer.android.com/tools/help/adb.html
Switching between modes
You can automatically switch between modes using the options menu checkbox.
Starting from home screen press on the application menu button.
Press the Settings button
From the left menu, under System, select “Developer options”
Under Debugging find this checkbox:
External OTG port enabled Enable external OTG port for allow USB debugging (Warning: enabling external OTG port will disconnect internal communication with Arduino)
If External OTG port enabled is selected you can access the Android adb from an external computer.
If not the OTG is shared between i.Mx6 and SAM3X (so they can communicate with ADK protocol and use them together.)
Connect a microUSB cable to CN6 and plugging the J18 jumper then access to the UART serial with a terminal application (e.g Teraterm, Minicom, Serial Tools).
When you access the Android console you can switch between two modes.
Switch from INTERNAL ADK mode (i.Mx6 <-> SAM3X) to Debug Mode (microUSB plugged in CN3)
sudo -s echo 0 > /sys/class/gpio/gpio203/value echo 0 > /sys/class/gpio/gpio128/value
Switch from Debug Mode (microUSB plugged in CN3) to INTERNAL ADK mode (i.Mx6 <-> SAM3X)
sudo -s echo 1 > /sys/class/gpio/gpio128/value echo 1 > /sys/class/gpio/gpio203/value
When you switch from Debug to ADK mode, after you sent the two commands, you may need to reset the SAM3X and plug and unplug the J16 jumper. If you loaded a sketch that implements ADK protocol you should see an alert noticing you that the Android Accessory is now connected. If there is an app that matches the id on the Arduino sketch the alert asks you if you want to open this app.
On the top-left menu there is also a message that remind you the Accessory Connection.