I want to be a complete engineer - technical genius and sensitive humanist all in one!

Showing posts with label USB. Show all posts
Showing posts with label USB. Show all posts

Wednesday, March 18, 2009

CY7C68013 0xC2 启动模式总结


一、CY7C68013枚举与重枚举过程

CY7C68013在上电时,首先由缺省USB设备进行枚举,并把8051固件代码下载到芯片的RAM内;之后8051就会脱离复位并开始执行这些代码,并按照固件代码的内容再一次对设备进行重枚举。再重枚举完成后,对控制端点0的设备请求可由68013的缺省USB设备处理(USBCS中的RENUM位为0),也可由增强型8051的固件代码处理(RENUM1)

上电复位后68013会检查芯片iic总线上是否连接有串行EEPROM,它将读取第一个字节以决定其枚举模式,分如下情况处理:

1. 如果EEPROM 不存在,则用默认PID/VID 启动USB 设备,缺省的USB 设备自动处理

通过控制面板来下载,调试时常用。

2. 如果EEPROM 存在,并且EEPROM 中第一字节是0xC0,后面字节包括用户定制的

PID/VID,则用定制好的PID/VID 来从主机下载固件和加载驱动,此方式为0xC0模式。

3、如果EEPROM 存在,并且EEPROM 中第一字节是0xC2,后续内容包括PID/VID,以及

程序代码,则FX2 EEPROM加载固件,此方式称为“C2 加载模式。

4. 如果FLASH EEPROM 通过地址总线和数据总线扩展(仅128 引脚封装有效),并且

EA=1,则程序从外部空间的0x0000 开始运行。


EEPROM0xC0模式加载EEPROM0xC2模式加载EEPROM


以下详细描述68013 0xC2模式下枚举与重枚举过程。

如果68013检测到一个EEPROM存在,且首字节值为0xC2,则VIDPIDDID、各种USB描述符,及其8051固件代码都有该EEPROM提供,此模式即为0xC2模式,其数据格式如下表:


首字节为0xC2 时,EEPROM中数据格式


上表中前八个字节分别描述了模式标志,VID/PID/DID以及IIC速率配置,从第九个开始为的程序块,每个程序块包括起始地址、数据长度和数据块组成,最后一个字节0x00将写入到CPUCS寄存器(地址是0xE600)中且该数据的最低位必须为0,以使8051 脱离复位。

CYPRESS 提供了hex2bix 来生成“0xC2”格式的*.iic数据用于烧写到EEPROM。执行HEX2BIX.EXE 程序时,需要给程序送入参数。如果我们指定-i,那么程序执行结果会输出iic类型文件。如果我们指定-f 0xC2,那么烧写的程序的第一个字节就是0xC2,这个字节会烧写到EEPROM中的0x0000地址。这个值决定了固件的加载方式,如果为0XC2 则从EEPROM中读取固件程序到FX2RAM空间进行执行。写入这8 个字节之后,根据判断ImageMap的标志位来查找每个块的长度(连续为1 的个数),和这个块的偏移地址(第一个标志为1 的地址),同时注意字节序的问题,请看有关字节序的问题。然后顺序的将块的长度(两个字节),块的定位(两个字节)写入到输出的iic文件中,接着将相应在Image 的数据写入到文件中,然后重复找到ImageMap 的所有块,都是以这种格式写入到输出文件中。(块的数据长度,块的定位,块的数据)。这样即可得到了一个用于烧写EEPROMiic文件,可以看出,iic是二进制数据流文件。


二、烧写EEPROM

IIC文件是一个二进制文件,由HEX文件通过Cypress提供的hex2bix.exe程序转换来。

烧写EEPROM的时候,首先插入设备并确定68013连接的EEPROM没有被烧写过程序,(或者与EEPROM所连接的SDA引脚断开,这种情况下EEPROM已经被烧写过)这样设备才可以作为CYPRESS的默认设备被枚举。然后即可通过控制面板烧写EEPROM

如果EEPROM已经被烧写过,则可以使用下面的方法实现再次烧写:

1。断开EEPROMSDA连接;

2。插入USB设备,打开Control Panel程序,这时作为EEPROM missing68013设备被枚举;

3。这时不要断开USB设备,小心将sda连接上;

4。通过Control Panel eeprom按钮重新烧写,这样可以覆盖原来的程序。只是这种硬件操作比较麻烦,最好在sda之间焊接个开关。


三、典型示例

以下以68013连接ATMEL 24C256 EEPROM来说明完整烧写过程:

8pin 24C256IIC总线接口,容量为256K (32,768 x 8) EEPROM,其管脚描述如下:

连接方式为:A03.3V电源,A1NCGND接地,SCLSDA分别接68013IIC接口,WP接地,VCC接电源即可。此款EEPROM芯片兼容24C51224C1024等。


Thursday, March 12, 2009

USB设备配置-based CY7C68013

在USB协议中,将USB设备作为一个配置、端点和接口的集合。一般采用USB描述符对该USB设备的功能进行描述。USB主机通过读取这些描述符来使该USB 功能设备执行相应的功能,以及产品信息。本文主要描述USB标准设备描述符,包含以下内容【所有示例代码均基于Cypress CY7C68013平台】:
USB 的描述符
设备描述符(Device)
配置描述符(Configuration)
字符串描述符(String)
接口描述符(Interface)
端点描述符(Endpoint)
设备限定描述符(Device_Qualifier)
其他速率配置描述符(Other_Speed_Configuration)


1 USB的描述符
在USB 协议中,USB设备采用标准的USB描述符来说明。这些描述符包括设备描述符、
配置描述符、接口描述符、端点描述符、字符串描述符、设备限定描述符和其他速率配置描
述符,其中设备限定描述符和其他速率配置描述符用于高速USB 设备。标准USB描述符的
类型值,如表1 所示。
表1 标准USB 描述符的类型值
描述符的类型 值
设备描述符 1
配置描述符 2
字符串描述符 3
接口描述符 4
端点描述符 5
设备限定描述符 6
其他速率配置描述符 7
这些标准的描述符表示了USB 设备的特性。这些描述符中的字段均有固定的排列顺序,一般来说bLength 为第一个字段,bDescriptorType 为第二个字段。这些字段名称的前缀指出了该字段值的长度,有如下几类:
•b 表示一个字节(8byte);
•w表示一个字(16byte);
•bm表示按位寻址;
•bcd表示采用二进制编码的10 进制数;
•i表示索引值;
•id 表示标识码。
2 设备描述符
USB 的设备描述符用于表示USB 设备的总体信息,一个USB 设备只能有一个设备描述符(Device)。设备描述符中的设置值对该设备中同一传输模式下的所有配置都有效。
2.1 设备描述符定义
USB 设备描述符由14 个字段组成,总长度固定为18个字节,其格式如表2所示。

表2 设备描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(12H字节)
bDescriptorType 1 1 描述符的类型:设备描述符=01H
bcdUSB 2 2 USB 规范版本号(采用BCD码)
bDeviceClass 1 4 类代码
bDeviceSubClass 1 5 子类代码
bDeviceProtocol 1 6 协议代码
bMaxPackerSize0 1 7 端点0 支持最大数据包的长度
idVendor 2 8 供应商ID
idProduct 2 10 产品ID
bcdDevice 2 12 设备版本号(采用BCD 码)
iManufacturer 1 14 供应商字符串描述符的索引值
iProduct 1 15 产品字符串描述符的索引值
iSerialNumber 1 16 设备序列号字符串描述符的索引值
bNumConfigurations 1 17 所支持的配置数
下面详细说明各个字段的含义。
•bLength:用于表示设备描述符的长度,固定为18 个字节,即12H。
•bDescriptorType:用于表示设备描述符的类型值,固定为01H。
•bcdUSB:用于表示该USB 设备所遵循的USB 规范版本号,以BCD码的形式表示。格式为0xAABC,其中AA 为主版本号,B 为次版本号,C为子次版本号。例如高速USB 版本为USB2.0,即设置为0200H。
•bDeviceClass:用于表示该USB 设备所属的标准设备类。该字段值在1~FEH之间的时候,表示USB协议中定义的某个设备类,如03H表示HID 设备类;当为0时,表示USB设备的各个接口互相独立,分别属于不同的设备类,在USB 固件接口描述符中将进一步定义;
当为FFH 时,表示由供应商自定义该设备类。
•bDeviceSubClass:用于表示USB 设备所属的标准设备子类,主要用于对USB 设备类进行了更加细致的定义。例如对于前面的HID设备类,只有一个子类代码01H。而对于显示设备类(04H),子类代码01H表示CRT 显示器、02H表示平面显示器、03H 表示3D 显示器。当bDeviceClass=0 时,该字段也必须为0;当该字段为FFH 时,表示由供应商自定义设备子类。
•bDeviceProtocol:用于表示USB 设备所采用的设备类协议,其值和bDeviceClass 及
bDeviceSubClass 的值有关。当该字段为0 时,表示不使用任何设备类协议。如果该USB 设备属于某个设备类和设备子类,则应该继续指明所采用的设备类协议。当该字段为FFH 时,表示设备类协议由供应商自定义。
•bMaxPackerSize0:用于表示在USB设备中,端点0 所支持最大数据包的长度,它以
字节为单位。对于低速USB设备,bMaxPackerSize0为8;对于全速USB设备,bMaxPackerSize0
为8、16、32或64;对于高速USB 设备bMaxPackerSize0为64。
•idVendor:用于表示USB 设备供应商的ID。USB组织中规定每种产品都必须包含一个供应商ID,这样可以使主机为其加载合适的驱动程序。
•idProduct:用于表示USB设备产品的ID,由设备供应商提供。idProduct用于表示特定的USB 设备,在USB设备上电的时候可以帮助USB 主机选择合适的驱动程序。
•bcdDevice:用于表示USB设备的版本号,它以BCD码的形式表示。一般来说bcdDevice由设备供应商指定,在USB设备上电的时候可以帮助USB主机加载合适的驱动程序。
•iManufacturer:用于表示供应商字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有供应商字符串,可以置为0。
•iProduct:用于表示产品字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有产品字符串,可以置为0。
•iSerialNumber:用于表示设备序列号字符串描述符的索引值,如果没有,可以置为0。
•bNumConfigurations:用于表示该USB设备所支持的配置数。
2.2 设备描述符示例
典型的USB设备描述符的定义示例如下,采用汇编语言进行描述:
DeviceDscr:
db DSCR_DEVICE_LEN ;描述符长度
db DSCR_DEVICE ;描述符类型
dw 0002H ;规范(BCD)
db 00H ;设备类
db 00H ;设备子类
db 00H ;设备协议子类
db 64 ;最大数据包长度
dw 0B404H ;供应商ID
dw 0410H ;产品ID
dw 0000H ;设备版本号
db 1 ;供应商字符串索引
db 2 ;产品字符串索引
db 0 ;序列号字符串索引
db 1 ;所支持的配置数
3 配置描述符
在USB 协议中,USB 设备可以有一个或多个配置,每个配置都必须有一个配置描述符
(Configuration)。配置描述符用于表示USB设备的配置信息。
3.1 配置描述符定义
配置描述符由8个字段组成,长度固定为9 个字节,其格式见表3。
表3 配置描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(09H字节)
bDescriptorType 1 1 描述符的类型:配置描述符=02H
wTotalLength 2 2 配置信息的总长度
bNumInterfaces 1 4 该配置所支持的接口数
bConfigurationValue 1 5 配置值
iConfiguration 1 6 字符串描述符的索引值
bmAttributes 1 7 配置特性
bMaxPower 1 8 所需要的最大总线电流(2mA 为单位)
下面详细说明各个字段的含义。
•bLength:用于表示配置描述符的长度,固定为9 个字节,即09H。
•bDescriptorType:用于表示配置描述符的类型值,固定为02H。
•wTotalLength:用于表示配置信息的总长度,包括配置描述符、接口描述符和端点描述符长度的总和。
•bNumInterfaces:用于表示配置所支持的接口数。一般来说,USB 设备的接口至少有一个,因此其最小值为1。
•bConfigurationValue:用于表示USB 设备的配置值。
•iConfiguration:用于指出配置字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有配置字符串,可以置为0。
•bmAttributes:用于表示USB 设备的配置特性。bmAttributes 是按位寻址的,第6 位
置1 表示使用总线电源;第5 位置1表示支持远程唤醒功能;该字段的其他位均保留,一般来说,第0~4位置0 即可,第7位置1 即可。
•bMaxPower:用于表示USB 设备运行时所需要消耗的总线电流,单位以2mA 为基准。
USB 设备可以从USB总线上获得最大的电流为500mA,因此bMaxPower字段的最大值可以
设置为250。

3.2 配置描述符示例
典型的USB配置描述符的定义示例如下,采用汇编语言进行描述:
ConfigDscr:
db DSCR_CONFIG_LEN ;描述符长度
db DSCR_CONFIG ;描述符类型
db (ConfigDscrEnd-ConfigDscr) mod 256;长度(LSB)
db (ConfigDscrEnd-ConfigDscr) / 256;长度(MSB)
db 1 ;接口数
db 1 ;配置数
db 0 ;配置字符串
db 10000000b ;特性(b7 - buspwr, b6 - selfpwr, b5 - rwu)
db 100 ;功率需求
ConfigDscrEnd: ;结束
4 字符串描述符
在USB 协议中,字符串描述符(String)是可选的。字符串描述符用于保存一些供应商名称、产品序列号等文本信息。
4.1 字符串描述符定义
字符串描述符由3 个字段组成,其长度随字符串的数量和信息的长度而变化。字符串描述符的格式见表5.4。
表4 字符串描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(N+2 字节)
bDescriptorType 1 1 描述符的类型:字符串描述符=03H
bString N 2 字符串
下面详细说明各个字段的含义:
•bLength:用于表示字符串描述符的长度,如果字符串长度为N,则其值为N+2;
•bDescriptorType:用于表示字符串描述符的类型值,固定为03H;
•bString:UNICODE编码的字符串。
4.2 字符串描述符示例
典型的USB字符串描述符的定义示例如下,其中定义了两个字符串,采用汇编语言进行描述:
StringDscr:
StringDscr0:
db StringDscr0End-StringDscr0 ;字符串描述符长度
db DSCR_STRING
db 09H,04H
StringDscr0End:
StringDscr1:
db StringDscr1End-StringDscr1 ;字符串描述符长度
db DSCR_STRING
db 'C',00
db 'y',00
db 'p',00
db 'r',00
db 'e',00
db 's',00
db 's',00
StringDscr1End:
5 接口描述符
在USB 协议中,USB设备的接口是一个端点的集合,负责完成该USB 设备的特定功能,例如数据输入和输出。USB 设备的每一个接口都必须有一个接口描述符(Interface),接口描述符用来表示USB 设备中各个接口的特性,包括接口的端点个数、所属的设备类和子类等。
5.1 接口描述符定义
接口描述符由9个字段组成,长度固定为9 个字节,其格式见表5。
表5 接口描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(09H字节)
bDescriptorType 1 1 描述符的类型:接口描述符=04H
bInterfaceNumber 1 2 接口号
bAlterateSetting 1 3 可替换设置值
bNumEndpoints 1 4 端点0 以外的端点数
bInterfaceClass 1 5 类代码
bInterfaceSubClass 1 6 子类代码
bInterfaceProtocol 1 7 协议代码
iInterface 1 8 字符串描述符的索引值
下面详细说明各个字段的含义。
•bLength:用于表示接口描述符的长度,固定为9 个字节,即09H。
•bDescriptorType:用于表示接口描述符的类型值,固定为04H。
•bInterfaceNumber:用于表示接口的接口号。
•bAlterateSetting:用于表示接口的可替换设置值。
•bNumEndpoints:用于表示接口所使用的端口数,除端点0以外的所有端点。
•bInterfaceClass:用于表示接口所属的设备类。当bInterfaceClass在1~FEH 范围内时,表示该接口属于USB 定义的某个设备类;当该字段指为FFH 时,它表示该设备类是供应商自定义的。
•bInterfaceSubClass:用于表示接口所属的USB 设备子类。当bInterfaceClass=0时,该字段必须为0;如果bInterfaceClass字段在1~FEH之间,则该字段需进一步表示设备子类;当该字段为FFH 时,表示由供应商自定义设备子类。
•bInterfaceProtocol:用于表示接口所采用的USB 设备类协议,其值和bInterfaceClass及bInterfaceSubClass的值有关。当该字段为0 时,表示不使用任何设备类协议。如果该USB设备属于某个设备类和设备子类,则应该继续指明所采用的设备类协议。当该字段为FFH 时,表示由供应商自定义设备类协议。
•iInterface:用于指出接口字符串描述符的索引值。具体字符串的内容在后面字符串描述符中定义。如果没有配置字符串,可以置为0。
5.2 接口描述符示例
典型的USB接口描述符的定义示例如下,采用汇编语言进行描述:
;接口描述符
db DSCR_INTRFC_LEN ;描述符长度
db DSCR_INTRFC ;描述符类型
db 0 ;接口号
db 0 ;可替换设置值
db 6 ;端点数
db 0ffH ;类代码
db 00H ;子类代码
db 00H ;协议代码
db 0 ;接口描述字符串索引
6 端点描述符
在USB 协议中,端点描述符(Endpoint)用于指出USB 设备端点的特性,包括其所支持的传输类型、传输方向等信息。USB 中规定,端点0 没有端点描述符,其余端点必须包含端点描述符。
6.1 端点描述符定义
端点描述符由6个字段组成,其长度固定为7个字节。端点描述符格式见表6。
表6 端点描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(07H字节)
bDescriptorType 1 1 描述符的类型:端点描述符=05H
bEndpointAddress 1 2 端点号、传输方向
bmAttributes 1 3 端点特性
wMaxPacketSize 2 4 最大数据包长度
bInterval 1 6 访问间隔
下面详细说明各个字段的含义。
•bLength;用于表示端点描述符的长度,固定为7 个字节,即07H。
•bDescriptorType:用于表示接口描述符的类型值,固定为05H。
•bEndpointAddress:用于表示端点的端点号以及端点的数据传输方向。第7 位表示端点的数据传输方向,0 表示OUT 数据传输,1 表示IN 数据传输;第0~3 位表示端点号,例如001B表示端点1、010B 表示端点2等;其余位均保留,必须置0。
•bmAttributes:用于表示端点的特性。其中第0 位和第1位表示端点的数据传输类型,00B 表示控制传输、01B 表示同步传输、10B 表示块传输、11B 表示中断传输;如果是同步传输,第2 位和第3 位表示同步类型,00B 表示非同步、01B 表示异步、10B 表示自适应、
11B 表示同步;第4 位和第5 位表示端点的用法类型,00B 表示数据端点、01B 表示显示反馈端点、10B表示隐式反馈端点、11B保留。其余位保留。
•wMaxPacketSize:用于表示端点所支持最大数据包的长度。其中第0~10位表示数据包长度,第11位和第12位指出每小帧最多传输的事务处理数,其余位均保留,必须置0。
•bInterval:用于指定端点数据传输的访问间隔。低速中断端点,取值范围为10~255,对应的访问间隔为10~255ms;对于全速中断端点,取值范围为1~255,对应的访问间隔为1~255ms;对于其他的端点,可以参阅USB 相关协议。
6.2 端点描述符示例
典型的USB端点描述符的定义示例如下,采用汇编语言进行描述:
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 02H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 04H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 86H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
;端点描述符
db DSCR_ENDPNT_LEN ;描述符长度
db DSCR_ENDPNT ;描述符类型
db 88H ;端点号及方向
db ET_BULK ;端点类型
db 00H ;最大数据包长度(LSB)
db 02H ;最大数据包长度(MSB)
db 00H ;访问间隔
其中定义了4 个端点,下面分别介绍这4个端点的属性。
•端点02,块传输输出端点,最大数据包长度512 个字节。
•端点04,块传输输出端点,最大数据包长度512 个字节。
•端点86,块传输输入端点,最大数据包长度512 个字节。
•端点88,块传输输入端点,最大数据包长度512 个字节。
7 设备限定描述符
在高速USB 系统中,如果USB 设备既需要采用高速传输又需要全速传输,则它必须支持设备限定描述符(Device_Qualifier),设备限定描述符用以指出另一传输速率下该设备的总体信息。
7.1 设备限定描述符定义
设备限定符由9个字段组成,长度固定为10个字节。设备限定描述符格式见表7。
表7 设备限定描述符格式
字 段 名 长度/字节 地址偏移量 说 明
bLength 1 0 描述符的长度(0AH 字节)
bDescriptorType 1 1 描述符的类型:设备限定描述符=06H
bcdUSB 2 2 USB 规范版本号(采用BCD码)
bDeviceClass 1 4 类代码
bDeviceSubClass 1 5 子类代码
bDeviceProtocol 1 6 协议代码
bMaxPackerSize0 1 7 端点0 所支持最大数据包的长度
bNumConfigurations 1 8 所支持的配置数
bReserved 1 9 保留
下面详细说明各个字段的含义。
•bLength:用于表示设备限定描述符的长度,固定为10 个字节,即0AH。
•bDescriptorType:用于表示设备限定描述符的类型值,固定为06H。
•bcdUSB:用于表示USB 设备及其描述符所遵循的USB 规范版本号,以BCD 码的形式表示,其值必须在版本2.0 以上。
•bDeviceClass:用于表示USB 设备所属的设备类。该字段值在1~FEH 之间的时候,表示为USB定义的某个设备类,如03H表示HID设备类。当为0 时,表示USB 设备的各个接口互相独立,分别属于不同的设备类,在接口描述符中会进一步说明。当为FFH 时,表示该设备为供应商自定义的。
•bDeviceSubClass:用于表示USB 设备所属的设备子类,其对USB设备类进行了更详细的定义。例如对于前面的HID设备类,只有一个子类代码01H。而对于显示设备类(04H),子类代码01H表示CRT显示器、02H表示平面显示器、03H表示3D显示器。当bDeviceClass=0时,该字段也必须为0;当该字段为FFH 时,表示由供应商自定义设备子类。
•bDeviceProtocol:用于表示USB 设备所采用的设备类协议,其值和bDeviceClass 及
bDeviceSubClass 的值有关。当该字段为0 时,表示不使用任何设备类协议。如果该USB 设备属于某个设备类和设备子类,则应该继续指明所采用的设备类协议。当该字段为FFH 时,表示由供应商自定义设备类协议。
•bMaxPackerSize0:用于表示USB 设备端点0所支持最大数据包的长度,它以字节为单位。对于低速USB 设备,bMaxPackerSize0 为8;对于全速USB 设备,bMaxPackerSize0为8、16、32或64;对于高速USB 设备bMaxPackerSize0为64。
•bNumConfigurations:用于表示USB 设备另一个速率所支持的配置数。
•bReserved:保留项,必须置0。
7.2 设备限定描述符示例
典型的USB设备限定描述符的定义示例如下,采用汇编语言进行描述:
DeviceQualDscr:
db DSCR_DEVQUAL_LEN ;描述符长度
db DSCR_DEVQUA ;描述符类型
dw 0002H ;规范(BCD)
db 00H ;设备类
db 00H ;设备子类
db 00H ;设备协议子类
db 64 ;最大数据包长度
db 1 ;配置数
db 0 ;保留
8 其他速率配置描述符
在高速USB 系统中,如果USB 设备既需要采用高速传输又需要全速传输,则必须支持其他速率配置描述符(Other_Speed_Configuration)。其他速率配置描述符指出了另一个传输速率下该设备的配置信息。
8.1 其他速率配置描述符定义
其他速率配置描述符由8个字段组成,长度固定为9字节。其他速率配置描述符各个字段的格式及含义见表8。
表8 其他速率配置描述符格式
字 段 名 长度/字节 地址偏移量说明
bLength 1 0 描述符的长度(09H字节)
bDescriptorType 1 1 描述符的类型:其他速率配置描述为07H
wTotalLength 2 2 配置信息的总长度
bNumInterfaces 1 4 所支持的接口数
bConfigurationValue 1 5 配置值
iConfiguration 1 6 字符串描述符的索引值
bmAttributes 1 7 配置特性
bMaxPower 1 8 所需要的最大USB总线电流(2mA为单位)
下面详细说明各个字段的含义。
•bLength:用于表示其他速率配置描述符的长度,固定为9个字节,即09H。
•bDescriptorType:用于表示其他速率配置描述符的类型值,固定为07H。
•wTotalLength:用于表示其他速率配置信息的总长度,包括配置描述符、接口描述符、端点描述符、设备类定义描述符和供应商自定义描述符的总和。
•bNumInterfaces:用于表示其他速率配置所支持的接口数。
•bConfigurationValue:用于表示其他速率配置值。
•iConfiguration:用于指出配置字符串描述符的索引值,具体字符串的内容在后面字符串描述符中定义。如果没有配置字符串,可以置为0。
•bmAttributes:用于表示配置特性。它是按位寻址的,第6 位置1 表示使用总线电源;
第5 位置1表示支持远程唤醒功能;该字段的其他位均保留,一般来说,第0~4 位应该置0,第7 位应该置1。
•bMaxPower:用于表示USB 设备运行时所需要消耗的总线电流,单位以2mA 为基准。USB 设备可以从USB总线上获得最大的电流为500mA,因此该字段的最大值为250。
8.2 其他速率配置描述符示例
典型的USB配置描述符的定义示例如下,采用汇编语言进行描述:
OtherSpeedConfigDscr:
db DSCR_CONFIG_LEN ;描述符长度
db DSCR_CONFIG ;描述符类型
db (OtherSpeedConfigDscrEnd-OtherSpeedConfigDscr) mod 256;长度(LSB)
db (OtherSpeedConfigDscrEnd-OtherSpeedConfigDscr) / 256;长度(MSB)
db 1 ;接口数
db 1 ;配置数
db 0 ;配置字符串
db 10000000b ;特性(b7 - buspwr, b6 - selfpwr, b5 - rwu)
db 50 ;功率需求
OtherSpeedConfigDscrEnd: ;结束
9 小结
本文主要讲解了USB设备各种描述符的结构及配置,包括设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符和其他速率配置描述符。USB设备描述符是USB功能设备设计的基础,每个USB设备都需要有完善的描述符。

some FAQ about CY7C68013

01、Reading Serial EEPROM which is Connected to the FX2Question: Is there any way to read the serial EEPROM (EEPROM with VID/PID), connected to the FX2 (CY7C68013), from the host?
Response: If you download the Vend_Ax example firmware (c:\cypress\usb\examples\fx2\vend_ax) with the EZ-USB control panel, you can use the Vend Req toolbar to read the serial EEPROM on the board. Use the 0xA2 for a small (LC00) EEPROM and 0xA9 for a large (LC64) EEPROM. Specify the offset with the Value field (such as 0x0000), the direction of EEPROM access (i.e., IN to read the EEPROM) and how many bytes to read (e.g., 16). There should be a memory dump type display of the data read from the serial EEPROM in the data area of the control panel window. If a string of "CD CD CD .." apperars, then the access to the EEPROM failed. Try again with 0xA9 if you used 0xA2 and vice versa. For serial EEPROMs programmed for VID/PID only enumeration (see the FX2 Technical Reference Manual section 3.4.2 C0 loads), the VID/PID will be in the first bytes of the EEPROM. If the serial EEPROM contains a complete program (manual section 3.4.3), then dump the bytes at offset of the device descriptor program. You will need the program's link map listing (.m51) file to determine the correct offset.

02、FX2 Technical Reference Manual and Datasheet
Question: Where can I find soft copies of the FX2 Technical Reference Manual and Datasheet?
Response: Look at "C:\Cypress\USB\doc\FX2\FX2 TechRefManual.pdf". This is a very well written and readable manual, and is the key reference you will want to use. The datasheet describes the hardware interfaces of the part. It is at "C:\CYPRESS\USB\doc\FX2\CY7C68013.pdf".

03、CY7C68013 I2C-compatible Interface
Question:Can the I2C-compatible interface be used for general purpose applications such as writing/reading to and from the internal registers of an I2C slave device?
Response:Yes, it is possible to access other I2C slave devices such as EEPROMs, RTCs, temperature sensors, etc. through the I2C-compatible interface.
However, the I2C-compatible interface cannot be mastered by an outside I2C controller, as that interface on the FX2 supports a master-only mode. In addition, the internal FX2 registers cannot be accessed via this interface.

04、CY7C68013 Serial EEPROM Read
Question:Is there a way to read the serial EEPROM (EEPROM with VID/PID) from the host? Is there a way to read the serial EEPROM using the 8051 and then relay the info to the host using an endpoint?

Response:Download the Vend_Ax example firmware (c:\cypress\usb\examples\fx2\vend_ax) with the EZ-USB control panel and use the Vend Req toolbar to read the serial EEPROM on the board.
Use the 0xA2 for a small (LC00) EEPROM and 0xA9 for a large (LC64) EEPROM. Specify the offset with the value field (such as 0x0000), the direction of EEPROM access (i.e., IN to read the EEPROM), and how many bytes to read.
There should be a memory dump type display of the data read from the serial EEPROM in the data area of the control panel window. If a string of "CD CD CD .." appears, then the access to the EEPROM failed. Try again with 0xA9 if 0xA2 was used and vice versa. Also, verify that the EEPROM enable jumper is installed.
For serial EEPROMs programmed for VID/PID only enumeration, the VID/PID will be in the first bytes of the EEPROM. If the serial EEPROM contains a complete program, then dump the bytes at offset of the device descriptor of theprogram. The program's link map listing (.m51) file is used to determine the correct offset.

05、Serial EEPROM programming.
Questions:How can I program the serial EEPROM?What tools are included with the development kit to create my own image to program into the EEPROM?

Response:The serial EEPROM on the development board can be programmed by selecting the EEPROM button in the EZ-USB Control Panel and then navigating to the folders which contain EEPROM images we provide with the development kits as follows:
For the AN2131 family:C:\Cypress\USB\Examples\EzUsb\eeprom images\2100.iic
For the CY7C64613 FX family:C:\Cypress\USB\Examples\EzUsb\eeprom images\2200_24Mhz.iic or 2200_48MhHz.iic
For the CY7C68013 FX2:C:\Cypress\USB\Examples\FX2\Fx2_C0.iic
You can create your own eeprom image using the tools provided with the development kit. After you have your project compiled as a .hex file use the hex2bix utility to create an iic image. You can also use the EZ-USB Control Panel, after downloading the vend_ax example to program the EEPROM.
Related Documents:C:\Cypress\USB\Doc\EZ-USB General\EZ-USB Contents and Tutorial.pdfC:\Cypress\USB\Bin\hex2bix.exe

06、I2C Wait Condition (SCL low) CY7C68013 FX2
Question: Will the FX2 I2C controller wait when the receiver holds the SCL low?

Response: Yes, the FX2 will wait on the slave device. Please see section 13.4.1 of the FX2 Technical Reference Manual; which states the following: "Once the master drives SCL low, external slave devices can hold SCL low to extend clock-cycle times."

CY7C68013 IIC

EZ USB FX2(FX2) 是Cypress公司推出的USB 2.0控制器, 当用于高速数据采集系统时, 其片内集成的I2C 总线控制器,可以很好地实现与一些串行外设(如串行存储器、串行AD转换器等) 的无缝接口。一下简单介绍FX2 片内I2C总线控制器实现I2C 协议,I2C总线的读写操作流程。

1.FX2 片内I2C 总线控制器的特性

FX2 芯片内集成的I2C总线控制器具有2 种功能: 启动加载数据和通用I2C 总线接口。其中, 启动加载数据就是当芯片上电复位后, 通过检查其I2C总线上是否连接有串行E2PROM, 以决定采用何种设备固件加载方式; 通用I2C总线接口可以很方便地连接一些串行外设。其I2C总线的默认传输速率为100kbs, 可以被配置成快速方式, 传输速率可达400 kbs。FX2只作为主设备, 任何总线冲突将产生一个错误位, 中断数据的传输。另外, 芯片的串行数据线(SDA)和串行时钟线(SCL)需分别连接上拉电阻。

FX2 中I2C总线寄存器如下表所示:
I2DAT为8 bit 数据寄存器, 负责数据的读入或送出;
I2CTL为配置寄存器,负责配置总线;
I2CS为控制状态寄存器, 负责控制传输和报告各种状态。

表1 FX2 中I2C 总线控制器寄存器

地址 名称 b7 b6 b5 b4 b3 b2 b1 b0
E678 I2CS START STOP LASTRD ID1 ID0 BERR ACK DONE
E679 I2DAT D7 D6 D5 D4 D3 D2 D1 D0
E67A I2CTL 0 0 0 0 0 0 STOPE 400 kHz

开始控制位START: 当START位被配置为1, 写入数据到I2DAT, 开启I2C总线数据传输。此位在接收器的应答信号期间自动清零。

停止控制位STOP: 当STOP位被配置为1, 当前总线数据传输完后, 停止I2C总线数据传输。此位在总线停止传输数据后自动清零。

错误状态位BERR: 当总线上出现错误时, BERR 位被置为1。此位也可自动清零。

应答信号状态位ACK: ACK 位为1时, 表示接收器成功接受数据; 反之, 表示数据传输失败。此位在读传输时被忽略。

状态位DONE: 当完成1Byte 数据传输后, FX2设置DONE位, 并产生中断。当读或写I2DAT寄存器时, 此位自动清零。

由上可知, 只要正确配置或读取I2CS和I2CTL中相应的状态位, 并向I2DAT中写入数据或从其中读出数据,就能完成I2C总线数据的传输, 即EZ USB FX2通过表1中的3个寄存器实现了I2C 总线协议, 方便、快捷地完成数据的传输。

I2C总线读写流程

A.发送数据(参考手册 EZ-USB FX2 Technical Reference Manual P290 13.4.3 Sending Data)

1.设置start=1;

2.向I2DAT写外围设备的地址和方向=0(对于写);

3.等待done=1。如果BEER=1或ACK~=0,则转向步骤7;

4.用数据字节加载I2DAT;

5.等待DONE=1。如果BEER=1或ACK~=0,则转向步骤7;

6.对于每一个字节,重复4\5两个步骤,直到所有字节全部加载完成;

7.设置STOP=1。

B.接收数据(参考手册 EZ-USB FX2 Technical Reference Manual P290 13.4.4 Receiving Data)

1.设置START=1;

2.将外设地址和方向=1(对于读)写入I2DAT中;

3.等待DONE=1,如果BEER=1或ACK~=0,则通过设置stop=1结束;

4.读I2DAT并放弃数据。这表示9个脉冲的第一瞬时脉冲作为从从属设备来的第1个字节的时钟;

5.等待DONE=1,如果beer=1,则通过STOP=1结束;

6.从I2DAT读数据。这表示另外的读传输;

7.对于每一个字节重复6\7过程;

8.在读到最后一个字节之前,设置LASTRD=1;

9.从I2DAT中读数据,LASTRD=1,这就在总线初始化最终字节的读操作;

10.等待DONE=1.如果BEER=1,则通过设置STOP=1来结束;

11.设置STOP=1;

12.在设置STOP位后,从I2DAT立即读最后的字节。这就重新得到最后一个数据字节,而不用在I2CS总线上初始化一个额外的读处理(9个或更多的SCL脉冲)。

Labels

Followers