View detail for Atmel AVR4950: ASF - USB Host Stack

Atmel AVR4950: ASF - USB Host Stack
Features
• USB 2.0 compliance
- Chapter 9
- Control, Bulk, Isochronous and Interrupt transfer types
- Low Speed (1.5Mbit/s), Full Speed (12Mbit/s), High Speed (480Mbit/s) data rates
• Low stack size
• Real time (OS compliance, no latency)
• Interrupt driven
• Speed performance using USB DMA
• Low power modes
• USB HUB
• Major USB classes and ready to use (HID, CDC, MSC, PHDC, AUDIO)
• Composite device
®
• 8-bit and 32-bit AVR platforms
• GCC and IAR™ compilers
8-bit Atmel
Microcontrollers
Application Note
1 Introduction
This document introduces the USB host stack. This stack is included in the Atmel®
AVR Software Framework (ASF), and aims to provide the customer with the
quickest and easiest way to build a USB embedded host application. Also this USB
host stack is oriented low footprint and low power. A full description of this stack is
available in this document.
Rev. 8486A-AVR-02/12
2 Abbreviations
ASF:
AVR Software Framework
CBW:
Command Block Wrapper (from Mass Storage Class)
CDC:
Communication Device Class
CSW:
Command Status Wrapper (from Mass Storage Class)
DP or D+: Data Plus differential line
2
DM or D-:
Data Minus differential line
EHCI:
Enhanced Host Controller Interface
FS:
USB Full Speed
HID:
Human interface device
HS:
USB High Speed
LS:
USB Low Speed
MSC:
Mass Storage Class
OHCI:
Open Host Controller Interface
PHDC:
Peripheral Health Device Class
PIPE:
Data buffer to manage an endpoint transfer in host mode
sleepmgr:
Sleep management service from ASF
UDC:
USB Device Controller
UDD:
USB Device Descriptor
UDI:
USB Device Interface
UHC:
USB Host Controller
UHD:
USB Host Descriptor
UHI:
USB Host Interface
USB:
Universal Serial Bus
USBB:
USB hardware interface version B for 32-bit Atmel core
USBC:
USB hardware interface version C for 32-bit Atmel core
STALL:
USB token used to stop a USB transaction
ZLP:
Zero length packet
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
3 USB host application notes
Several USB host examples are provided by Atmel. For each example, Atmel
provides several application notes.
Figure 3-1. USB host application notes.
Application notes on
USB host class
AN AVR4953
AN AVR4954
AN AVR4955
ASF USB host
HID mouse
ASF USB host
HID keyboard
ASF USB host
HID Generic
AN AVR4956
AN AVR4957
AN AVR4958
AN AVR4959
ASF USB host
MSC
ASF USB host
CDC
ASF USB host
PHDC
ASF USB host
AUDIO
Application notes for USB host vendor class
AN AVR4950
AN AVR4951
ASF USB host
Stack
ASF USB host
Vendor Class
Basic USB knowledge is necessary to understand the USB host class application
notes (Classes: HID, CDC, MSC, PHDC, AUDIO).
To create a USB host with one of the ASF provided classes, refer directly to the
related application note for this USB class.
The USB host stack and USB host vendor class application notes are designed for
advanced USB developers.
3
8486A-AVR-02/12
4 Organization
4.1 Overview
The USB host stack is divided into three parts:
• The USB Host Controller (UHC), providing USB Chapter 9 compliance
• The USB Host Interface (UHI), providing USB Class compliance
• The USB Host Driver (UHD), providing the USB interface for each Atmel product
NOTE
The USB host drivers are implemented in full interrupt mode, thus this UHD is a
perfect base to create a USB driver for third party’s USB stacks. This is applicable
either for custom interface or for OHCI/EHCI interface.
Figure 4-1. USB host stack architecture.
Application
USB host Stack
UHC
UHIs
UHD
In case of dual (device/host) mode, the application note AVR4900: ASF – USB
Device stack is provided to describe the USB device stack.
4.2 Memory Footprint
The USB host stack footprint depends on:
• Atmel core (megaAVR®, UC3)
• USB hardware version
• USB Class used
• Compiler and optimization level
These parameters give different footprint values, but in average the USB host stack
does not exceed 10Kbytes of FLASH and 1Kbytes of RAM using compiler highest
optimization level.
4.3 USB host stack files
The USB host stack is available in Atmel AVR Studio® 5 through the New Example
Project wizard and Select ASF Modules wizard. Accessing examples is done by
browsing the examples list or simply by typing "host" in the search field.
NOTE
4
Tip: Select Technology USB to reduce examples list in AVR Studio 5.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
NOTE
The example names including «From ASF V1» refer to former implementation of USB
host stack from ASF v1.7 which is beyond the scope of this application note.
4.3.1 Common files for all products
Files
Paths
• Defines USB constants
common/services/usb/
usb_protocol.h* (from usb.org)
usb_atmel.h* (from Atmel)
NOTE
• UHC files
uhc.c/h
uhi.h
uhd.h
common/services/usb/uhc/
• Classes Protocols files
usb_protocol_<class>.h*
common/services/usb/class/<class>/
• UHI files
uhi_foo.c/h
common/services/usb/class/foo/host/
* These files are common with USB device stack.
4.3.2 UHD files depending on selected products
•
•
•
•
NOTE
avr32/drivers/usbb/usbb_host.c/h
avr32/drivers/usbb/usbb_otg.h*
avr32/drivers/usbc/usbc_host.c/h
avr32/drivers/usbc/usbc_otg.h*
* These files are common with the USB device stack.
4.3.3 Specific file for each application
• Application file to configure USB host stack (see Chapter 7 Configuration, and
Table 5-3)
usb_conf_host.h
5
8486A-AVR-02/12
5 Application programming interface
This section describes all APIs except the UHI APIs, which are described in a
separate document.
Figure 5-1. USB modules.
Application
UHC
External API from UHC
Described in this document
External API from UHI
Described in external UHI documents
UHI - …
Internal API
Described in this document for USB
experts
UHD
5.1 External API from UHC
The external UHC API allows the application to manage common USB host behavior
and receive common USB host events. These controls and events are common to
any USB application.
Input functions
Callback functions
UHC
Table 5-1. External API from UHC – Input functions.
6
Declaration
Description
uhc_start()
Start the host mode.
uhc_stop(bool b_id_stop)
Stop the host mode and stop control of USB
ID pin, if requested by b_id_stop.
uhc_suspend(bool b_remotewakeup)
Suspend the USB line. This authorize or not
the remote wakeup features of each devices.
uhc_is_suspend()
Test if the suspend state is enabled on the
USB line.
uhc_resume()
Resume the USB line.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
Table 5-2. External API from UHC – Input functions concerning connected devices.
Declaration
Description
uint8_t uhc_get_device_number()
Return the number of devices connected.
char* uhc_dev_get_str_manufacturer(
uhc_device_t*dev)
Return the string ASCII manufacturer
corresponding at USB device.
char* uhc_dev_get_str_product(
uhc_device_t*dev)
Return the string ASCII product corresponding
at USB device.
char* uhc_dev_get_str_serial(
uhc_device_t*dev)
Return the string ASCII serial corresponding at
USB device.
char* uhc_dev_get_str(
uhc_device_t*dev, uint8_t str_id)
Return the USB string ASCII corresponding at
the string ID.
uint16_t uhc_dev_get_power(
uhc_device_t*)
Get the maximum consumption of a device
(mA).
uhd_speed_t uhc_dev_get_speed(
uhc_device_t*)
Return the current device speed.
bool uhc_dev_is_high_speed_support(
uhc_device_t*)
Return true if it is the device supports high
speed.
All UHC callbacks are optional and defined by the user in conf_usb_host.h file for
each application.
Table 5-3. External API from UHC – Callback functions.
Define name
Description
UHC_MODE_CHANGE(
bool b_host_mode)
To notify that the USB mode are switched
automatically. This is possible only when ID pin
is available.
UHC_VBUS_CHANGE(bool b_present)
To notify that the VBUS level has changed
(Available only in USB hardware with VBUS
monitoring).
UHC_VBUS_ERROR()
To notify that a VBUS error has occurred
(Available only in USB hardware with VBUS
monitoring).
UHC_CONNECTION_EVENT(
uhc_device_t* dev,
bool b_present)
To notify that a device has been connected or
disconnected.
UHC_WAKEUP_EVENT()
Called when a USB device or the host have
wake up the USB line.
UHC_SOF_EVENT()
Called for each received SOF each 1ms.
Note: Available in High and Full speed mode.
UHC_DEVICE_CONF(
uhc_device_t* dev)
Called when a USB device configuration must
be chosen. Thus, the application can choose
either a configuration number for this device or a
configuration number 0 to reject it.
If callback not defined the configuration 1 is
chosen.
7
8486A-AVR-02/12
Define name
Description
UHC_ENUM_EVENT (
uhc_device_t* dev,
uhc_enum_status_t status)
Called when a USB device enumeration is
completed. The status can be:
- UHC_ENUM_SUCCESS
Device is bus enumerated with at least
one supported interface.
- UHC_ENUM_UNSUPPORTED
All interfaces are not supported by UHIs.
- UHC_ENUM_OVERCURRENT
Device power can not be supported
- UHC_ENUM_FAIL
A problem has been occurred during USB
enumeration.
- UHC_ENUM_HARDWARE_LIMIT
USB hardware can not support it. Not
enough free pipes.
- UHC_ENUM_SOFTWARE_LIMIT
USB software can not support it.
Implementaion limit.
- UHC_ENUM_MEMORY_LIMIT
USB software can not support it. Not
enough memory.
5.2 Internal APIs
The following definitions are defined for advanced USB users who intend to develop a
specific USB host, not provided in ASF.
Figure 5-2. Internal USB host API overview.
2
UHC
1
UHI - …
Linked at compilation
3
4
Callback linked during
firmware execution
5
UHD
NOTE
Numbers are references for tables below.
Table 5-4. UHI input from UHC (1).
8
Declaration
Description
uhc_enum_status_t
(*install)(uhc_device_t*)
Install interface if supported by new device (allocation of
endpoints).
void (*uninstall)(uhc_device_t*)
Uninstall the interface if installed for this device.
void (*enable)(uhc_device_t*)
Called to start the USB interface of the device.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
Declaration
Description
void (*sof_notify)(bool b_micro)
Called by UHC to notify a SOF event on the enabled
USB interface.
Note:
The UHI API are stored in USB_HOST_UHI array, see Table 7-1.
Table 5-5. UHC input from UHD (3).
Declaration
Description
uhc_start()
Start the host mode.
uhc_stop(bool b_id_stop)
Stop the host mode and USB ID pin management if
requested by b_id_stop.
uhc_notify_connection(bool
b_plug)
Called when a device has been connected or
disconnected.
uhc_notify_sof(bool b_micro)
Called when a SOF is sent.
uhc_notify_resume()
Called when resume bus state occurs. After a
downstream or an upstream resume.
Table 5-6. UHD input (4).
Declaration
Caller
Description
uhd_enable()
UHC
Enables the USB host mode and ID management if the ID pin is
available.
uhd_disable(bool b_id_stop)
UHC
Disables the USB host mode and USB ID pin management if
requested by b_id_stop.
uhd_speed_t uhd_get_speed()
UHC/UHI
To check the speed of device connected to USB interface port (not
device connected on a USB hub).
uint16_t uhd_get_frame_number()
Application
Returns the current start of frame number.
uint16_t uhd_get_microframe_number()
Application
Returns the current micro start of frame number.
uhd_send_reset (
uhd_callback_reset_t callback)
UHC
The USB driver enables the reset state on the USB line.
uhd_suspend()
UHC
The USB driver enables the suspend state on the USB line.
uhd_is_suspend()
UHC
Test if the suspend state is enabled on the USB line.
uhd_resume()
UHC
The USB driver enables the IDLE state on the USB line.
(“Downstream Resume”)
bool uhd_setup_request(
usb_add_t add,
usb_setup_req_t req,
uint8_t *payload,
uint16_t payload_size,
uhd_callback_setup_run_t callback_run,
uhd_callback_setup_end_t callback_end)
UHC/UHI
Add this setup request, in the control endpoint setup queue.
(Request timeout is 5s)
bool uhd_ep0_alloc(
usb_add_t add,
uint8_t ep_size)
UHC
Enables control endpoint 0.
bool uhd_ep_alloc(
usb_add_t add,
usb_ep_desc_t *ep_desc)
UHC
Enables endpoints (except control endpoint).
uhd_ep_free(usb_add_t add, usb_ep_t endp)
UHC
Disables one endpoint or all endpoints of a device.
9
8486A-AVR-02/12
Declaration
Caller
Description
bool uhd_ep_run(
usb_add_t add,
usb_ep_t endp,
bool b_shortpacket,
uint8_t *buf,
iram_size_t buf_size,
uint16_t timeout,
uhd_callback_trans_t callback)
UHI
Starts/stops a data transfer in or out on an endpoint. The schedule
of the transfer is managed by UHD.
uhd_ep_abort(
usb_add_t add,
usb_ep_t endp)
UHI
Note: The control endpoint is not authorized here.
Table 5-7. UHD callback (5).
Declaration
Description
typedef void (*uhd_callback_reset_t)(void);
Called when the reset event, requested via uhd_send_reset(), is completed.
typedef bool (*uhd_callback_setup_run_t)(
usb_add_t add,
uint8_t **payload,
uint16_t *payload_size );
Called when the (payload) buffer, assigned via uhd_setup_request() is full or
empty. Then the setup request is hold.
A new buffer can be provided to restart the setup request or the setup request will
be aborted.
typedef void (*uhd_callback_setup_end_t)(
usb_add_t add,
uhd_trans_status_t status,
uint16_t payload_trans);
Called when the setup request is completed.
This callback is given via uhd_setup_request() routine.
typedef void (*uhd_callback_trans_t) (
usb_add_t add,
uhd_trans_status_t status,
iram_size_t nb_transfered)
Called when a transfer request is completed or cancelled. This request is
registered via uhd_ep_run().
This structure is updated after every attempted transaction, whether successful or
not. If the transaction is successful, then the status field is set to:
- UHD_TRANS_NOERROR.
uhd_trans_status_t
10
Otherwise, it is set according to the following transmission error types:
- UHD_TRANS_CRC,
CRC error in data packet.
- UHD_TRANS_DISCONNECT,
device is disconnected.
- UHD_TRANS_DT_MISMATCH,
data toggle PID did not match the expected value.
- UHD_TRANS_STALL,
the endpoint returned a STALL PID.
- UHD_TRANS_NOT_RESPONDING,
Device did not respond to token (IN) or did not provide a handshake (OUT).
- UHD_TRANS_PID_FAILURE,
Check bits on PID from endpoint failed.
- UHD_TRANS_TIMEOUT,
Data transmission not completed before timeout.
- UHD_TRANS_ABORTED,
Data transmission has been aborted.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
Table 5-8. UHD input for High Speed application only (4).
Declaration
Caller
uhd_test_mode_j()
UHC
uhd_test_mode_k()
UHC
uhd_test_mode_se0_nak()
UHC
uhd_test_mode_packet()
UHC
Description
Features to enable a specific signal
on a USB HS port.
These are requested to run a USB
host HS certification.
5.3 Device connected information
The UHC manages the devices via a structure called uhc_device_t, which stores
many information about the devices connected on the USB tree.
The global variable g_uhc_device_root contains the information about the first
device connected and it is the first element of the device list.
The user application can read this list to get information on current USB tree.
NOTE
There is no USB tree limitation, because the device list and the USB descriptor fields
allocations are dynamic and require the standard allocation library (e.g. alloc()).
The uhc_device_t structure includes:
•
•
•
•
•
•
A pointer on the USB device descriptor
A pointer on the USB configuration descriptor
the USB device address
the USB device speed
pointers on parent USB HUB device (for USB HUB support only)
HUB port number connection (for USB HUB support only)
Figure 5-3. uhc_device_t definition.
uhc_device_t
g_uhc_device_root
Device Descriptor
usb_dev_desc_t dev_desc
usb_conf_desc_t *conf_desc
Device Configuration
Descriptor
uint8_t address
uhd_speed_t speed
uhc_device_t *prev
uhc_device_t *next
uhc_device_t
uhc_device_t
…
uhc_device_t
…
…
uhc_device_t *hub
uint8_t hub_port
uint16_t power
For USB HUB support only
Legend:
From USB 2.0
ASF struct
...
11
8486A-AVR-02/12
6 USB host stack behavior
This chapter aims to answer advanced USB usage questions and introduce the USB
host stack behavior.
The following sections describe the interaction between the different layers for these
steps:
•
•
•
•
USB dual roles management
USB VBUS management
USB device connection management
USB device enumeration management
6.1 Dual roles
When the USB hardware has the possibility to work in USB device and in USB host
mode, the user can implement a dual role application. This application will switch
between a USB device and a USB host task following the USB ID pin level (from OTG
specification) or a custom process.
The USB host stack provides three possibilities to manage the dual role: manual,
automatic and semi-automatic.
The manual dual role must be used when ID pin is not available. In this case, a
custom process manages the dual role.
The automatic and semi-automatic dual role must be used when ID pin is managed
by the USB hardware interface.
The semi-automatic dual role allows delaying the start of USB device and USB host
mode when the ID pin change. This possibility is enabled when
UHD_START_MODE_MANUAL is defined (See Table 7-2).
12
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
Figure 6-1. USB manual dual role.
App
USB device/host stacks
Custom event
uhc_stop()
Switch from host to
device mode
udc_start()
USB device mode
running
Custom event
udc_stop()
Switch from device
to host mode
uhc_start()
USB host mode
running
Figure 6-2. USB semi-automatic dual role.
App
Start dual role
USB device/host stacks
uhc_start()
The ID pin is not tide to ground.
(OTG connector unplugged)
Stop host auto
UHC_MODE_CHANGE(false)
App can wait
before start
device mode
udc_start()
The ID pin tides to ground.
(OTG connector plugged)
USB device
mode running
Stop device auto
UHC_MODE_CHANGE(true)
App can wait
before start host
mode
USB host mode
running
uhc_start()
USB interrupts
13
8486A-AVR-02/12
Figure 6-3. USB automatic dual role.
App
Start dual role
Just to notify application
but not mandatory
USB device/host stacks
uhc_start()
UHC_MODE_CHANGE(false)
The ID pin is not tide to ground.
(OTG connector unplugged)
Stop host auto
Start device auto
USB device
mode running
The ID pin tides to ground.
(OTG connector plugged)
Stop device auto
Just to notify application
but not mandatory
UHC_MODE_CHANGE(true)
Start host auto
USB host mode
running
14
USB interrupts
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
6.2 VBUS management
Figure 6-4. VBUS management.
App
UHC
UHD
VBUS always on
uhc_start()
Start host mode
uhd_enable()
USB host mode
running
uhc_stop()
Start host mode
uhd_disable()
VBUS controlled by application
Start host mode
Turn on VBUS
uhc_start()
uhd_enable()
USB host mode
running
uhc_stop()
uhd_disable()
Start host mode
Turn off VBUS
VBUS controlled by USB Driver (VBOF)
Start host mode
uhc_start()
uhd_enable()
Turn on VBUS
VBUS high
UHC_VBUS_CHANGE(true)
USB host mode
running
VBUS error
UHC_VBUS_ERROR()
uhc_stop()
Start host mode
uhd_disable()
Turn off VBUS
USB interrupts
15
8486A-AVR-02/12
6.3 Device connection
Figure 6-5. USB device connection.
UHC
UHD
Device plugged
UHC_CONNECTION_EVENT()
USB RESET
uhc_connection(true)
uhd_send_reset()
End of reset
Reset callback
SOF
USB IDLE 20ms
uhc_sof()
uhd_send_reset()
End of reset
USB RESET
Reset callback
SOF
uhc_sof()
USB IDLE 100ms
uhd_setup_request()
Setup ACK
Setup request Get device descriptor
(Default control endpoint size =
64B, and fill
uhc_device_t.dev_desc.bMaxPa
cketSize0)
IN ACK
ZLP OUT ACK
Setup callback
SOF
uhc_sof()
USB IDLE 20ms
uhd_send_reset()
End of reset
USB RESET
Reset callback
SOF
uhc_sof()
USB IDLE 100ms
uhd_setup_request()
Setup request Set address
USB IDLE 20ms
Setup…
Setup callback
SOF
uhc_sof()
uhd_setup_request()
Setup request Get device descriptor
(Fill uhc_device_t.dev_desc)
16
USB interrupts
NOTE
This sequence is the same for the device connected thru a USB HUB, but the
connection and reset events are managed via USB HUB setup request.
NOTE
When the USB device enumeration fails four times, the USB line of the device is set
in USB SUSPEND mode.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
6.4 Device enumeration
Figure 6-6. USB device enumeration (single USB configuration).
UHI
UHI
UHC
Send request
“Get configuration descriptor 1”
Fill uhc_device_t.conf_desc
UHD
uhd_setup_request()
Setup end
uhi_install()
No supported
Call the UHIs to install
(allocate endpoints) the new
supported USB interface.
uhi_install()
uhd_ep_alloc()
Supported
uhd_setup_request()
Setup end
Send request
“Set configuration 1”
UHC_ENUM_EVENT(
UHC_ENUM_SUCCESS)
Enable all UHI modules.
The UHI module(s) can send
a setup interface request.
uhi_enable()
uhi_enable()
uhd_setup_request()
Setup end
The UHI module receives the
result of the setup interface
request and can continue the
initialization of USB interface.
Here, a transfer is start on an
endpoint.
uhd_ep_run()
USB interrupts
NOTE
Here the callback UHC_DEVICE_CONF() is not defined, thus the device configuration 1 is
chosen by default.
17
8486A-AVR-02/12
Figure 6-7. USB device enumeration (multiple USB configurations).
UHI
UHC
UHD
UHC_DEVICE_CONF ()
Which return the configuration
number chosen (N)
Send request
“Get configuration descriptor N”
Fill uhc_device_t.conf_desc
uhd_setup_request()
Setup end
uhi_valid()
Call the UHIs to find unless
one supported USB interface
and allocate endpoints of
valid interface(s).
uhi_alloc()
uhd_ep_alloc()
uhd_setup_request()
Setup end
Send request
“Set configuration N”
UHC_ENUM_EVENT()
USB interrupts
User code example to support a known device with multiple configurations:
<conf_usb.h>
#define UHC_DEVICE_CONF(dev) user_choose_usb_conf(dev)
<User C file>:
uint8_t user_choose_usb_conf(uhc_device_t* dev) {
if ((dev->dev_desc.idVendor == 0x1234)
&& (dev->dev_desc.idProduct == 0x5678)) {
Assert(dev->dev_desc.bNumConfigurations>=2);
return 2; // The configuration 2 is chosen
}
return 0; // No conf chosen because of unknown device
}
18
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
7 Configuration
The application’s configurations are defined in the conf_usb_host.h file. This file must
be created for each application, and this action requires a basic USB knowledge.
The conf_usb_host.h file defines the following configurations:
• USB host configuration
• USB host interface configuration
• USB host driver configuration
7.1 USB host configuration
The following configuration must be included in the conf_usb.h file of the application,
which is the main USB device configuration.
Table 7-1. USB host configuration.
Define name
Type
Description
USB_HOST_UHI
Array of UHI APIs
Define the list of UHI supported by USB host.
Example:
#define USB_HOST_UHI UHI_MSC, UHI_HID_MOUSE
mA
Maximum current allowed on VBUS.
Only defined
Authorize the USB HUB support.
(Available for release ASF3)
Only defined
Authorize the USB host to run in High Speed.
USB_HOST_POWER_MAX
USB_HOST_HUB_SUPPORT
(1)
USB_HOST_HS_SUPPORT (1)
Note:
1. Optional configuration. Comment the define statement to disable it (ex: // #define USB_HOST_X).
7.2 USB host interface configuration
The UHI configurations are described in USB host class application notes.
7.3 USB host drivers configuration
The USB hardware interface can provide specific features which can be enabled in
conf_usb_host.h file, in conf_board.h file and in project options.
Table 7-2. USB host driver configuration in conf_usb_host.h.
Define name
Values
UHD
Description
UHD_NO_SLEEP_MGR
Only
defined
All
Remove the management of sleepmgr service.
UHD_ISOCHRONOUS_NB_BANK
1, 2, 3
USBB
Reduces or increases isochronous endpoint buffering. Default value
if not defined: 2
UHD_BULK_NB_BANK
1, 2, 3
USBB
Reduces or increases bulk endpoint buffering.
Default value if not defined: 2
UHD_INTERRUPT_NB_BANK
1, 2, 3
USBB
Reduces or increases interrupt endpoint buffering.
Default value if not defined: 1
UHD_INT_LEVEL
0 to 3
USBB
USBC
Sets the USB interrupt level on AVR32 cores.
Default value if not defined: 0 (recommended)
19
8486A-AVR-02/12
Define name
Values
UHD
Description
UHD_START_MODE_MANUAL
Only
defined
USBB
USBC
By default, when the ID pin is available (USB_ID defined), the host or
device mode are stopped and started automatically when the ID pin
changes. This automatically start can be disabled, but the
automatically stop mode remains.
Table 7-3. USB host driver configuration in conf_board.h.
Define name
Values
UHD
Description
USB_ID
AVR32_USBB_USB_ID_x_x
AVR32 - USBB
Define the input pin connected to ID pin from
USB connector. This enables usage of USB
ID pin from OTG connector. If not defined,
the ID pin usage is disabled.
USB_ID
AVR32_USBC_USB_ or
AVR32_USBC_USB_x
AVR32 - USBC
Define the input pin connected to ID pin from
USB connector. This enables usage of USB
ID pin from OTG connector. If not defined,
the ID pin usage is disabled.
USB_VBOF
AVR32_USBB_USB_VBOF_x_x
AVR32 - USBB
Define the output pin connected to enable
pin of VBUS generator. This enables usage of
VBUS control by the USB hardware interface.
If not defined, the VBUS control is disabled.
USB_VBOF
AVR32_USBC_USB_VBOF or
AVR32_USBC_USB_VBOF_x
AVR32 - USBC
Define the output pin connected to enable
pin of VBUS generator. This enables usage of
VBUS control by the USB hardware interface.
If not defined, the VBUS control is disabled.
USB_VBOF_ACTIVE_LEVEL
LOW or HIGH
AVR32 - USBB
AVR32 - USBC
Active level of the USB_VBOF output pin.
Table 7-4. USB host/device driver configuration in project.
20
Define name
Values
UHD
Description
UHD_ENABLE
Defined
UDD_ENABLE
Defined
USBB
USBC
These defines allow to know if the dual role
(host & device) is enabled.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
8 USB HUB support
The USB host stack is able to support a USB tree through a USB HUB. However, the
USB hardware interface provided on Atmel parts can limit the USB tree.
Table 8-1. USB HUB hardware limitation.
USB hardware
interface
Description
USBB
Number of pipes limited to seven or eight, but control endpoint multiplexed in
one pipe.
Does not support multiple USB speeds in same time on a USB tree.
USBC
Number of pipes limited to seven, but control endpoint multiplexed in one
pipe.
Supports pipe multiplexing (1).
Does not support multiple USB speeds in same time on a USB tree.
Note:
1. To avoid the limitation due to pipes number a multiplexing of the pipes is possible.
However, the transfer scheduling must be done by software (UHD driver) instead
of by USB hardware.
21
8486A-AVR-02/12
9 Power consumption
The power modes available on Atmel products are supported by the USB hardware.
All USB drivers implement the feature from sleepmgr service. Thus, the sleepmgr
service initialization sleepmgr_init() must be called by the application prior any calls to
the USB stack.
9.1 AVR32 core
On AVR32 core, the clocks and oscillators can be automatically switched off during
idle periods by using the sleep instruction on the CPU.
Table 9-1. Sleep level supported in by USBB and USBC host drivers.
USB state
Maximum sleep mode authorized
ID pin no active (wait host mode)
STATIC
No VBUS (wait VBUS event)
STOP or FROZEN on UTMI parts
(UTMI = high speed capability)
VBUS present and device disconnected
IDLE
VBUS present and
device connected
NOTE
22
Suspend
STATIC
IDLE without DMA
IDLE
IDLE + DMA running
IDLE
The sleep modes listed here may not be reached if any other software module than
the USB stack requires a less profound sleep mode.
Atmel AVR4950
8486A-AVR-02/12
Atmel AVR4950
10 Table of Contents
Atmel AVR4950: ASF - USB Host Stack ............................................ 1
Features ............................................................................................... 1
1 Introduction ...................................................................................... 1
2 Abbreviations ................................................................................... 2
3 USB host application notes ............................................................ 3
4 Organization ..................................................................................... 4
4.1 Overview.............................................................................................................. 4
4.2 Memory Footprint ................................................................................................ 4
4.3 USB host stack files ............................................................................................ 4
4.3.1 Common files for all products .................................................................................... 5
4.3.2 UHD files depending on selected products................................................................ 5
4.3.3 Specific file for each application ................................................................................ 5
5 Application programming interface ............................................... 6
5.1 External API from UHC ....................................................................................... 6
5.2 Internal APIs ........................................................................................................ 8
5.3 Device connected information ........................................................................... 11
6 USB host stack behavior............................................................... 12
6.1 Dual roles .......................................................................................................... 12
6.2 VBUS management ............................................................................................. 15
6.3 Device connection ............................................................................................. 16
6.4 Device enumeration .......................................................................................... 17
7 Configuration ................................................................................. 19
7.1 USB host configuration...................................................................................... 19
7.2 USB host interface configuration....................................................................... 19
7.3 USB host drivers configuration.......................................................................... 19
8 USB HUB support .......................................................................... 21
9 Power consumption....................................................................... 22
9.1 AVR32 core ....................................................................................................... 22
10 Table of Contents......................................................................... 23
23
8486A-AVR-02/12
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, Milennium 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
16F, Shin Osaki Kangyo Bldg.
1-6-4 Osaki Shinagawa-ku
Tokyo 104-0032
JAPAN
Tel: (+81) 3-6417-0300
Fax: (+81) 3-6417-0370
© 2012 Atmel Corporation. All rights reserved.
®
®
®
®
Atmel , Atmel logo and combinations thereof, AVR , AVR Studio , megaAVR , and others are registered 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
product 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.
8486A-AVR-02/12