Application Note: Atmel AVR4960: USB Host Android Accessory
Application Note: Atmel AVR4960: USB Host Android Accessory
Application Note: Atmel AVR4960: USB Host Android Accessory
Introduction
Android smartphones represent nowadays (as of early 2012) more than 50% of a 650 million units per year market. Connecting an electronic device to an Android phone is becoming more and more popular. Examples range from sports equipment to medical devices, toys, audio systems, etc. This document introduces the Android Open Accessory Protocol for Atmel microcontrollers. The library and examples are included in the Atmel AVR Software Framework (ASF) to provide the customer with a quick and easy way to get started with developing an Android accessory. The existing demos are described in the Atmel AVR32848: Android Accessory Demo.
Table of contents
1. Organization ......................................................................................... 3 1.1 Overview ........................................................................................................... 3 2. Application Programming Interface (API) ............................................. 3 2.1 External API form UHI ....................................................................................... 3 3. Using the Android Open Accessory service ......................................... 4 3.1 Setting up the clock ........................................................................................... 4 3.1.1 Clock Settings for the UC3A0 on the Atmel EVK1105 ........................ 4 3.1.2 Clock Settings for the Atmel AVR UC3A3 on the Atmel EVK1104 ...... 5 3.2 Connection process .......................................................................................... 6 3.2.1 Identifying string information ............................................................... 6 3.2.2 Callbacks ............................................................................................ 6 Appendix A. Revision History .............................................................. 7
1.
1.1
Organization
Overview
The library integrates into the USB Host Stack V2 described in Atmel AVR4950: ASF USB Host Stack. It covers the UHI layer and keeps the interaction between the application and the UHC to a minimum. To fully understand the concept of the USB Host stack it is recommended to read AVR4950 which explains the structure.
UHD
2.
Application
External API from UHI Described in this document External API from UHC Described in external documents Internal API Described in external documents
UHC
UHI -
UHD
The full API from the Application to the UHC is described in the AVR4950 application note.
2.1
UHI
API description. Description Read data from the Andriod device Send data to the Android device
uhi_aoa_read (uint8_t*payload, uint_ payload_size, uhd_callback_trans_t callback_end) uhi_aoa_write (uint8_t*payload, uint16_t payload_size, uhd_callback_trans_t callback_end)
3.
3.1
3.1.1
/* ===== System Clock Bus Division Options */ /* #define CONFIG_SYSCLK_CPU_DIV 0 */ /* Fcpu = Fsys/(2 ^ CPU_div) */ /* #define CONFIG_SYSCLK_PBA_DIV 0 */ /* Fpba = Fsys/(2 ^ PBA_div) */ /* #define CONFIG_SYSCLK_PBB_DIV 0 */ /* Fpbb = Fsys/(2 ^ PBB_div) */ /* ===== Peripheral Clock Management Options */ /* #define CONFIG_SYSCLK_INIT_CPUMASK ((1 << SYSCLK_SYSTIMER) | \ (1 << SYSCLK_OCD)) */ /* #define CONFIG_SYSCLK_INIT_PBAMASK (1 << SYSCLK_USART0) */ /* #define CONFIG_SYSCLK_INIT_PBBMASK (1 << SYSCLK_HMATRIX) */ /* #define CONFIG_SYSCLK_INIT_HSBMASK (1 << SYSCLK_MDMA_HSB) */
/* ===== USB Clock Source Options */ /* #define CONFIG_USBCLK_SOURCE USBCLK_SRC_OSC0 */ /* #define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL0 */ #define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL1 #define CONFIG_USBCLK_DIV 1 /* Fusb = Fsys/(2 ^ USB_div) */ The first highlighted line specifies that OSC0 is used which is a 12MHz clock in case of the Atmel EVK1105. This means we have to use the PLL to convert the 12MHz clock into a 48MHz clock to feed it into the USB module. By using a multiplier of 8 and a divider of 2 we get a frequency of 48MHz. The last two lines make sure that this clock generated by the PLL1 is used by the USB module.
3.1.2
Clock Settings for the Atmel AVR UC3A3 on the Atmel EVK1104
Extract from the UC3A3 datasheet: The UTMI transceiver requires an external 12MHz clock as a reference to its internal 480MHz PLL this means we have to provide the proper clock internally to the USB Module. This will take care of generating the clock for high-speed, full-speed and low-speed connections. Here is one way how to use the conf_clock.h file to use with ASF to provide the proper clock to the USB Module. conf_clock.h /* ===== System Clock Source Options */ /*#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RCSYS */ #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_OSC0 /*#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL0 */ /* ===== PLL0 Options */ #define CONFIG_PLL0_SOURCE PLL_SRC_OSC0 /*#define CONFIG_PLL0_SOURCE PLL_SRC_OSC1 */ #define CONFIG_PLL0_MUL 11 /* Fpll = (Fclk * PLL_mul) / PLL_div */ #define CONFIG_PLL0_DIV 2 /* Fpll = (Fclk * PLL_mul) / PLL_div */ /* ===== PLL1 Options */ /*#define CONFIG_PLL1_SOURCE /*#define CONFIG_PLL1_SOURCE /*#define CONFIG_PLL1_MUL /*#define CONFIG_PLL1_DIV PLL_SRC_OSC0 */ PLL_SRC_OSC1 */ 8 */ 2 */
/* ===== System Clock Bus Division Options */ #define CONFIG_SYSCLK_CPU_DIV 0 /* Fcpu = Fsys/(2 ^ CPU_div) */ #define CONFIG_SYSCLK_PBA_DIV 0 /* Fpba = Fsys/(2 ^ PBA_div) */ /*#define CONFIG_SYSCLK_PBB_DIV 0 */ /* Fpbb = Fsys/(2 ^ PBB_div) */ /* ===== Peripheral Clock Management Options */ /*#define CONFIG_SYSCLK_INIT_CPUMASK ((1 << SYSCLK_SYSTIMER) | \ (1 << SYSCLK_OCD)) */ /*#define CONFIG_SYSCLK_INIT_PBAMASK (1 << SYSCLK_USART0) */ /*#define CONFIG_SYSCLK_INIT_PBBMASK (1 << SYSCLK_HMATRIX) */ /*#define CONFIG_SYSCLK_INIT_HSBMASK (1 << SYSCLK_MDMA_HSB) */ /* ===== USB Clock Source Options */ #define CONFIG_USBCLK_SOURCE USBCLK_SRC_OSC0 /*#define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL0 */ /*#define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL1 */ #define CONFIG_USBCLK_DIV 1 /* Fusb = Fsys/(2 ^ USB_div) */ Since we only need to provide a 12MHz clock and the EVK1104 has a 12MHz clock as OSC0 we can feed this clock directly into the USB Module with a divisor of 1.
3.2
3.2.1
Connection process
Identifying string information
After setting up the clock the programmed device should be able to connect to the Android device. By default, the identifying information of an Atmel EVK1105 will be used. If another combination of board and Android application should be used it is necessary to provide the proper strings as defines.
Identifying string information defines #define AOA_STRING_MANUFACTURER #define AOA_STRING_MODEL #define AOA_STRING_DESCRIPTION #define AOA_STRING_VERSION #define AOA_STRING_URL #define AOA_STRING_SERIAL "Atmel" "EVK1105" "EVK1105 Application Board" "1.0" "http://www.Atmel.com/Images/AVR32848" "0000000012345678"
Important for the launch of an Android App are the strings manufacturer, model and version as they are used to determine if an existing app on the Android side supports the board. The description is used to give the user some more information about the accessory and the URL can be provided to point the user to a place to download a suitable app or get more information on the accessory. Please keep in mind that the description and the URL are only evaluated if no suited app is installed on the Android device.
3.2.2
Callbacks
The library does not provide callbacks to the application level. All necessary callbacks are handled by the UHC. Please refer to the AVR4950 application note on how to use these callbacks.
Appendix A.
Doc. Rev. 42003A
Revision History
Date 5/2012 Comments Initial document release
Atmel Corporation 2325 Orchard Parkway San Jose, CA 95131 USA Tel: (+1)(408) 441-0311 Fax: (+1)(408) 487-2600 www.atmel.com
Atmel Asia Limited Unit 01-5 & 16, 19F BEA Tower, Millennium City 5 418 Kwun Tong Road Kwun Tong, Kowloon HONG KONG Tel: (+852) 2245-6100 Fax: (+852) 2722-1369
Atmel Munich GmbH Business Campus Parkring 4 D-85748 Garching b. Munich GERMANY Tel: (+49) 89-31970-0 Fax: (+49) 89-3194621
Atmel Japan G.K. 16F Shin-Osaki Kangyo Building 1-6-4 Osaki Shinagawa-ku, Tokyo 141-0032 JAPAN Tel: (+81)(3) 6417-0300 Fax: (+81)(3) 6417-0370
2012 Atmel Corporation. All rights reserved. / Rev.: 42003AAVR05/12 Atmel, Atmel logo and combinations thereof, AVR, Enabling Unlimited Possibilities, and others are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be trademarks of others.
Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.