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

Tuesday, March 17, 2009

0欧电阻笔记

0欧的电阻基本有以下几个功能:
①做为跳线使用。这样既美观,安装也方便。
②在数字和模拟等混合电路中,往往要求两个地分开,并且单点连接。我们可以用一个0欧的电阻来连接这两个地,而不是直接连在一起。这样做的好处就是,地线被分成了两个网络,在大面积铺铜等处理时,就会方便得多。附带提示一下,这样的场合,有时也会用电感或者磁珠等来连接。
③做保险丝用。由于PCB上走线的熔断电流较大,如果发生短路过流等故障时,很难熔断,可能会带来更大的事故。由于0欧电阻电流承受能力比较弱(其实0欧电阻也是有一定的电阻的,只是很小而已),过流时就先将0欧电阻熔断了,从而将电路断开,防止了更大事故的发生。有时也会用一些阻值为零点几或者几欧的小电阻来做保险丝。不过不太推荐这样来用,但有些厂商为了节约成本,就用此将就了。
④为调试预留的位置。可以根据需要,决定是否安装,或者其它的值。有时也会用*来标注,表示由调试时决定。
⑤作为配置电路使用。这个作用跟跳线或者拨码开关类似,但是通过焊接固定上去的,这样就避免了普通用户随意修改配置。通过安装不同位置的电阻,就可以更改电路的功能或者设置地址。

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."

简单的I2C协议笔记

近段时间做IIC相关的工作,顺便把IIC协议复习了下,下面的东西权当做个笔记,以备将来查阅。

I2C是一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各 Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=1)或者写(=0),所以我们有时也可看到8位形式的设备地址,此时每个设备有读、写两个地址,高7位地址其实是相同的。

一. 技术性能:
工作速率有100K和400K两种;
支持多机通讯;
支持多主控模块,但同一时刻只允许有一个主控;
由数据线SDA和时钟SCL构成的串行总线;
每个电路和模块都有唯一的地址;
每个器件可以使用独立电源;

二. 基本工作原理:
以启动信号START来掌管总线,以停止信号STOP来释放总线;
每次通讯以START开始,以STOP结束;
启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;
当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号;
每个数据字节在传送时都是高位(MSB)在前;

写通讯过程:
1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
2. 发送一个地址字节(包括7位地址码和一位R/W);
3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);
4. 主控收到ACK后开始发送第一个数据字节;
5. 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;
6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;

读通讯过程:
1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
2. 发送一个地址字节(包括7位地址码和一位R/W);
3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);
4. 主控收到ACK后释放数据总线,开始接收第一个数据字节;
5. 主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;
6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;

四. 总线信号时序分析
1. 总线空闲状态
SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;
2. 启动信号START
时钟信号SCL保持高电平,数据信号SDA的电平被拉低(即负跳变)。启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态;
3. 停止信号STOP
时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平(即正跳变),停止信号也必须是跳变信号。
4. 数据传送
SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL线为低电平期间,SDA上的电平允许变化。
5. 应答信号ACK
I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。
6. 无应答信号NACK
在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途:
a. 一般表示接收器未成功接收数据字节;
b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。

五. 寻址约定
地址的分配方法有两种:
1. 含CPU的智能器件,地址由软件初始化时定义,但不能与其它的器件有冲突;
2. 不含CPU的非智能器件,由厂家在器件内部固化,不可改变。

高7位为地址码,其分为两部分:
1. 高4位属于固定地址不可改变,由厂家固化的统一地址;
2. 低三位为引脚设定地址,可以由外部引脚来设定(并非所有器件都可以设定);

六.数据格式
I2C数据格式如下:
无数据:SCL=1,SDA=1;
开始位(Start):当SCL=1时,SDA由1向0跳变;
停止位(Stop): 当SCL=1时,SDA由0向1跳变;
数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可随意改变SDA;
当SCL保持为0时,SDA上的数据可随意改变;
地址位:定义同数据位,但只由Master发给Slave;
应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0;
否应答位(NACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=1。

当数据为单字节传送时,格式为:
开始位,8位地址位(含1位读写位),应答,8位数据,应答,停止位。

当数据为一串字节传送时,格式为:
开始位,8位地址位(含1位读写位),应答,8位数据,应答,8位数据,应答,……,8位数据,应答,停止位。

需要注意的是:
1,SCL一直由Master控制,SDA依照数据传送的方向,读数据时由Slave控制SDA,写数据时由Master控制SDA。当8位数据传送完毕之后,应答位或者否应答位的SDA控制权与数据位传送时相反。
2,开始位“Start”和停止位“Stop”,只能由Master来发出。
3,地址的8位传送完毕后,成功配置地址的Slave设备必须发送“ACK”。否则否则一定时间之后Master视为超时,将放弃数据传送,发送“Stop”。
4,当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时,此时Master放弃数据传送,发送 “Stop”。
5,当读数据的时候,Slave设备每发送完8个数据位,如果Master希望继续读下一个节,Master应该回答“ACK” 以提示Slave准备下一个数据,如果Master不希望读取更多字节,Master应该回答“NACK”以提示Slave设备准备接收Stop信号。
6,当Master速度过快Slave端来不及处理时,Slave设备可以拉低SCL不放(SCL=0将发生“线与”)以阻止Master发送更多的数据。此时Master将视情况减慢或结束数据传送。

在实际应用中,并没有强制规定数据接收方必须对于发送的8位数据做出回应,尤其是在Master和Slave端都是用GPIO软件模拟的方法来实现的情况下,编程者可以事先约定数据传送的长度,不发送ACK,有时可以起到减少系统开销的效果。

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脉冲)。

Monday, March 9, 2009

一个小逻辑游戏

先不要看下面答案,思考如下问题:
有甲、乙、丙三个精灵,其中一个只说真话,另外一个只说假话,第三个随机地决定何时说真话,何时说假话。你可以向这三个精灵发问三条是非题,而你的任务 是从他们的答案找出谁说真话,谁说假话,谁是随机答话。这个难题困难的地方是这些精灵会以“Da”或“Ja”回答,但你并不知道它们的意思,只知道其中一 个字代表“对”,另外一个字代表“错”。那么,你应该如何设计那三个问题呢?

如下是问题的解答:

第一个问题:你们是说真话的精灵吗?

答案有如下可能:两个精灵回答Da一个回答Ja或两个答Ja,一个答Da.则回答与另外两个不一样的那个精录一定是“随机决定何时说真话”的精灵。答案除 以上两种可能外,还有一种可能是三个回答都是一样的,如果都是Da刚Da代表“是”,如果都是Ja则Ja代表“是”。如果回答不是相同的,则多的那个代表 “是”。

通过第一步,如果直接找出了随机决定何时说真话的精灵,则只剩两个精灵。且此时,已经知道哪个代表是,哪个代表不是。然后问剩下的两个精灵,你们是随机决定何时说真话的精灵吗?说假话的精灵会回答“是”。则只要两个问题,就可以判断出结果了。

如果没能直接找出随机说真话的精灵,即三个精灵的回答都是一样的。则问第二个问题。

第二个问题:你们是随机决定何时说真的话的精灵吗?

此时已经通过第一问知道哪个代表“是”。如果有两个回答“是”,则回答“不是”的那个必是说真话的精灵。如果两个回答不是,则回答“是”的那个必是说假话的。

第三个问题要分两种情况。如果找出的是说真话的精灵,则随便指着一个问他,这个是不是说假话的精灵,就可以判断出结果;如果找出的是说假话的精灵,就随便指一个精灵,问他这个是不是说真话,然后作出相反的判断就可以得到结果了。

Friday, March 6, 2009

社保的骗局

社保真的是利民的吗?

本人经过收集大量的数据,走访元海地区著名大学教授和充分的计算,终于揭开了社保名为利民,实为榨取屁民血汗的真相。

一个白领的月薪为8000元,那么,他每个月贡献给社保多少钱呢,个人比例合计约为11%,外加6元大病保险,总共是886元,企业部分是2640元,也就是说,月薪8000元的白领每月贡献给社保机构3520元,每年贡献给社保42240元。

那么他可以享受到哪些福利呢,按照目前的养老保险制度,他干到60岁,算工作30年好了,总共为社保贡献一百二十六万七千多元元,退休后个人账户中有养老 金230400元,除以120月,得到1920元,再加上社保基金数,大概是月平均工资的30%(这个标准大家可以从网上搜到,缴满一年多1%),以南通 为例,社会平均工资为1642.4元,缴满30年,基础养老金为492.72元,他退休后可以领取的养老金为2412.72元左右。划算么,为社保贡献了 一百多万元(未计算利息,利息就当养狗了),退休金只能领取2412.72元,如果他活平均寿命72岁,则可领取347431.68元,为社保贡献了 919768.32元,将近100万。

有人会说,社保对高收入者是不公平对,对于低收入者是有利的,削峰填谷,调节贫富差距嘛,那我们来看看一个最低工资标准的人缴纳社保是不是划算。南通地区 的最低工资标准目前是850元,假设某人最低工资标准为850元,按照法律,以元海地区南通市为例,当地最低工资标准为850元,但是最低缴费标准为社会 平均工资的60%,也就是必须按照1644.2/月的工资标准缴纳社保,按照法律,他每个月个人缴费为186.67元,企业为其缴费为542.01, 合计共支出728.68元。也就是说,月薪为850元的低收入者,社保支出最少要728.68元,占其收入比例的85.73%。缴费30年,总计 262324.8元。退休后他可以领取个人缴纳的养老保险部分,(1644.2×0.08×12×30/120394.61元,加上社保基金支出的部 分约492.72/月,总计每月可领取887.33元,领到72岁,可以领回来126335.52元。社保除了赚取利息外,至少还赚了 262324.8-126335.52135989.28元。

可见,即使按照最低缴费标准缴纳社保,社保机构也可以赚取13万元/人,可见,社保不但不是利民的,反而是榨取体制外人士的又一个美丽骷髅头。

关于创业

此贴比较有意思,很实际的事情,给打算创业的朋友借鉴,特转之以纪念!

--------------------------------------------------------------------------

我现在办公的地方是民宅(租不起写字楼),然后民宅办公不能注册公司(必须去郊区开发区注册)。我申请的宽带是150元包月的FTTB。今天收到中国电信的通知单,说办公不能使用个人150元包月的宽带,要改成办公性质,然后我打电话过去询问办公性质到底一个月要交多少钱,对方答:4000。顿时我就无语 了。所以我说,大学生(包括中小学生),你也别创业了,中国的创业环境(这里特指上海)之恶劣不是你能想象的,不管你注册没注册公司,只要电信认为你在办公,那么好吧,你一年的上网成本就是48000。曾经有一个上海市的领导提了一个问题说为什么上海出不了马云,我不知道为什么,不过我知道马云当初在杭州民宅里办公的时候,宽带费用肯定不需要4000元一个月,否则杭州市的市长肯定也会问一个问题:怎么马云还没出来呢?

在中国(这里特指 上海),你要合法的做生意,首先你要在写字楼里租一个办公室,就算是50个平方吧,普通商务楼算2元一个平方/天,一个月就是3000元,加上其他水电费用,办公场地一个月至少5000,一年也就是6万元,上面说了,电信给办公用户宽带4000一个月,一年又花掉了48000元。你要合法办公,要申请注册公司吧,注册一个10万资本的公司,没多少钱,一共大概就花2000元。好了,然后你决定合法招聘一位员工,薪水4000元,你要为员工合法缴纳四金,养老保险金、医疗保险金、失业保险金、住房公积金、工伤保险金、生育保险金共计1760元,一年也就是69120元,加上一个办公桌一台电脑,算少一点,4000元。现在你可以合法开展业务了,算一算第一年你合法经营公司一共需要花多少钱:60000+48000+2000+69120+4000=183120元。

好吧,如果你一切依法办事,那么我估计1000个人里面999个都已经宣布破产了。我的公司到现在为止还没赚钱,你可能无法想象要赚到钱的艰难。在你还在为赚钱苦恼的时候,你必须养活工商,养活垄断的中国电信,养活你的员工,你注册一个10万的公司,第一年18万就没有了,然后你就等着破产吧。不!你决定 奋起反抗,你在民宅里办公,你申请个人宽带,你不再注册公司,你使用假发票,你暴利经营,你坑害消费者,你走投无路并开始诈骗老太太……现在你应该不那么 奇怪为什么和谐社会里有那么多的“不法分子”了吧?或者换一句话说,这个社会里充满了不法分子,只不过少数是大不法,和无数的小不法。你要么选择做一个守法的被人鱼肉的小把戏,要么选择做一个不愿屈服的小“不法分子”,当然如果你一定要守法并且还要创业,那么我劝你不如直接把钱捐献给伟大的政府和垄断企业,然后一了百了。

fromhttp://marila.net/2009/02/25/biechuangyele/

Labels

Followers