色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

雅特力 AT32 MCU ? 2023-01-16 11:05 ? 次閱讀

AT32 USB主機協議庫

這部分主要介紹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主機庫結構2bfc3e84-9419-11ed-ad0d-dac502259ad0.png

AT32 USB庫文件

如下是AT32 USB應用工程結構圖:圖2. AT32工程結構2c0b85f6-9419-11ed-ad0d-dac502259ad0.pngCore Driver庫路徑:OTGFS-->middlewares\usb_driversHost Class庫路徑:middlewares\usbh_class如下是USB主機庫文件列表:表1. USB主機庫文件列表2c2aa4b8-9419-11ed-ad0d-dac502259ad0.png表2. USB主機類文件列表2c429b0e-9419-11ed-ad0d-dac502259ad0.png

USB主機庫文件說明

USB庫實現USB主機枚舉標準請求,同時實現USB規格里面的4種傳輸類型(control,interrupt,bulk,isochronous)的函數接口。圖3 USB主機庫文件結構2c611dc2-9419-11ed-ad0d-dac502259ad0.png

USB主機文件函數接口

usbh_int.c函數接口usbh_int.c主要處理底層中斷,包括設備連接,設備斷開等。表3 usbh_int函數接口2c91da02-9419-11ed-ad0d-dac502259ad0.pngusbh_core.c函數接口usbh_core.c此文件封裝不同的usb主機函數接口用于不同的地方調用,包括一些接收,發送函數等。表4 usbh_core函數接口2cb0c5d4-9419-11ed-ad0d-dac502259ad0.pngusbh_ctrl.c函數接口usbh_ctrl.c此文件處理USB主機枚舉過程中的一些標準請求。表5 usbh_ctrl函數接口2cbe4e84-9419-11ed-ad0d-dac502259ad0.png支持的標準設備請求如下表:表6 標準設備請求2ce1ff3c-9419-11ed-ad0d-dac502259ad0.pngusbh_xx_class.c函數接口usbh_xx_class.c此文件為具體主機類型的數據處理,通過結構體函數來實現不同主機類型數據的處理。開發者根據不同的主機類型,來實現下面函數結構體中的函數,達到不同應用結果。函數結構體如下:表7 主機class函數結構體2d0c3b76-9419-11ed-ad0d-dac502259ad0.png表8 主機class函數接口2d27eeca-9419-11ed-ad0d-dac502259ad0.pngusbh_user.c函數接口usbh_user.c此文件主要為一些給用戶處理事件的函數如復位,斷開連接等。表9 用戶事件函數結構體2d346916-9419-11ed-ad0d-dac502259ad0.png表10 用戶函數接口函數2d4e8ed6-9419-11ed-ad0d-dac502259ad0.png其它參數函數的參數結構體如下,USB主機庫中參數傳遞使用結構體usbh_core_type,如下圖:圖4 全局結構體2d81047e-9419-11ed-ad0d-dac502259ad0.pngUSB主機的狀態機如下圖:圖5 USB主機狀態機2da7701e-9419-11ed-ad0d-dac502259ad0.pngUSB返回值,USB函數接口使用如下函數返回值。圖6 函數返回值2dc321b0-9419-11ed-ad0d-dac502259ad0.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例程為例:2dd82600-9419-11ed-ad0d-dac502259ad0.png

USB主機初始化

在使用USB主機功能時,需要對USB的寄存器做一些基本的初始化,通過調用USB主機的初始化函數完成這部分的操作。OTGFS外設初始化OTGFS初始化函數usbd_init包含5個參數:2dee41a6-9419-11ed-ad0d-dac502259ad0.png例程主機hid_demo的初始化如下:2e0e61d4-9419-11ed-ad0d-dac502259ad0.png

USB主機中斷處理

USB主機中斷入口函數usbh_irq_handler處理所有USB主機中斷,包括連接狀態,通道收發數據,SOF,喚醒等中斷,下面介紹一些典型的中斷處理。圖7 USB主機中斷處理函數2e265ce4-9419-11ed-ad0d-dac502259ad0.png通道中斷處理當USB主機與設備進行通信時,通道的收發狀態都在通道中斷中處理,通道的方向分為IN和OUT通過通道寄存器中的方向為進行判斷。中斷處理函數:usbh_hch_handler代碼如下:2e5682a2-9419-11ed-ad0d-dac502259ad0.pngWakeup 中斷處理當USB主機在掛起狀態時,檢測到設備觸發的遠程喚醒信號,將產生此中斷。此中斷會將當前主機狀態改為WAKEUP狀態:中斷處理函數:usbh_wakeup_handler代碼如下:2e7aae84-9419-11ed-ad0d-dac502259ad0.png接收FIFO非空中斷此中斷表示當前接收FIFO有數據,應用程序通過此中斷讀出接收到的數據,并存放到對應通道的FIFO當中,當數據讀取完成之后,會產生對應的通道的中斷。中斷處理函數:usbh_rx_qlvl_handler代碼如下:2e91bf48-9419-11ed-ad0d-dac502259ad0.png主機端口中斷處理當USB主機斷開發生狀態改變時,會產生端口中斷,應用程序通過此中斷判斷連接設備的速度等。中斷處理函數:usbh_port_handler2ec54eb2-9419-11ed-ad0d-dac502259ad0.png設備斷開連接中斷處理當連接的設備斷開是,會產生斷開連接中斷。中斷處理函數:usbh_disconnect_handler代碼:2ee67862-9419-11ed-ad0d-dac502259ad0.png

USB主機枚舉處理

USB主機狀態機在usbh_loop_handler函數中處理,對應的主機狀態機uhost->global_state,如下圖是設備連接到主機的狀態處理流程:圖8 設備連接狀態機流程2ef96a4e-9419-11ed-ad0d-dac502259ad0.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主機的枚舉狀態如下:2f246668-9419-11ed-ad0d-dac502259ad0.png如下是主機枚舉的狀態機流程:圖9 USB主機枚舉流程2f4a8ef6-9419-11ed-ad0d-dac502259ad0.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:SET CONFIGURE
  • ENUM_COMPLETE:枚舉完成

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

圖10 Get Descriptor2f832d60-9419-11ed-ad0d-dac502259ad0.png如下是USB主機庫一個SETUP-DATA-STATUS函數調用流程:圖11 USB主機SETUP函數調用2fa394a6-9419-11ed-ad0d-dac502259ad0.pngusbh_ctrl_transfer_loop函數中斷對控制請求的各個狀態階段進行處理:控制請求狀態機:2fc051ea-9419-11ed-ad0d-dac502259ad0.png圖12 控制請求處理流程2fdf8a7e-9419-11ed-ad0d-dac502259ad0.pngUSB主機類初始化在USB標準枚舉完成之后,會調用USB主機類的初始化,在初始化函數中解析當前枚舉的設備是否支持,調用函數uhost->class_handler->init_handler(uhost)。初始化代碼例:300d84a6-9419-11ed-ad0d-dac502259ad0.pngUSB主機類請求USB主機類初始化之后,可以發送主機類控制請求,根據不同的設備類,需要實現不同的設備類請求。調用函數uhost->class_handler->request_handler((void*)uhost);主機類請求例:30642ad6-9419-11ed-ad0d-dac502259ad0.pngUSB主機數據處理所有枚舉完成之后,將進行主機數據處理主機數據處理例:3091ca36-9419-11ed-ad0d-dac502259ad0.png

USB主機類型例程

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

  • hid(mouse,keyboard)
  • mass storage(msc_only_fat32)
  • two_otg_host_demo(僅AT32F435/437支持)

HID例程

HID類支持鼠標和鍵盤設備,開發者可修改此例程用以實現支持其它HID類設備。HID類:309e486a-9419-11ed-ad0d-dac502259ad0.pngHID類例程初始化當USB設備標準枚舉完成之后,會進行初始化,調用uhost_init_handler,調用此函數將解析接到主機上的設備類型,是鼠標還是鍵盤或者其它設備。通過設備的配置描述信息進行如下流程解析:

  • 查找HID接口
  • 判斷接口是鼠標還是鍵盤
  • 查找對應接口的端點號
  • 初始化對應通道

代碼如下:

30be888c-9419-11ed-ad0d-dac502259ad0.pngHID類請求HID類請求實現一些HID設備的標準請求,調用函數uhost_request_handler

  • SET_IDLE
  • SET_PROTOCOL
  • GET_REPORT

代碼如下:

30ced458-9419-11ed-ad0d-dac502259ad0.pngHID類數據處理HID枚舉設置完成之后,USB主機可以請求設備數據,通過調用uhost_process_handler來處理。

  • 通過usbh_interrupt_recv函數給設備發送IN請求
  • 通過usbh_get_urb_status(puhost, phid->chin); 獲取IN請求的狀態
  • 通過phid->in_poll判斷多長時間發送一次IN請求
  • 通過phid->protocol判斷是鼠標還是鍵盤

代碼如下:

30e4029c-9419-11ed-ad0d-dac502259ad0.png

MSC例程

msc_only_fat32實現一個簡單的mass storage主機類,僅支持FAT32格式。MSC類:3103776c-9419-11ed-ad0d-dac502259ad0.pngMSC 類初始化當USB設備標準枚舉完成之后,會進行初始化,調用uhost_init_handler,調用此函數將解析接到主機上的設備類型,判斷是否是MSC類型。通過設備的配置描述信息進行如下流程解析:

  • 查找MSC接口
  • 查找對應接口的端點號
  • 初始化對應通道
  • 初始化bulk-only和SCSI狀態機

代碼如下:

31191efa-9419-11ed-ad0d-dac502259ad0.pngMSC類請求MSC類請求實現一些MSC設備的標準請求,調用函數uhost_request_handler

  • GET_MAX_LUN

代碼如下:

314c23ea-9419-11ed-ad0d-dac502259ad0.pngMSC類數據處理HID枚舉設置完成之后,USB主機可以請求設備數據,通過調用uhost_process_handler來處理。實現如下命令:

  • INQUIRY
  • TEST_UNIT_READY
  • READ_CAPACITY10
  • REQUEST_SENSE

代碼如下:

31661444-9419-11ed-ad0d-dac502259ad0.pngMSC讀寫數據MSC讀寫數據在通過FATFS接口進行實現,在usbh_msc_diskio.c中實現讀寫函數。讀函數:31c74bce-9419-11ed-ad0d-dac502259ad0.png寫函數:31ebfd5c-9419-11ed-ad0d-dac502259ad0.png

CDC例程

cdc實現一個簡單的虛擬串口類。CDC類:3218514a-9419-11ed-ad0d-dac502259ad0.pngCDC類例程初始化當USB設備標準枚舉完成之后,會進行初始化,調用uhost_init_handler,調用此函數將解析接到主機上的設備類型。通過設備的配置描述信息進行如下流程解析:

  • 查找CDC接口
  • 判斷接口是否為虛擬串口
  • 查找對應接口的端點號
  • 初始化對應通道

代碼如下:

32375eaa-9419-11ed-ad0d-dac502259ad0.pngCDC類請求CDC類請求實現一些CDC設備的標準請求,調用函數uhost_request_handler

  • GET_LINECODING

代碼如下:

326f7a92-9419-11ed-ad0d-dac502259ad0.pngCDC類數據處理CDC枚舉設置完成之后,USB主機可以請求設備數據,通過調用uhost_process_handler來處理。

  • 通過set_linecoding和get_linecoding配置linecoding
  • 通過cdc_process_reception(puhost)函數給設備發送IN請求
  • 通過cdc_process_transmission(puhost)函數發送數據給設備

代碼如下:

3284cadc-9419-11ed-ad0d-dac502259ad0.png

two_otg_host_demo例程

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

  • 實現功能:

OTGFS1實現MSC主機(參考MSC例程)OTGFS2實現HID主機(參考HID例程)配置與實現在usb_conf.h中配置OTGFS1和OTGFS2:32c1bf64-9419-11ed-ad0d-dac502259ad0.png在main中初始化:33270270-9419-11ed-ad0d-dac502259ad0.png

關于雅特力雅特力科技于2016年成立,是一家致力于推動全球市場32位微控制器(MCU)創新趨勢的芯片設計公司,專注于ARM Cortex-M4/M0+的32位微控制器研發與創新,全系列采用55nm先進工藝及ARM Cortex-M4高效能或M0+低功耗內核,締造M4業界最高主頻288MHz運算效能,并支持工業級別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當多元的終端產品成功案例:如微型打印機、掃地機、光流無人機、熱成像儀、激光雷達、工業縫紉機、伺服驅控、電競周邊市場、斷路器、ADAS、T-BOX、數字電源、電動工具等終端設備應用,廣泛地覆蓋5G物聯網、消費、商務及工控等領域。

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

    關注

    146

    文章

    17174

    瀏覽量

    351660
  • usb
    usb
    +關注

    關注

    60

    文章

    7959

    瀏覽量

    265052
收藏 人收藏

    評論

    相關推薦

    DVEVM上的主機USB支持

    電子發燒友網站提供《DVEVM上的主機USB支持.pdf》資料免費下載
    發表于 10-15 10:04 ?0次下載
    DVEVM上的<b class='flag-5'>主機</b><b class='flag-5'>USB</b>支持

    STM32轉AT32代碼轉換

    GD32等等。本文主要介紹一款ST32轉AT32的工具AT32SmartCodeTransfer.exe,可以快速實現芯片的更換,提高開發效率。1.1.軟件功能本軟
    的頭像 發表于 09-28 08:09 ?346次閱讀
    STM32轉<b class='flag-5'>AT32</b>代碼轉換

    usb主機控制器無法啟動怎么解決

    USB主機控制器無法啟動是一個常見的問題,它可能會阻止你使用USB設備。解決這個問題需要對USB主機控制器、驅動程序、系統設置和硬件故障有一
    的頭像 發表于 09-25 09:10 ?880次閱讀

    usb主機模式怎么打開

    USB主機模式(USB Host Mode)是指設備(如智能手機、平板電腦或某些類型的計算機)能夠連接到USB設備(如鍵盤、鼠標、存儲設備等),并作為
    的頭像 發表于 09-25 09:08 ?1459次閱讀

    usb主機模式和設備模式的區別

    USB(通用串行總線)是一種廣泛使用的接口技術,用于連接計算機和外部設備。USB主機模式和設備模式是USB通信中的兩種不同角色,它們定義了設備和計算機之間的通信方式。以下是對這兩種模式
    的頭像 發表于 09-25 09:06 ?932次閱讀

    AT32講堂088 | 雅特力AT32F402/F405時鐘配置

    簡介時鐘是芯片正確高效運行的基礎,正確的時鐘配置是芯片能正確運行的必要條件,其重要性不言而喻。AT32各系列產品的時鐘配置部分可能存在細微的差異和需要注意的事項,本文檔就著重針對各系列的情況來詳細
    的頭像 發表于 09-15 08:08 ?539次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>088 | 雅特力AT32F402/F405時鐘配置

    AT32講堂087 | 雅特力AT32 IDE快速入門指南

    新建項目新項目向導AT32ID提供支持雅特力MCU的C語言項目模板,方便用戶快速創建項目。菜單欄【File】>【New】>【CProject】。新建項目向導的對話框將出現。在對
    的頭像 發表于 09-15 08:08 ?483次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>087 | 雅特力<b class='flag-5'>AT32</b> IDE<b class='flag-5'>快速</b>入門指南

    AT開發工具實用教程

    本文主要介紹AT32相關的圖形化配置工具,通過對MCU的圖形化配置,生成初始化C代碼和對應IDE項目,以減少開發人員的工作量、時間和成本。一、AT32WorkBenchAT32Work
    的頭像 發表于 08-30 13:22 ?387次閱讀
    AT<b class='flag-5'>開發</b>工具實用教程

    雅特力AT32 MCU的隨機數生成

    概述產品和生態系統安全性的需求比以往任何時候都更加重要。真隨機數是所有安全系統的核心,其質量會影響設計的安全性。因此在沒有內置硬件TRNG的AT32的微控制器系列中,如何提高隨機數的有效,來符合
    的頭像 發表于 08-30 12:26 ?627次閱讀
    雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>的隨機數生成

    AT32講堂085 | 雅特力AT32 MCU HICK時鐘校準

    簡介AT32系列MCU內部都有提供適合運行的內部高速時鐘(HICK),其本質就是內置于芯片的RC振蕩器。在25℃下,其典型值頻率8MHz的精度由工廠校準到±1%,在-40到105℃,該內部高速時鐘
    的頭像 發表于 08-30 12:26 ?661次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>085 | 雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> HICK時鐘校準

    如何在雅特力AT32 MCU上創建IAP應用程序

    概述AT32CANIAP快速使用方法使用CAN進行IAP升級,此示例使用PC上位軟件(IAP_Programmer.exe)通過一個USB轉CAN的橋接設備和目標板進行通信,IAPDemo和橋接設備
    的頭像 發表于 05-20 08:15 ?1161次閱讀
    如何在雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>上創建IAP應用程序

    USB嵌入式主機堆棧

    USB標準下,USB設備之間不能直接通信。它們只能與控制一個或多個設備通信的總線的 USB 主機通信。常見的 USB
    發表于 05-03 09:13 ?199次閱讀
    <b class='flag-5'>USB</b>嵌入式<b class='flag-5'>主機</b>堆棧

    想用ST MC電機庫進行BLDC開發,電機無法快速切換正反轉怎么解決?

    想用ST MC電機庫進行BLDC開發,實際要求電機可以快速切換正反轉,但實際實驗過程中卻無法實現,兩方向切換過程中必須要延時一些時間,否則反向無法正常啟動。感覺就像是要“緩一下”才行,但這緩 的時間
    發表于 04-18 06:46

    雅特力AT32 MCU與SEGGER攜手合作,開發量產事半功倍

    近日,雅特力與SEGGER共同宣布J-Link仿真調試器與Flasher在線燒錄器全面支持AT32 MCU產品,SEGGER工具鏈的加持使AT32 MCU
    的頭像 發表于 02-23 10:27 ?436次閱讀

    雅特力AT32 MCU與SEGGER攜手合作,開發量產事半功倍

    近日,雅特力與SEGGER共同宣布J-Link仿真調試器與Flasher在線燒錄器全面支持AT32MCU產品,SEGGER工具鏈的加持使AT32MCU開發如虎添翼。雅特力自2018年對外銷售以來
    的頭像 發表于 02-22 08:13 ?500次閱讀
    雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>與SEGGER攜手合作,<b class='flag-5'>開發</b>量產事半功倍
    主站蜘蛛池模板: 国产高清亚洲日韩字幕一区| 久啪久久全部视频在线| 欧美亚洲国产免费高清视频| writeas雷狮直播| 色噜噜狠狠色综合欧洲| 国产精品成人免费视频99| 性高跟鞋xxxxhd| 久久精品伊人| 草699一码二码三码四码| 小黄文纯肉短篇| 老师的玉足高跟鞋满足我| 纯肉高H啪短文合集| 亚洲精品视频在线播放| 免费中文字幕视频| 国产精品…在线观看| 亚洲呦女专区| 日本久久精品免视看国产成人| 国产日韩欧美有码在线视频| 又长又大又粗又硬3p免费视频| 欧美亚洲另类图片| 国产在线精品亚洲| 99热久久视频只有精品6| 午夜剧场1000| 农民工老头在出租屋嫖老熟女| 国产精品69人妻无码久久久| 中文字幕无码他人妻味| 手机在线亚洲日韩国产| 老女老肥熟国产在线视频| 国产成人精品免费视频下载| 做a爱片的全过程| 性欧美video另类hd高清| 欧美gv明星| 精品淑女少妇AV久久免费| 成人啪啪色婷婷久色社区| 亚洲一区二区女搞男| 色戒西瓜视频| 美女被爆插| 国产又粗又猛又爽黄老大爷| 办公室沙发口爆12P| 中国bdsmchinesehd| 亚洲、国产综合视频|