EFM8 USB Library使用笔记
一 官方介绍连接
http://devtools.silabs.com/studio/doc/EFM8/software/Lib/group___efm8__usb.html#details
二. 个人理解
USB Hardware 部分
具体的USB MCU的型号EFM8 USB0 Peripheral Driver
在EFM8的库文件中,有对应芯片的peripheral 库中有对应的USB_0.c/usb_0.h 可以直接使用。EFM8 USB Library
用户程序需要包含 efm8_usb.h
用户需要创建 usbconfig.h, 这里建议直接copy例程的文件,然后修改。用户程序 和EFM8 USB Library的接口, 有两个部分, USB API 和 Call back function
- usb API 函数的头文件在efm8_usb.h中定义
- call_back 函数文件需要用户自己实现, 这里也可以拷贝参考例程中得文件,根据需要修改。期中USBD_XferCompleteCb 必须实现。
开始调用方法, usb API 函数
USBD_Init( USBD_Init_TypeDef)
用户程序需要调用USBD_Init() 函数 来注册usb设备, usb设备的信息需要通过USBD_Init_TypeDef结构体变量传给usb_init函数。
USBD_Init_TypeDef 的 成员:USB_DeviceDescriptor_TypeDef deviceDescriptor
USB_ConfigurationDescriptor_TypeDef configDescriptor
USB_StringTable_TypeDef stringDescriptors
uint8_t numberOfStrings;
deviceDescriptor 指向USB设备的设备描述符
configDescriptor 指向USB设备的配置描述符
stringDescriptors 指向USB设备的字符描述符表, 包括多个字符串描述符
numberOfStrings 定义有多少个字符串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 命令。
USBD_Read(), USBD_Write() API 函数
初始化一个读或者写的transfer,当USBhost正在发起读或者写的动作后,USBD_XferCompleteCb会被调用USBD_AbortTransfer(), USBD_AbortAllTransfers()
终止由 USBD_Read USBD_Write 初始化但没有真正完成的Transfer , 为新的Transfer做好准备。USBD_Connect(), USBD_Disconnect()
使能 or 去使 D+/- 上的Pull-up 电阻, 重新开始枚举, 最好间隔1秒USBD_EpIsBusy()
检测 Endpoint是不是busy
5 USBD_StallEp(), USBD_UnStallEp()
stall / unstall 端点,在 u盘的应用中使用广泛USBD_Stop() 关闭USB D+/- 上的上拉电阻, 应用程序需要重新调用USBD_Init来打开USB
USBD_Suspend() USB进入suspend 模式, usb 库函数可以经过配置,自动进入suspend模式, 由唤醒信号自动唤醒。
USBD_RemoteWakeup() 经配置,自动唤醒Host
USBD_GetUsbState() 返回当前USB的状态USBD_State_TypeDef
USBD_Run() Polling 模式下,在主循环中调用, 中断模式下不需要。
中断模式下,API和Call back函数均有中断函数调用, C51没有重入函数,如果需要在其他地方调用API函数时,需要关闭中断。
EFM8 USB Library使用笔记相关推荐
- USB OTG学习笔记
http://blog.21ic.com/user1/1113/archives/2010/67075.html 推荐 仅仅看了半天SPEC写的笔记,有些乱,等调试完毕再次整理,思路不是很成熟,推测成 ...
- Angular library 学习笔记
原文 Use cases for Angular libraries Angular 库有 2 个常见用例: 构建可重用的组件库以在应用程序之间共享. 构建共享服务层功能 - 例如. 用于处理外部数据 ...
- USB应用开发笔记之一:STM32上实现USB主机读写U盘
在项目应用中,经常会有对外交换数据的需求.USB接口读写U盘无疑是一种颇为方便的选择.在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法. 1.应用概述 在我们的产品上 ...
- 【转】动态链接库(Dynamic Link Library)学习笔记
这篇写的很好,收藏一下. 转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYo ...
- USB协议学习笔记 - 虚拟串口Virtual Port Com LED控制
前言 STM32 的USB 可以虚拟成一个串口,功能还挺强,感觉比HID好用 这里使用USB 虚拟的串口,做个控制LED的小程序 控制LED这里使用自定义的AT命令方式,如红灯亮:AT+LEDR_ON ...
- USB协议学习笔记 - CUSTOM HID控制LED
简介 前面了解了 STM32 CUSTOM HID 设备,但是有几个细节没有处理好,如接收到主机的报告后,如何接收到指定的数组,并实现通信功能,如控制LED亮灭? 还有就是CUSTOM HID设备的[ ...
- USB UVC实战笔记第1篇—UVC设备枚举过程详细分析
1 UVC枚举过程分析 UVC,全称为:USB video class 或USB video device class.是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标 ...
- USB协议学习笔记 - CUSTOM HID 设备
简介 这里使用STM32平台进行USB 协议的学习与USB 设备的调试开发 USB HID设备,协议较固定,无法实现数据的自由接收与发送 USB CUSTOM HID设备(自定义HID协议)可以实现简 ...
- python stm32 usb bulk_STM32-USB学习笔记(一) USB基础
USB基础知识扫盲 前言 本文将从USB的插入检测.身份识别.数据传输三个方面对USB通讯整个过程扫盲,其中有些知识点的详细信息会放在文章最下面的附录中供查看,从而保证文章的整体简洁.在进入主题之前, ...
最新文章
- torch.manual_seed的意义为了每次得到的随机数是固定的,为了复现实验的目的
- 为什么是hbase而不是mongodb
- linux sublime3 插件安装插件,手动安装sublimeText3插件
- 计算机发展与应用,网络计算机的发展与应用
- qt和c#怎么选_请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?
- java获取文件夹 路径,Java获取文件的路径
- linux下使用dd命令制作ubuntu的u盘启动,Ubuntu使用dd命令制作U盘系统启动盘
- es统计mysql 报表_Elasticsearch(简称ES)实现日报表、月报表、年报表统计,没数据补0...
- 并发编程之——写锁源码分析
- 从我的公众号谈执行力
- 动态的顺序表(C语言实现)
- 学硕论文选题计算机,研究生计算机论文题目大全 研究生计算机论文题目哪个好...
- SpringBoot @Mapper注解实现类型转换bean无法注入
- 关于多线程爬取小说排序混乱的问题
- 基于vue前端聊天插件_基于Vue聊天的实现
- 类图、用例图、时序图、状态图、活动图、流程图、顺序图(转)
- 深度调查:危险的“360安全卫士”!
- 用什么工具可以查询App日活量
- python列表推导式去除m3u8中的广告视频地址下载视频
- 获取顺序栈的栈顶元素
热门文章
- 怎样关闭tp-link无线路由器防火墙 型号wr740n
- 计算机 smb共享,文件大师SMB共享使用方法
- 《小王子》精彩章节——Chapter 21
- 最新ThinkPHP微信独立精彩互换抢红包系统源码开源版
- 2012伦敦奥运会垃圾邮件大战提前上演
- gin:结合gorilla实现webSocket
- 【USB】macOS usb内核驱动开发入门
- 使用P/Invoke来开发用于与串行设备通讯的.NET基类
- 华为手机如何升级鸿蒙系统_华为鸿蒙系统怎么升级?升级鸿蒙系统步骤[多图]...
- 程序员求职面试三部曲之一:选择合适的工作单位(转)