一 官方介绍连接
http://devtools.silabs.com/studio/doc/EFM8/software/Lib/group___efm8__usb.html#details

二. 个人理解

  1. USB Hardware 部分
    具体的USB MCU的型号

  2. EFM8 USB0 Peripheral Driver
    在EFM8的库文件中,有对应芯片的peripheral 库中有对应的USB_0.c/usb_0.h 可以直接使用。

  3. EFM8 USB Library
    用户程序需要包含 efm8_usb.h
    用户需要创建 usbconfig.h, 这里建议直接copy例程的文件,然后修改。

  4. 用户程序 和EFM8 USB Library的接口, 有两个部分, USB API 和 Call back function

    1. usb API 函数的头文件在efm8_usb.h中定义
    2. call_back 函数文件需要用户自己实现, 这里也可以拷贝参考例程中得文件,根据需要修改。期中USBD_XferCompleteCb 必须实现。
  5. 开始调用方法, usb API 函数

    1. USBD_Init( USBD_Init_TypeDef)
      用户程序需要调用USBD_Init() 函数 来注册usb设备, usb设备的信息需要通过USBD_Init_TypeDef结构体变量传给usb_init函数。
      USBD_Init_TypeDef 的 成员:

      1. USB_DeviceDescriptor_TypeDef deviceDescriptor

      2. USB_ConfigurationDescriptor_TypeDef configDescriptor

      3. USB_StringTable_TypeDef stringDescriptors

      4. uint8_t numberOfStrings;

        deviceDescriptor 指向USB设备的设备描述符
        configDescriptor 指向USB设备的配置描述符
        stringDescriptors 指向USB设备的字符描述符表, 包括多个字符串描述符
        numberOfStrings 定义有多少个字符串

      5. call back 函数
        Library 函数仅仅处理标准的USB命令, Class 命令需要由call back函数处理。
        USBD_XferCompleteCb(): 当Package接收或者发送结束后调用,USBD_Write和USBD_Read可以通过参数 true or false 来决定要不要调用USBD_XferCompleteCb
        USBD_SetupCmdCb():当usb总线上有reset 信号时调用。
        USBD_SofCb() : 当SOF中断时调用,SOF每1ms发送一次,可以阻止USB进入suspend 模式,同时Frame number可以用来同步Host和Device。 也可以用作1ms的定时发送数据
        USBD_DeviceStateChangeCb() 当USB的状态发生改变时调用,这个函数可以用来实现检测suspend,当suspend发生时,进入省电模式。 也可以在进入configuration模式后,调用USBD_Read来读出configuration模式
        USBD_IsSelfPoweredCb() USB协议栈查询Power状态时调用
        USBD_SetupCmdCb() 当setup command 收到时调用,用来扩展或者重载standard request。 或者处理Class or vendor defined 命令。

    2. USBD_Read(), USBD_Write() API 函数
      初始化一个读或者写的transfer,当USBhost正在发起读或者写的动作后,USBD_XferCompleteCb会被调用

    3. USBD_AbortTransfer(), USBD_AbortAllTransfers()
      终止由 USBD_Read USBD_Write 初始化但没有真正完成的Transfer , 为新的Transfer做好准备。

    4. USBD_Connect(), USBD_Disconnect()
      使能 or 去使 D+/- 上的Pull-up 电阻, 重新开始枚举, 最好间隔1秒

    5. USBD_EpIsBusy()
      检测 Endpoint是不是busy
      5 USBD_StallEp(), USBD_UnStallEp()
      stall / unstall 端点,在 u盘的应用中使用广泛

    6. USBD_Stop() 关闭USB D+/- 上的上拉电阻, 应用程序需要重新调用USBD_Init来打开USB

    7. USBD_Suspend() USB进入suspend 模式, usb 库函数可以经过配置,自动进入suspend模式, 由唤醒信号自动唤醒。

    8. USBD_RemoteWakeup() 经配置,自动唤醒Host

    9. USBD_GetUsbState() 返回当前USB的状态USBD_State_TypeDef

    10. USBD_Run() Polling 模式下,在主循环中调用, 中断模式下不需要。

    中断模式下,API和Call back函数均有中断函数调用, C51没有重入函数,如果需要在其他地方调用API函数时,需要关闭中断。

EFM8 USB Library使用笔记相关推荐

  1. USB OTG学习笔记

    http://blog.21ic.com/user1/1113/archives/2010/67075.html 推荐 仅仅看了半天SPEC写的笔记,有些乱,等调试完毕再次整理,思路不是很成熟,推测成 ...

  2. Angular library 学习笔记

    原文 Use cases for Angular libraries Angular 库有 2 个常见用例: 构建可重用的组件库以在应用程序之间共享. 构建共享服务层功能 - 例如. 用于处理外部数据 ...

  3. USB应用开发笔记之一:STM32上实现USB主机读写U盘

      在项目应用中,经常会有对外交换数据的需求.USB接口读写U盘无疑是一种颇为方便的选择.在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法. 1.应用概述   在我们的产品上 ...

  4. 【转】动态链接库(Dynamic Link Library)学习笔记

    这篇写的很好,收藏一下. 转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYo ...

  5. USB协议学习笔记 - 虚拟串口Virtual Port Com LED控制

    前言 STM32 的USB 可以虚拟成一个串口,功能还挺强,感觉比HID好用 这里使用USB 虚拟的串口,做个控制LED的小程序 控制LED这里使用自定义的AT命令方式,如红灯亮:AT+LEDR_ON ...

  6. USB协议学习笔记 - CUSTOM HID控制LED

    简介 前面了解了 STM32 CUSTOM HID 设备,但是有几个细节没有处理好,如接收到主机的报告后,如何接收到指定的数组,并实现通信功能,如控制LED亮灭? 还有就是CUSTOM HID设备的[ ...

  7. USB UVC实战笔记第1篇—UVC设备枚举过程详细分析

    1 UVC枚举过程分析 UVC,全称为:USB video class 或USB video device class.是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标 ...

  8. USB协议学习笔记 - CUSTOM HID 设备

    简介 这里使用STM32平台进行USB 协议的学习与USB 设备的调试开发 USB HID设备,协议较固定,无法实现数据的自由接收与发送 USB CUSTOM HID设备(自定义HID协议)可以实现简 ...

  9. python stm32 usb bulk_STM32-USB学习笔记(一) USB基础

    USB基础知识扫盲 前言 本文将从USB的插入检测.身份识别.数据传输三个方面对USB通讯整个过程扫盲,其中有些知识点的详细信息会放在文章最下面的附录中供查看,从而保证文章的整体简洁.在进入主题之前, ...

最新文章

  1. torch.manual_seed的意义为了每次得到的随机数是固定的,为了复现实验的目的
  2. 为什么是hbase而不是mongodb
  3. linux sublime3 插件安装插件,手动安装sublimeText3插件
  4. 计算机发展与应用,网络计算机的发展与应用
  5. qt和c#怎么选_请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?
  6. java获取文件夹 路径,Java获取文件的路径
  7. linux下使用dd命令制作ubuntu的u盘启动,Ubuntu使用dd命令制作U盘系统启动盘
  8. es统计mysql 报表_Elasticsearch(简称ES)实现日报表、月报表、年报表统计,没数据补0...
  9. 并发编程之——写锁源码分析
  10. 从我的公众号谈执行力
  11. 动态的顺序表(C语言实现)
  12. 学硕论文选题计算机,研究生计算机论文题目大全 研究生计算机论文题目哪个好...
  13. SpringBoot @Mapper注解实现类型转换bean无法注入
  14. 关于多线程爬取小说排序混乱的问题
  15. 基于vue前端聊天插件_基于Vue聊天的实现
  16. 类图、用例图、时序图、状态图、活动图、流程图、顺序图(转)
  17. 深度调查:危险的“360安全卫士”!
  18. 用什么工具可以查询App日活量
  19. python列表推导式去除m3u8中的广告视频地址下载视频
  20. 获取顺序栈的栈顶元素

热门文章

  1. 怎样关闭tp-link无线路由器防火墙 型号wr740n
  2. 计算机 smb共享,文件大师SMB共享使用方法
  3. 《小王子》精彩章节——Chapter 21
  4. 最新ThinkPHP微信独立精彩互换抢红包系统源码开源版
  5. 2012伦敦奥运会垃圾邮件大战提前上演
  6. gin:结合gorilla实现webSocket
  7. 【USB】macOS usb内核驱动开发入门
  8. 使用P/Invoke来开发用于与串行设备通讯的.NET基类
  9. 华为手机如何升级鸿蒙系统_华为鸿蒙系统怎么升级?升级鸿蒙系统步骤[多图]...
  10. 程序员求职面试三部曲之一:选择合适的工作单位(转)