基本固件框架的追踪研读之SETUP命令的处理1

本文档详细介绍了作者使用“追踪研读”方法深入理解USB应用开发的过程,特别是针对Cypress设备的FX2Test固件。通过查阅《USB应用开发技术大全》和《EZ-USB Technical Reference Manual》,作者从fw.c文件的SetupCommand函数开始,逐步剖析其功能,并追踪调用路径。在解析过程中,作者发现EZUSB_GetStringDscr函数在库文件EZUSB.LIB中的定义,并分享了如何查找和理解相关源代码的资源和步骤。

背景交代:

相关文档: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值