精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用AT32 MCU主機庫快速開發USB相關應用

0739hhbb ? 來源:AT32 MCU 雅特力科技 ? 2023-01-14 10:56 ? 次閱讀

這部分主要介紹AT32 USB主機庫的結構和庫的使用方法,AT32 USB支持全速和低速,不支持USB2.0高速設備。 這里庫的作用是用來管理USB外設和實現USB的基本協議,使開發者能夠更快的上手開發。

USB主機庫包含以下幾個模塊 如圖1:

用戶應用程序

此部分為開發者根據應用具體需求開發應用程序。

USB Core Driver和USB主機類

USB Core Driver:此部分實現USB設備標準協議棧,標準請求等接口

USB主機類:此部分實現具體USB主機請求。

USB主機硬件底層接口

此部分實現硬件寄存器抽象接口

USB/OTG外設

圖1. USB主機庫結構

poYBAGPCGemACMLgAADBBRHtVaQ745.png

AT32 USB庫文件

如下是AT32 USB應用工程結構圖:

圖2. AT32工程結構

poYBAGPCGeqAXXdLAADxrvw-9jk830.png

Core Driver庫路徑:OTGFS-->middlewaresusb_drivers

Host Class庫路徑:middlewaresusbh_class

如下是USB主機庫文件列表:

表1. USB主機庫文件列表

pYYBAGPCGemAF-R2AACTDLIsQFo579.png

表2. USB主機類文件列表

3c9cce1c-934b-11ed-bfe3-dac502259ad0.png

USB主機庫文件說明

USB庫實現USB主機枚舉標準請求,同時實現USB規格里面的4種傳輸類型(control,interrupt,bulk,isochronous)的函數接口。

圖3 USB主機庫文件結構

poYBAGPCGemAS1EQAAGVXOfzbcA656.png

USB主機文件函數接口

usbh_int.c函數接口

usbh_int.c主要處理底層中斷,包括設備連接,設備斷開等。

表3 usbh_int函數接口

pYYBAGPCGeqAM1uwAAEvEOwRYeY234.png

usbh_core.c函數接口

usbh_core.c此文件封裝不同的usb主機函數接口用于不同的地方調用,包括一些接收,發送函數等。

表4 usbh_core函數接口

poYBAGPCGeqAIDJWAAK2RShex2M859.png

usbh_ctrl.c函數接口

usbh_ctrl.c此文件處理USB主機枚舉過程中的一些標準請求。

表5 usbh_ctrl函數接口

3d4b8510-934b-11ed-bfe3-dac502259ad0.png

支持的標準設備請求如下表:

表6 標準設備請求

3d7f24d8-934b-11ed-bfe3-dac502259ad0.png

usbh_xx_class.c函數接口

usbh_xx_class.c此文件為具體主機類型的數據處理,通過結構體函數來實現不同主機類型數據的處理。 開發者根據不同的主機類型,來實現下面函數結構體中的函數,達到不同應用結果。

函數結構體如下:

表7 主機class函數結構體

poYBAGPCGemAKU6RAACpk2uKepA591.png

表8 主機class函數接口

3db5842e-934b-11ed-bfe3-dac502259ad0.png

usbh_user.c函數接口

usbh_user.c此文件主要為一些給用戶處理事件的函數如復位,斷開連接等。

表9 用戶事件函數結構體

3e167dc4-934b-11ed-bfe3-dac502259ad0.png

表10 用戶函數接口函數

pYYBAGPCGemABQxyAAE4uY0UDjU994.png

其它參數

函數的參數結構體如下,USB主機庫中參數傳遞使用結構體usbh_core_type,如下圖:

圖4 全局結構體

poYBAGPCGemASQY0AAGsbWv117c677.png

USB主機的狀態機如下圖:

圖5 USB主機狀態機

pYYBAGPCGeqABfpsAAGqKum1DWs090.png

USB返回值,USB函數接口使用如下函數返回值。

圖6 函數返回值

poYBAGPCGeqAW49mAAB3-t9oGG8025.png

通道FIFO分配

USB主機要正常收發數據,在初始化時需要為通道分配FIFO,分配給所有通道FIFO大小的和不能超過系統分配給USB緩沖區的最大長度,具體USB的緩沖區大小參考RM上的描述。

開發者可以參考例程usb_conf.h為通道自定義分配FIFO。

OTGFS主機通道FIFO****分配

主機模式下,所有通道共享一個接收FIFO,通道發送FIFO分為非周期性發送FIFO和周期性發送FIFO。 注意usb_conf.h中對端點分配的FIFO大小單位為word(Byte)。

以hid_demo例程為例:

pYYBAGPCGeqAeYgxAAB-YvQaXks727.png

USB主機初始化

在使用USB主機功能時,需要對USB的寄存器做一些基本的初始化,通過調用USB主機的初始化函數完成這部分的操作。

OTGFS****外設初始化

OTGFS初始化函數usbd_init包含5個參數:

3efe3aa6-934b-11ed-bfe3-dac502259ad0.png

例程主機hid_demo的初始化如下:

3f0a4558-934b-11ed-bfe3-dac502259ad0.png

USB主機中斷處理

USB主機中斷入口函數usbh_irq_handler處理所有USB主機中斷,包括連接狀態,通道收發數據,SOF,喚醒等中斷,下面介紹一些典型的中斷處理。

圖7 USB主機中斷處理函數

pYYBAGPCGeqADgvtAAC9kP6dSa4629.png

通道中斷處理

當USB主機與設備進行通信時,通道的收發狀態都在通道中斷中處理,通道的方向分為IN和OUT通過通道寄存器中的方向為進行判斷。

中斷處理函數:usbh_hch_handler

代碼如下:

pYYBAGPCGemAaSVBAADX2-j2Vm4391.png

Wakeup 中斷處理

當USB主機在掛起狀態時,檢測到設備觸發的遠程喚醒信號,將產生此中斷。 此中斷會將當前主機狀態改為WAKEUP狀態:

中斷處理函數:usbh_wakeup_handler

代碼如下:

pYYBAGPCGemAKIRdAAAzb1rbiiY826.png

接收FIFO非空中斷

此中斷表示當前接收FIFO有數據,應用程序通過此中斷讀出接收到的數據,并存放到對應通道的FIFO當中,當數據讀取完成之后,會產生對應的通道的中斷。

中斷處理函數:usbh_rx_qlvl_handler

代碼如下:

poYBAGPCGeqAHA_fAAHcCEnRYZI217.png

主機端口中斷處理

當USB主機斷開發生狀態改變時,會產生端口中斷,應用程序通過此中斷判斷連接設備的速度等。

中斷處理函數:usbh_port_handler

poYBAGPCGemAdbJSAAIqz4dfpOo907.png

設備斷開連接中斷處理

當連接的設備斷開是,會產生斷開連接中斷。

中斷處理函數:usbh_disconnect_handler

代碼:

3fda294e-934b-11ed-bfe3-dac502259ad0.png

USB主機枚舉處理

USB主機狀態機在usbh_loop_handler函數中處理,對應的主機狀態機uhost->global_state,如下圖是設備連接到主機的狀態處理流程:

圖8 設備連接狀態機流程

pYYBAGPCGeqAedtxAADPB8920Ng011.png

USBH_IDLE:當USB啟動或者設備斷開連接之后在此狀態

USBH_PORT_EN:USB主機端口使能之后在此狀態

USBH_ATTACHED:USB設備連接穩定之后

USBH_ENUMERATION:USB設備標準的枚舉流程

USBH_USER_HANDLER:枚舉完成之后,調用主機類的初始化函數

USBH_CLASS_REQUEST:主機類初始化完成之后,進行主機類請求

USBH_CLASS:所有枚舉完成,進行正常的數據處理。

USB主機枚舉流程

當設備接到主機之后,通過控制端點(端點0)進行枚舉動作,USB主機的枚舉狀態如下:

4029d7e6-934b-11ed-bfe3-dac502259ad0.png

如下是主機枚舉的狀態機流程:

圖9 USB主機枚舉流程

poYBAGPCGemALC-AAAEh3jWDVoc133.png

ENUM_GET_MIN_DESC:獲取8字節設備描述

ENUM_GET_FULL_DESC:獲取18字節設備描述

ENUM_SET_ADDR:設置設備地址

ENUM_GET_CFG:獲取9字節配置描述

ENUM_GET_FULL_CFG:獲取完整的配置描述

ENUM_GET_MFC_STRING:獲取設備廠商信息

ENUM_GET_PRODUCT_STRING:獲取設備產品信息

ENUM_GET_SERIALNUM_STRING:獲取設備序列號信息

ENUM_SET_CONFIG:設置配置

ENUM_COMPLETE:枚舉完成

USB控制傳輸過程包含SETUP-DATA-STATUS三個階段,如下是一個主機獲取設備信息的傳輸過程GET_DESCRIPTOR:

圖10 獲取描述符

poYBAGPCGemAbp_KAALyieWrtAM860.png

如下是USB主機庫一個SETUP-DATA-STATUS函數調用流程:

圖11 USB主機SETUP函數調用

poYBAGPCGemAVsrtAAClR2qRLKQ661.png

usbh_ctrl_transfer_loop函數中斷對控制請求的各個狀態階段進行處理:

控制請求狀態機:

poYBAGPCGeqACl07AAGKan53f-8701.png

圖12 控制請求處理流程

pYYBAGPCGeqAQfufAAHp0pVDoJQ041.png

USB主機類初始化

在USB標準枚舉完成之后,會調用USB主機類的初始化,在初始化函數中解析當前枚舉的設備是否支持,調用函數uhost->class_handler->init_handler(uhost)。

初始化代碼例:

pYYBAGPCGeqAeSWdAANPFeA8_HE302.png

USB主機類請求

USB主機類初始化之后,可以發送主機類控制請求,根據不同的設備類,需要實現不同的設備類請求。 調用函數uhost->class_handler->request_handler((void*)uhost);

主機類請求例:

pYYBAGPCGeqAOWhEAAIgaGEtjsY303.png

USB主機數據處理

所有枚舉完成之后,將進行主機數據處理

主機數據處理例:

poYBAGPCGeqAXomsAAIz4vO6FBU200.png

USB主機類型例程

本章將說明使用AT32 USB主機庫實現不同的主機類型的例程。 目前實現的主機類例程如下:

隱藏(鼠標,鍵盤)

大容量存儲(msc_only_fat32)

two_otg_host_demo(僅AT32F435/437支持)

HID例程

HID類支持鼠標和鍵盤設備,開發者可修改此例程用以實現支持其它HID類設備。

HID類:

4218eede-934b-11ed-bfe3-dac502259ad0.png

HID類例程初始化

當USB設備標準枚舉完成之后,會進行初始化,調用uhost_init_handler, 調用此函數將解析接到主機上的設備類型,是鼠標還是鍵盤或者其它設備。

通過設備的配置描述信息進行如下流程解析:

查找HID接口

判斷接口是鼠標還是鍵盤

查找對應接口的端點號

初始化對應通道

代碼如下:

poYBAGPCGeqAYjPCAANPmGMn9c8574.png

HID類請求

HID類請求實現一些HID設備的標準請求,調用函數uhost_request_handler

SET_IDLE

SET_PROTOCOL

GET_REPORT

代碼如下:

poYBAGPCGeqAFjE1AAIgDGgtepU537.png

HID****類數據處理

HID枚舉設置完成之后,USB主機可以請求設備數據,通過調用uhost_process_handler來處理。

通過usbh_interrupt_recv函數給設備發送IN請求

通過usbh_get_urb_status(puhost, phid->chin); 獲取IN請求的狀態

通過phid->in_poll判斷多長時間發送一次IN請求

通過phid->protocol判斷是鼠標還是鍵盤

代碼如下:

pYYBAGPCGemABjTjAAIx4pg9MMU705.png

MSC例程

msc_only_fat32實現一個簡單的mass storage主機類,僅支持FAT32格式。

MSC類:

42d238ee-934b-11ed-bfe3-dac502259ad0.png

MSC 類初始化

當USB設備標準枚舉完成之后,會進行初始化,調用uhost_init_handler,調用此函數將解析接到主機上的設備類型,判斷是否是MSC類型。

通過設備的配置描述信息進行如下流程解析:

查找MSC接口

查找對應接口的端點號

初始化對應通道

初始化bulk-only和SCSI狀態機

代碼如下:

42ec0846-934b-11ed-bfe3-dac502259ad0.png

MSC類請求

MSC類請求實現一些MSC設備的標準請求,調用函數uhost_request_handler

GET_MAX_LUN

代碼如下:

pYYBAGPCGemASFiLAAIBxVAZTy0606.png

MSC類數據處理

HID枚舉設置完成之后,USB主機可以請求設備數據,通過調用uhost_process_handler來處理。

實現如下命令:

查詢

TEST_UNIT_READY

READ_CAPACITY10

REQUEST_SENSE

代碼如下:

poYBAGPCGeqASnnsAATE6wP31UI178.png

MSC讀寫數據

MSC讀寫數據在通過FATFS接口進行實現,在usbh_msc_diskio.c中實現讀寫函數。

讀函數:

pYYBAGPCGemAPac7AACwdLvP8-A457.png

寫函數:

43ae30c4-934b-11ed-bfe3-dac502259ad0.png

CDC例程

cdc實現一個簡單的虛擬串口類。

CDC類:

43c9ea3a-934b-11ed-bfe3-dac502259ad0.png

CDC類例程初始化

當USB設備標準枚舉完成之后,會進行初始化,調用uhost_init_handler, 調用此函數將解析接到主機上的設備類型。

通過設備的配置描述信息進行如下流程解析:

查找CDC接口

判斷接口是否為虛擬串口

查找對應接口的端點號

初始化對應通道

代碼如下:

43dfb892-934b-11ed-bfe3-dac502259ad0.png

CDC類請求

CDC類請求實現一些CDC設備的標準請求,調用函數uhost_request_handler

GET_LINECODING

代碼如下:

poYBAGPCGemAW50gAAB0jJKksv4010.png

CDC類數據處理

CDC枚舉設置完成之后,USB主機可以請求設備數據,通過調用uhost_process_handler來處理。

通過set_linecoding和get_linecoding配置linecoding

通過cdc_process_reception(puhost)函數給設備發送IN請求

通過cdc_process_transmission(puhost)函數發送數據給設備

代碼如下:

441a1d84-934b-11ed-bfe3-dac502259ad0.png

two_otg_host_demo例程

AT32F435/437存在兩個OTGFS,此例程說明同時使用兩個OTGFS實現兩個host功能。

實現功能:

OTGFS1實現MSC主機(參考MSC例程)

OTGFS2實現HID主機(參考HID例程)

配置與實現

在usb_conf.h中配置OTGFS1和OTGFS2:

pYYBAGPCGeqAe7UsAAWCozQX2p8715.png

在main中初始化:

pYYBAGPCGemAM8BZAAIMqWI16Z8295.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17002

    瀏覽量

    350335
  • 接口
    +關注

    關注

    33

    文章

    8512

    瀏覽量

    150850
  • usb
    usb
    +關注

    關注

    60

    文章

    7900

    瀏覽量

    264016
  • 主機
    +關注

    關注

    0

    文章

    985

    瀏覽量

    35068
  • AT32
    +關注

    關注

    1

    文章

    113

    瀏覽量

    2078

原文標題:AT32講堂043 | 如何使用AT32 MCU主機庫快速開發USB相關應用

文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    MCU USB主機相關資料下載

    MCU USB主機
    發表于 11-03 07:31

    AT32 MCU USB主機庫應用說明

    AT32 MCU USB Host Library Application Note主要描述AT32F4xx 系列USB 主機庫的架構和使用
    發表于 10-25 07:02

    AT32 MCU USB設備庫應用說明

    AT32 MCU USB Device Library Application Note主要描述AT32F4xx 系列USB 設備庫的架構和使用方法,方便
    發表于 10-25 07:07

    使用Arduino IDE搭建AT32 MCU開發環境

    使用Arduino IDE搭建AT32 MCU開發環境旨在幫助使用Arduino IDE開發AT32的用戶,
    發表于 10-26 07:48

    帶VSCode EIDE的AT32 MCU

    AT32 MCU With VSCode EIDE描述了VSCode開發環境中,使用Embedded IDE管理AT32項目。
    發表于 10-26 07:38

    OTG IP主機庫介紹(上)

    STM32單片機的OTG IP主機庫介紹(上)
    發表于 11-25 14:50 ?0次下載

    介紹OTG IP主機庫的特點(1)

    OTG IP主機庫介紹(上)
    的頭像 發表于 07-02 12:39 ?3485次閱讀

    MCU USB主機

    MCU USB主機
    發表于 10-28 14:05 ?2次下載
    <b class='flag-5'>MCU</b> <b class='flag-5'>USB</b><b class='flag-5'>主機</b>

    雅特力AT32 MCU USB設備庫的架構和使用方法

    這部分主要介紹AT32 USB設備庫的結構和庫的使用方法,AT32 USB是基于USB2.0全速設備,不支持
    的頭像 發表于 02-22 10:09 ?2087次閱讀

    AT32講堂043 | 如何使用AT32 MCU主機庫快速開發USB相關應用

    開發者能夠更快的上手開發USB主機庫包含以下幾個模塊如圖1:用戶應用程序此部分為開發者根據應用具體需求
    的頭像 發表于 01-16 11:05 ?2075次閱讀
    <b class='flag-5'>AT32</b>講堂043 | 如何使用<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b><b class='flag-5'>主機庫</b><b class='flag-5'>快速</b><b class='flag-5'>開發</b><b class='flag-5'>USB</b><b class='flag-5'>相關</b>應用

    如何使用AT32 MCU WDT和WWDT?

    如何使用AT32 MCU WDT和WWDT?
    的頭像 發表于 11-10 18:26 ?1944次閱讀
    如何使用<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> WDT和WWDT?

    關于AT32 MCU溫度傳感器的應用

    關于AT32 MCU溫度傳感器的應用
    的頭像 發表于 10-27 09:44 ?690次閱讀
    關于<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>溫度傳感器的應用

    AT32 MCU如何使用USB MSD 進行IAP升級?

    AT32 MCU如何使用USB MSD 進行IAP升級?
    的頭像 發表于 10-27 09:23 ?1098次閱讀
    <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>如何使用<b class='flag-5'>USB</b> MSD 進行IAP升級?

    AT32 MCU Develop with VSCode

    電子發燒友網站提供《AT32 MCU Develop with VSCode.pdf》資料免費下載
    發表于 09-19 15:22 ?2次下載
    <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> Develop with VSCode

    STM32Cube USB主機庫

    電子發燒友網站提供《STM32Cube USB主機庫 .pdf》資料免費下載
    發表于 09-21 14:40 ?0次下載
    STM32Cube <b class='flag-5'>USB</b><b class='flag-5'>主機庫</b>