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 函數
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使用笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库设计的六个阶段详解
- 下一篇: embedv.php_微信开发在线点播电