日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

EFM8 USB Library使用笔记

發(fā)布時(shí)間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EFM8 USB Library使用笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

二. 個(gè)人理解

  • USB Hardware 部分
    具體的USB MCU的型號(hào)

  • EFM8 USB0 Peripheral Driver
    在EFM8的庫(kù)文件中,有對(duì)應(yīng)芯片的peripheral 庫(kù)中有對(duì)應(yīng)的USB_0.c/usb_0.h 可以直接使用。

  • EFM8 USB Library
    用戶程序需要包含 efm8_usb.h
    用戶需要?jiǎng)?chuàng)建 usbconfig.h, 這里建議直接copy例程的文件,然后修改。

  • 用戶程序 和EFM8 USB Library的接口, 有兩個(gè)部分, USB API 和 Call back function

  • usb API 函數(shù)的頭文件在efm8_usb.h中定義
  • call_back 函數(shù)文件需要用戶自己實(shí)現(xiàn), 這里也可以拷貝參考例程中得文件,根據(jù)需要修改。期中USBD_XferCompleteCb 必須實(shí)現(xiàn)。
  • 開(kāi)始調(diào)用方法, usb API 函數(shù)

  • USBD_Init( USBD_Init_TypeDef)
    用戶程序需要調(diào)用USBD_Init() 函數(shù) 來(lái)注冊(cè)u(píng)sb設(shè)備, usb設(shè)備的信息需要通過(guò)USBD_Init_TypeDef結(jié)構(gòu)體變量傳給usb_init函數(shù)。
    USBD_Init_TypeDef 的 成員:

  • USB_DeviceDescriptor_TypeDef deviceDescriptor

  • USB_ConfigurationDescriptor_TypeDef configDescriptor

  • USB_StringTable_TypeDef stringDescriptors

  • uint8_t numberOfStrings;

    deviceDescriptor 指向USB設(shè)備的設(shè)備描述符
    configDescriptor 指向USB設(shè)備的配置描述符
    stringDescriptors 指向USB設(shè)備的字符描述符表, 包括多個(gè)字符串描述符
    numberOfStrings 定義有多少個(gè)字符串

  • call back 函數(shù)
    Library 函數(shù)僅僅處理標(biāo)準(zhǔn)的USB命令, Class 命令需要由call back函數(shù)處理。
    USBD_XferCompleteCb(): 當(dāng)Package接收或者發(fā)送結(jié)束后調(diào)用,USBD_Write和USBD_Read可以通過(guò)參數(shù) true or false 來(lái)決定要不要調(diào)用USBD_XferCompleteCb
    USBD_SetupCmdCb():當(dāng)usb總線上有reset 信號(hào)時(shí)調(diào)用。
    USBD_SofCb() : 當(dāng)SOF中斷時(shí)調(diào)用,SOF每1ms發(fā)送一次,可以阻止USB進(jìn)入suspend 模式,同時(shí)Frame number可以用來(lái)同步Host和Device。 也可以用作1ms的定時(shí)發(fā)送數(shù)據(jù)
    USBD_DeviceStateChangeCb() 當(dāng)USB的狀態(tài)發(fā)生改變時(shí)調(diào)用,這個(gè)函數(shù)可以用來(lái)實(shí)現(xiàn)檢測(cè)suspend,當(dāng)suspend發(fā)生時(shí),進(jìn)入省電模式。 也可以在進(jìn)入configuration模式后,調(diào)用USBD_Read來(lái)讀出configuration模式
    USBD_IsSelfPoweredCb() USB協(xié)議棧查詢Power狀態(tài)時(shí)調(diào)用
    USBD_SetupCmdCb() 當(dāng)setup command 收到時(shí)調(diào)用,用來(lái)擴(kuò)展或者重載standard request。 或者處理Class or vendor defined 命令。

  • USBD_Read(), USBD_Write() API 函數(shù)
    初始化一個(gè)讀或者寫(xiě)的transfer,當(dāng)USBhost正在發(fā)起讀或者寫(xiě)的動(dòng)作后,USBD_XferCompleteCb會(huì)被調(diào)用

  • USBD_AbortTransfer(), USBD_AbortAllTransfers()
    終止由 USBD_Read USBD_Write 初始化但沒(méi)有真正完成的Transfer , 為新的Transfer做好準(zhǔn)備。

  • USBD_Connect(), USBD_Disconnect()
    使能 or 去使 D+/- 上的Pull-up 電阻, 重新開(kāi)始枚舉, 最好間隔1秒

  • USBD_EpIsBusy()
    檢測(cè) Endpoint是不是busy
    5 USBD_StallEp(), USBD_UnStallEp()
    stall / unstall 端點(diǎn),在 u盤(pán)的應(yīng)用中使用廣泛

  • USBD_Stop() 關(guān)閉USB D+/- 上的上拉電阻, 應(yīng)用程序需要重新調(diào)用USBD_Init來(lái)打開(kāi)USB

  • USBD_Suspend() USB進(jìn)入suspend 模式, usb 庫(kù)函數(shù)可以經(jīng)過(guò)配置,自動(dòng)進(jìn)入suspend模式, 由喚醒信號(hào)自動(dòng)喚醒。

  • USBD_RemoteWakeup() 經(jīng)配置,自動(dòng)喚醒Host

  • USBD_GetUsbState() 返回當(dāng)前USB的狀態(tài)USBD_State_TypeDef

  • USBD_Run() Polling 模式下,在主循環(huán)中調(diào)用, 中斷模式下不需要。

  • 中斷模式下,API和Call back函數(shù)均有中斷函數(shù)調(diào)用, C51沒(méi)有重入函數(shù),如果需要在其他地方調(diào)用API函數(shù)時(shí),需要關(guān)閉中斷。

    總結(jié)

    以上是生活随笔為你收集整理的EFM8 USB Library使用笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。