• USB开发库STSW-STM32121文件分析


    hw_config.c: 该文件中包含系统配置的函数。

    usb_desc.c:各种描述符

    usb-endp.c:就两个函数分别处理端点1的IN和端点2的OUT。

    usb_istr.c: 该文件中只有一个函数,即 USB 中断的 USB_Istr 函数,该函数对各类引起 USB 中断的事件作轮询处理。
    usb_prop.c:每个特定类下应用相关的处理函数,例如初始化、 SETUP 包、 IN 包、 OUT 包等等。


    usb_pwr.c: 该文件中包含处理上电、调电、挂起和恢复事件的函数。

    stm32it.c: 该文件中包含 USB 中断服务程序,由于 USB 中断有很多情况,这里的中断服务程序只是调用 usb_Istr.c 文件中的 USB_Istr 函数,由 USB_Istr 函数再做轮询处理。

    usb_bot.c:是一个非常重要的源文件,可以说是大容量设备类的主要工作是由它完成的。bot的意思是BULk-only type,在近批量传输协议下,命令的传送也是有批量端点完成的。

    usb_scsi.c:主要是实现具体UFI命令的处理,像读扇区、写扇区、读容量等命令的处理过程都是在这里完成的。

    usb_mem.c: 主要实现两个函数:

    UserToPMABufferCopy:把用户缓冲区中的内容拷贝到硬件缓冲区,这个显然是在发送数据
    PMAToUserBufferCopy:把硬件缓冲区中的内容拷贝到用户缓冲区,这个显然是在接收数据
    /*******************************************************************************
    * Function Name  : UserToPMABufferCopy
    * Description    : Copy a buffer from user memory area to packet memory area (PMA)
    * Input          : - pbUsrBuf: pointer to user memory area.
    *                  - wPMABufAddr: address into PMA.
    *                  - wNBytes: no. of bytes to be copied.
    * Output         : None.
    * Return         : None	.
    *******************************************************************************/
    void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
    {
      uint32_t n = (wNBytes + 1) >> 1;   /* n = (wNBytes + 1) / 2 */
      uint32_t i, temp1, temp2;
      uint16_t *pdwVal;
      pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);
      for (i = n; i != 0; i--)
      {
        temp1 = (uint16_t) * pbUsrBuf;
        pbUsrBuf++;
        temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;
        *pdwVal++ = temp2;
        pdwVal++;
        pbUsrBuf++;
      }
    }
    
    /*******************************************************************************
    * Function Name  : PMAToUserBufferCopy
    * Description    : Copy a buffer from user memory area to packet memory area (PMA)
    * Input          : - pbUsrBuf    = pointer to user memory area.
    *                  - wPMABufAddr = address into PMA.
    *                  - wNBytes     = no. of bytes to be copied.
    * Output         : None.
    * Return         : None.
    *******************************************************************************/
    void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
    {
      uint32_t n = (wNBytes + 1) >> 1;/* /2*/
      uint32_t i;
      uint32_t *pdwVal;
      pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);
      for (i = n; i != 0; i--)
      {
        *(uint16_t*)pbUsrBuf++ = *pdwVal++;
        pbUsrBuf++;
      }
    }

     usb_sil.c:这个文件主要是简单接口层的初始化,和端点的读写操作函数。总共有3个函数:USB_SIL_Init();USB_SIL_Write();USB_SIL_Read()。

     移植的话USB-FS-Device_Driver无需修改,只需要修改user下的文件即可

    端点0固定用于控制传输,endpoint0 的setup 包处理函数setup0_process()

    http://bbs.ednchina.com/BLOG_ARTICLE_1473493.HTM

  • 相关阅读:
    计算某天的下一天:黑盒测试之等价类划分+JUnit参数化测试
    黑盒测试之因果图法
    黑盒测试之等价类划分
    JUnit白盒测试之基本路径测试:称重3次找到假球
    Java实现称重3次找到假球
    用pymysql和Flask搭建后端,响应前端POST和GET请求,实现登录和注册功能
    【算法与数据结构】包含负数的基数排序
    【机器学习实战】第六章--支持向量机
    【机器学习实战】第四章朴素贝叶斯
    【算法与数据结构】--经典排序算法Python实现
  • 原文地址:https://www.cnblogs.com/prayer521/p/5822396.html
Copyright © 2020-2023  润新知