当EZ-USB FX2加电复位(或人工按钮复位)后:
1、FX2内核(Core)被初始化,所有FX2寄存器被初始化。
2、寄存器CPUCS.0=1,CPU保持复位状态,CPU CLK="12MHz"。
3、寄存器USBCS.1(Renum)=0,使用FX2内核的缺省USB设备配置(PID=0x04B4,VID=0x8613),FX2内核处理EP0上的所以设备请求(来自主机)。
4、所以中断被关闭,所以I/O端点设置为普通I/O方式。
5、如果FX2没有检测到外部串行EEPROM,或者有EEPROM,但其首字节不是)0xC0或0xC2,当EA=1时转第8步,否则使用FX2内核缺省的USB描述符(包括PID、VID和DID等),此时FX2等待从主机(Host)下载USB固件至FX2片内RAM。
6、如果检测到EEPROM首字节是0xC0,则使用EEPROM中第1~7字节的PID、VID和DID,但描述符还是FX2内核的缺省值,FX2内核等待从主机下载固件。当主机通过EP0将USB固件下载至片内RAM后,最后一帧写0x00至CPUCS寄存器,是FX2的8051CPU脱离复位状态,开始运行固件程序,并对USB设备进行一次“重枚举”,重枚举后使用固件中的USB描述符及PID和VID等(是在“dscr.a51”中定义的,不是EEPROM的第1~7字节!),同时Renum位置“1”,由(用户)固件程序接管来自主机的所有EP0的设备请求。
7、如果检测到EEPROM的首字节是0xC2,则由FX2内核引导程序将EEPROM中的固件代码直接读入片内RAM中,由于这种装入不需要与主机通信,因此不需提供PID、VID等。固件装完后,内核引导程序最后写0x00至CPUCS寄存器,余下的操作与第6步相同。
8、当EA=1时,表示固件程序、设备描述符、PID和VID等均存在外部(并行)FLASH/EEPROM中 - 类似8051的外部程序存储器,固件直接在外部存储器中运行,不用装入片内RAM。由于不用装载固件,FX2内核直接将CPU从复位状态释放,即马上将CPUCS.0清“0”。
注意:FX2的固件(即用户程序)不能写CPUCS.0,因固件由CPU(8051)运行,CPU自己不能复位自己的!但在加电复位、固件加载过程中,FX2内核(不是8051CPU程序)是可以对CPUCS.0置“1”或清“0”的;此外,主机也可以对CPUCS.0进行操作,以便随时对FX2内部8051CPU进行复位,这是通过EP0发如下请求来实现的:
bmRequestType=0x40;//用户自定义请求,OUT方式
bRequest=0xA0;//固件装载/数据装载
wValue=0xE600;//CPUCS寄存器地址
wLength=1;//数据长度
然后将“输入/出缓冲区”数据设置为0x01或0x00就可以了。
用户1478618 2010-11-17 14:26