網頁

2014年9月14日 星期日

[EZ-USB FX3] Added descriptor in USB 2.0


在 USB descriptor 的規格中, 定義了從 device/configuration/interface/endpoint, 從上而下的樹狀結構. 一個 device 可以有數個 configurtion, 一個 configuration 可以有數個 interface, 一個 interface 可以有數個 endpoint, 可以很清楚的瞭解到 device 提供了那些互動的方式.
當功能和 interface 是 1:1 對應的時候, 這些看來都沒有問題.
image
然而, 如果一個 device 如果有一個功能, 用到不同的 interface, 這樣主機端就不能由原先 device 傳回來的 descriptor, 看出這兩個 interface 是屬於同一組 (也許驅動程式根本就是同一個).
image

Interface Association Descriptors

因此, 在 USB 2.0 的規格推出後, 又以 ECN (Engineering Change Note) 的形式, 提出一個新的 descriptor, 在 USB 3.0 這是規格的一部份. 這一個 descriptor 就是在描述 interface 彼此之間的關係.
Offset Field Size Value Description
0 bLength 1 Number Size of Descriptor in bytes 0x09
1 bDescriptorType 1 Constant Interface Association Descriptor 0x0B
2 bFirstInterface 1 Number Interface number of the first interface that is associated with this function  
3 bInterfaceCount 1 Number Number of contiguous interfaces that at associated with this function  
4 bFunctionClass 1 Class Class Code (assigned by USB-IF)  
5 bFunctionSubClass 1 SubClass Sub Class Code (asigned by USB-IF)
6 bFunctionProtocol 1 Protocol Protocol Code (assigned by USB-IF)
7 iFunction 1 Index Index of string descriptor describing this function

2014年9月12日 星期五

[EZ-USB FX3] USB 3.0 Additional Descriptors


SuperSpeed USB 3.0 增加兩個新的 descriptors, 用來儲存 technology 及 device function 的特定資訊.

Binary device Object Store (BOS)

BOS descriptor 作為一個或是更多的 device capability descriptor 的基礎的 descriptor, 提供特定的能力和技術的資訊.
所有的 SuperSpeed USB 3.0 設備都必需支援這一個 descriptor, 並且在 high speed 運行時, 支援 Link Power Management (LPM).
Offset Field Size Value Description
0 bLength 1 Number Size of Descriptor in bytes 0x05
1 bDescriptorType 1 Constant BOS Descriptor 0x0F
2 wTotalLength 2 Number The number of bytes in this descriptor and all of its subordinate descriptors include all sub desceiptors
4 bNumDeviceCaps 1 Number The number of device capability descriptors subordinate to this BOS descriptor.

Device Capability Descriptor

Device Capability Descriptor 描述各不同 Device 的 capability
Offset Field Size Value Description
0 bLength 1 Number Size of Descriptor in bytes
1 bDescriptorType 1 Constant DevCapability Descriptor 0x10
2 bDevCapabilityType 1 Number Device Capability Type
3 Capability-Dependent Var Variable Capability-specific data and format
 

Device Capability Types Codes


Capability Code Value Descriptor
Wireless_USB 01H Defines the set of Wireless USB-specific device level capabilities
USB 2.0 Extension 02H USB 2.0 Extension Descriptor
SUPERSPEED_USB 03H Defines the set of SuperSpeed USB specific device level capabilities
CONTAINER_ID 04H Defines the instance unique ID used to identify the instance across all operating modes
PLATFORM 05H Defines a device capability specific to a particular platform/operating system
POWER_DELIVERY_CAPABILITY 06H Defines the various PD Capabilities of this device
BATTERY_INFO_CAPABILITY 07H Provides information on each battery supported by the device
PD_CONSUMER_PORT_CAPABILITY 08H The consumer characteristics of a port on the device
PD_PROVIDER_PORT_CAPABILITY 09H The provider characteristics of a port on the device
SUPERSPEED_PLUS 0AH Defines the set of SuperSpeed Plus USB specific device level capabilities
PRECISION_TIME_MEASUREMENT 0BH Precision Time Measurement (PTM) Capability Descriptor
Wireless_USB_Ext 0CH Defines the set of Wireless USB 1.1-specific device level capabilities
Reserved 00H,
0DH~FFH
Reserved for future use

2014年9月11日 星期四

[EZ-USB FX3] Notes on USB 2.0 descriptors


USB 的 descriptor 是 host 識別 device 的資料. 當一個 USB 的設備插入 USB port 時, USB host 會主動詢問 USB 設備的相關資料, 以載入相對應的驅動程式, 以及供給電源等動作. USB 設備就是透過 USB descriptor 來傳達這些資訊.
USB descriptor 的結構如附圖. 由一個 Device Descriptor, 包含數個 Configuration Descriptor, 每一個 Configurtion Descriptor 又可以包含數個 Interface Descriptor, 每一個 Interface Descriptor 又可以包含數個 Endpoint Descriptor, 字串的部份則放在 String Descriptor 中.
image

Device Descriptor

USB device 只能有一個 device descriptor, 這個 descriptor 提供設備為主的資訊. 譬如說對應到 USB 的規格的版本, 設備供應商的代號, 產品代號, 等等.

Offset

Field

Size

Value

Description

Note

0

bLength

1

Number

size of the descriptor in bytes

0x12

1

bDescriptorType

1

Constant

DeviceDescriptor (0x01)

0x01

2

bcdUSB

2

BCD

USB Sepcification Number

USB 3.0 0x00, 0x03

USB 2.1 0x10, 0x02

4

bDeviceClass

1

Class

Class Code:
0x00: each interface specifies it’s own claas code
0xFF: the class code is vendor specified
Otherwise:
0xEF
Miscellaneous

5

bDeviceSubClass

1

SubClass

Assigned by USB ORG 0x02

6

bDeviceProtocol

1

Protocol

Assigned by USB ORG 0x01

7

bMaxPacketSize

1

Number

Maximum Packet Size for Endpoint 0 8/16/32/64

8

idVendor

2

ID

Assigned by USB ORG

10

idProduct

2

ID

Assigned by Manufacturer

12

bcdDevice

2

BCD

Device Release Number

14

iManufacturer

1

Index

Index of Manufacturer String Descriptor

15

iProduct

1

Index

Index of Product String Descriptor

16

iSerialNumber

1

Index

Index of Serial Number String Descriptor

17

bNumConfigurations

1

Integer

Number of Possible Configurations
Class/SubClass/Protocol 共同指定了 USB device 的類型. 譬如說, Class = 0xEF, SubClass = 0x02, Protocol = 0x01, 指定了這個 device 是一個 Miscelaneous device ( Class = 0xEF), SubClass = 0x02, Protocol = 0x01, 則說明這個 device 的 Class Code, 是由 Interface Association Descriptor 指定. 也就是需參照 Interface Descriptor.

Configuration Descriptor

Configuration Descriptor 指定裝置在這個 configuration 的狀態下的電力設定及所需要的電力供應. 通常一個設備只會用到一個 configuration, 但是如果設備可以支援自我供電以及 USB 供電兩種方式的時候, 可以有兩個以上的 configuration, 以供 host 選擇, 但是同一時間只能有一個作用中的 configurtion.
舉例來說, 可以有一個高功率需求的 bus 供電 configuration, 以及一個自我供電的 configuration. 如果 USB device 被插入一個有電源供應的系統, 驅動程式可以選擇 bus 供電. 如果是被插入沒有電源供給的系統 (以系統的電池供電), 則可以選擇設備自我供電.
Offset Field Size Value Description  
0 bLength 1 Number Size of Descriptor in bytes 0x09
1 bDescriptorType 1 Constant Configuration Descriptor 0x02
2 wTotalLength 2 Number Total Length of Data returned include all sub desceiptors
4 bNumInterfaces 1 Number Number of Interfaces number of interface in this configuration
5 bConfigurationValue 1 Number Value to use as an argument to select this configuration Configuration value to be selected
6 iConfiguration 1 Index Index of String Descriptor Describing this configuration  
7 bmAttributes 1 Bitmap D7: Bus Powered
D6: Self Powered
D5: Remote Wakeup
D4..D0 reserved (0)
 
8 bMaxPower 1 mA Maximum Power Consumption  

 

Interface Descriptor

interface descriptor 可以看成是一組 endpoints 所組成的功能群組, 以達成特定功能. 例如, 一個多功能事務機, 可以用一個 interface descriptor 來描述 fax 功能的 endpoints, 然後用另一個 interface descriptor 來描述 scanner, 再一個來描述 printer. 和 configuration descriptor 不同的是, interface descriptor 沒有在同一時間內只能有一個在運作中的限制. USB 設備可以有一個或更多的 interface 在運作中.
interface descriptors 有一個 bInterfaceNumber 的欄位, 用以指定這一個 interface. 另外, 還有一個 bAlternateSetting 欄位, 這可以讓 interface 達成動態變更的效果.
假設, 我們有一個設備, 它有兩個 interface, interface 1, interface 2. interface 1 的 bInterfaceNumber 設成 0, 表示它是第一個 interface descriptor, 並且 bAlternativeSetting 設成 0. interface 2 的 bInterfaceNumber 設成 1, 表示它是第二個 interface descriptor, 並且 bAlternativeSetting 設成 0. 當我們可以再加入一個 interface descriptor, 並且把 bInterfaceNumber 設成 1, 表示它也是第二個 interface descriptor, 但是這次把 bAlternativeSetting 設定為 1, 表示這一個 interface descriptor 是另一個 interface descriptor 的替代.
Offset Field Size Value Description  
0 bLength 1 Number Size of Descriptor in bytes 0x09
1 bDescriptorType 1 Constant Interface Descriptor 0x04
2 bInterefaceNumber 1 Number Number of Interface zero based interface descriptor
3 bAlternateSetting 1 Number Value used to select alternative setting 0: Not alternative
1: alternative
4 bNumEndpoints 1 Number Number of Endpoints used for this interface  
5 bInterfaceClass 1 Class Assigned by USB ORG  
6 bInterfaceSubClass 1 SubClass Assigned by USB ORG  
7 bInterfaceProtocol 1 Protocol Protocol Code  
8 iInterface 1 Index Index of String Descriptor  

 

Endpoint Descriptor

每一個 endpoint descriptor 都是用來指定傳輸的型態, 方向, 輪詢間隔, 最大的封包大小. Endpoint 0, 是預設的控制 endpoint, 只會是 control point, 所以不需要 descriptor.
Offset Field Size Value Description  
0 bLength 1 Number Size of Descriptor in bytes 0x07
1 bDescriptorType 1 Constant End Descriptor 0x05
2 bEndpointAddress 1 Endpoint Endpoint Address
0b..3b Endpoint NUmber
4b..6b Reserved ( Zero)
7b Direction
   0 : Out Endpoint
   1 : In Endpoint
zero based interface descriptor
3 bmAttributes 1 Bitmap Bits 0..1 Transfer Type
  00 = Control
  01 = Isochronous
  10 = Bulk
  11 = Interrupt
Bits 5..2 reserved if not Isochronous.
Bits 3..2 Synchronization type
  00 = No Synchronization
  01 = Asynchronous
  10 = Adaptive
  11 = Synchronous
Bits 5..4 Usage type
  00 = Data endpoint
  01 = Feedback endpoint
  10 = Implicit feedback Data endpoint
  11 = Reserved 
0: Not alternative
1: alternative
4 wMaxPacketSize 2 Number Maximum Packet Size .  
6 bInterval 1 Number Polling interval in frame count.
Bulk & Control Endpoint ignored.
Iso must equal 1
Interrupt 1..255
 

 

String Descriptor

string descriptor 提供可讀的資訊. 如果不提供這一個 string descriptor, string index 需要設成 0. string 以 Unicode 編碼, 並且提供多國語言的支援.
String Descriptor Zero, 是用來描述所支持的語言 :
Offset Field Size Value Description
0 bLength 1 Number Size of Descriptor in bytes
1 bDescriptorType 1 Constant String Descriptor 0x03
2 wLANGID[0] 2 Number Supported Language Code Zero ex
0x0409 (English, USA)

wLANGID[1] 2 Number Supported Language Code One ex
0x0C09 (English, Austria)
4 wLANGID[2] 2 Number Supported Language Code X ex
0x0407 (German – Standard)
String Descriptor 1~, 是放置 Unicode 字串的地方.
Offset Field Size Value Description
0 bLength 1 Number Size of Descriptor in bytes
1 bDescriptorType 1 Constant String Descriptor 0x03
2 bString n Unicode Supported Language Code Zero Unicode Encoded String

 

Device Qualifier

device_qualifier descriptor 描述關於高速設備在不同速度下的訊息改變. 例如, 如果設備正在 full-speed 下運作, device_qualifier 傳回它在 high-speed 下運作的資訊. 反之亦然.
Offset Field Size Value Description
0 bLength 1 Number Size of Descriptor in bytes
1 bDescriptorType 1 Constant Device Qualifier Type  
2 bcdUSB 2 BCD USB spec version number.  
4 bDeviceClass 1 Class Class Code
5 bDeviceSubClass 1 SubClass SubClass Code
6 bDeviceProtocol 1 Protocol Protocol Code
7 bMaxPacketSize0 1 Number Maximum packet size for other speed
8 bNumConfigurations 1 Number Number of Other-speed configurations
9 bReserved 1 Zero Reserved for future use, must be zero

2014年9月2日 星期二

[EZ-USB FX3] Debug with J-Link GDB


這邊主要是記錄在使用 J-Link debug 的時候, 需要進行的操作. 因為對每一個 project 都需要設定, 所以只好記錄起來.

Create Debug Configuration

1. 在左邊的 Project Explorer 中, 點選要 debug 的 project, 這個地方是 UartLpDmaMode
image
2. 在上面的 Run 選單中, 選擇 Debug Configurations
image
3. 在左邊的 configurations 中, 選擇 Zylin Embedded debug (Native)
image
4. 在 Zylin Embedded debug (Native) 上按右鍵, 選擇 new

image

 

Modify Debug Configuration

1. 選擇 Debugger 分頁, 把 Main 分頁的 GDB debugger 連結到 C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\ARM GCC\bin\arm-none-eabi-gdb.exe”
image

2. 選擇 Commands 分頁, 在 Initialize commands, 加入以下命令
set prompt (arm-gdb)
# This connects to a target via netsiliconLibRemote
# listening for commands on a TCP port on the local machine.
# 2331 if the Segger J-Link GDB Server is being used
# 3333 if OpenOCD is being used
# If OpenOCD is being used, the CPU should be halted
# using the "monitor halt" command.
# Uncomment the appropriate line below:
target remote localhost:2331
# target remote localhost:3333
# monitor halt
monitor speed 1000
monitor endian little
set endian little
monitor reset
# Set the processor to SVC mode
monitor reg cpsr =0xd3
# Disable all interrupts
monitor memU32 0xFFFFF014 =0xFFFFFFFF
# Enable the TCMs
monitor memU32 0x40000000 =0xE3A00015
monitor memU32 0x40000004 =0xEE090F31
monitor memU32 0x40000008 =0xE240024F
monitor memU32 0x4000000C =0xEE090F11
# Change the FX3 SYSCLK setting based on
# input clock frequency. Update with
# correct value from list below.
# Clock input is 19.2 MHz: Value = 0x00080015
# Clock input is 26.0 MHz: Value = 0x00080010
# Clock input is 38.4 MHz: Value = 0x00080115
# Clock input is 52.0 MHz: Value = 0x00080110
monitor memU32 0xE0052000 = 0x00080015
# Add a delay to let the clock stabilize.
monitor sleep 1000
set $pc =0x40000000
si
si
si
si
3. 選擇 Commands 分頁, 在 Run commands, 加入以下命令
load
按下 “Apply” 儲存設定.
image

Run GDB server

1. 啟動 GDB server.
在開始功能表中, 找到 SEGGER, 執行 SEGGER\J-Link V4.9X.x\J-Link GDB Server. 確認以下的設定. 沒有問題的話, 按下 OK 開始.
image
正常的話, 會顯示未連線.
image

Debug from Eclipse

在專案名稱上按右鍵, 選擇 Debug As\Debug Configurations. 確定在左邊的 debug configuration 選項中, 剛剛建立的 configuration 被選擇. 然後按下 debug.
image
出現切換到 debug view 的提示. Eclipse 的 source code view 及 debug view 是在歸屬在不同的視覺系統中. 所以進到 debug 時, 會切換到 debug view. 這只是提示. 按下 “Yes” 進入 debug view.
進入 debug 後, 系統會先停下來. 看起來會像是這個樣子.
image
按下工具列的 resume 按紐
image
程式會停在 main() 的第一行 , GDB server 也會顯示已連線
image