背景交代:
相关文档:1.《USB应用开发技术大全.pdf》奉上链接
2.《EZ-USB(R) Technical Reference Manual.pdf》奉上链接
源代码:
1.FX2Test.rar奉上链接
前两个月,断断续续的把上面这三份文档浏览了一遍,总是看着看着就昏昏欲睡,没多大效果,不过庆幸的是我走了一遍,现在再回头就有底气了许多。
个人觉着看得不够细,仍然对USB“了如皮毛”,所以决定“第二遍”采用“追踪研读”的方法来读程序,然后不懂的地方就查上面的这两份文档或者百度,做这份笔记的目的也是为了记录这一过程,当然,最重要的还是为了防止自己在看文档的时候犯困。哈哈哈
所谓“追踪研读”,就是利用KEIL和PDF阅读器的搜索功能,搜索代码和与代码相关的文档解释,从而达到读懂代码的目的。
背景交代完毕,开始“追踪研读”
在《USB应用开发技术大全.pdf》里看到:
fw.c文件里有SETUP命令的处理,记得第一遍看文档时,有印象SETUP命令的处理是比较靠前的处理,那就从这里开始吧。
下面是SetupCommand的定义:
// Device request parser
void SetupCommand(void)
{
void *dscr_ptr;
switch(SETUPDAT[1])
{
case SC_GET_DESCRIPTOR: // *** Get Descriptor
if(DR_GetDescriptor())
switch(SETUPDAT[3])
{
case GD_DEVICE: // Device
SUDPTRH = MSB(pDeviceDscr);
SUDPTRL = LSB(pDeviceDscr);
break;
case GD_DEVICE_QUALIFIER: // Device Qualifier
// only retuen a device qualifier if this is a high speed
// capable chip.
if (HighSpeedCapable())
{
SUDPTRH = MSB(pDeviceQualDscr);
SUDPTRL = LSB(pDeviceQualDscr);
}
else
{
EZUSB_STALL_EP0();
}
break;
case GD_CONFIGURATION: // Configuration
SUDPTRH = MSB(pConfigDscr);
SUDPTRL = LSB(pConfigDscr);
break;
case GD_OTHER_SPEED_CONFIGURATION: // Other Speed Configura