国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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
    +關注

    關注

    147

    文章

    18924

    瀏覽量

    398052
  • usb
    usb
    +關注

    關注

    60

    文章

    8438

    瀏覽量

    284454
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AT32F011 系列快速使用指南

    1.1.4 小節用于介紹 AT32 Work Bench 使用。AT32 Work Bench 通過對 MCU 的圖形化配置,生成 初始化 C 代碼和對應 IDE 項目,以減少開發
    發表于 03-02 11:27

    AT32硬件除法器應用指南

    AT32硬件除法器應用指南 AT32F011 提供了 32 位硬件除法器,并且可以執行無符號及有符號運算,本應用指南將介紹基礎概念及實際案例。 支持型號: AT32F011 系列 1. AT32
    發表于 01-30 13:49

    如何使用AT32 EdgeAI Sensor EV Board

    AT32 EdgeAI Sensor EV Board隨著邊緣人工智能(EdgeAI)的興起,為了便于用戶在AT32系列芯片上進行 EdgeAI開發,Artery 提供了一塊包含多種 EdgeAI
    發表于 01-30 13:44

    AT32開源鴻蒙開發環境搭建

    本帖最后由 jf_77210199 于 2026-1-19 09:49 編輯 AT32開源鴻蒙開發環境搭建 主要介紹兩部分內容: 1、如何快速搭建起開源鴻蒙的開發環境。 2、如
    發表于 01-16 13:56

    擺脫主機束縛:SCP4000 USB射頻微波功率計如何便攜的體驗功率測量

    SCP4000系列是盛鉑科技自主開發的自帶USB 接口的袖珍式CW 信號平均功率計,可快速執行4kHz至40GHz頻率范圍和-60dBm至+20dBm動態范圍的設置和測量,而無需使用功率計主機
    的頭像 發表于 01-10 11:20 ?814次閱讀
    擺脫<b class='flag-5'>主機</b>束縛:SCP4000 <b class='flag-5'>USB</b>射頻微波功率計如何便攜的體驗功率測量

    國產MCU替代優選!雅特力AT32系列憑高性能+高兼容,橫掃工控/消費/AIoT多場景

    在國產化替代加速背景下,雅特力AT32系列MCU成工程師優選。該系列基于ARM Cortex-M4/M0+內核,具備高主頻、豐富外設及工業級可靠性,關鍵性能對標國際一線品牌。核心優勢在于與STM32
    的頭像 發表于 01-07 17:15 ?1231次閱讀

    快速上手FRDM-KE17Z512開發板:開啟高效MCU開發之旅

    快速上手FRDM-KE17Z512開發板:開啟高效MCU開發之旅 作為電子工程師,在MCU開發
    的頭像 發表于 12-24 16:50 ?335次閱讀

    雅特力AT32 MCU推動低空經濟發展

    雅特力AT32系列MCU憑借288MHz主頻與高精度外設,為無人機飛控、電調及云臺提供核心算力支持,實現厘米級定位與高效動力控制,顯著提升在電力巡檢、農林植保等低空經濟場景下的作業精度與可靠性,助力產業智能化升級。
    的頭像 發表于 12-04 09:53 ?1662次閱讀
    雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>推動低空經濟發展

    SPI主機/從機接收發送都開啟DMA通信

    AT32_SPI主機/從機接收發送都開啟DMA通信 示例目的 本示例代碼展示了如何使用 AT32 的 DMA 進行 SPI 數據傳輸。SPI 作為主機時,接收和發送同時開啟 DMA 進行數據接收
    發表于 09-10 16:56

    AT32 MCU如何使用IAP

    AT32 MCU使用IAP的方法涉及在微控制器上創建特定固件,以實現在應用編程(In-Application Programming,簡稱IAP)功能,主要通過USART通信接口進行固件更新操作
    發表于 08-08 17:13

    AT32 IAP using the USART

    對于AT32 MCU,除了出廠固化的bootloader,用戶也可以在應用程序中編寫自己的bootloader程序,用于最終產品的固件更新。此功能稱為應用程序內編程(IAP)。 本應用筆記的目的
    發表于 07-11 10:51

    AT32的ERTC與RTC的區別

    AT32單片機系列中包含兩種實時時鐘(RTC)模塊:標準的RTC和增強型RTC(ERTC)。以下是兩者的區別: 功能豐富性 RTC :提供基本的計數功能,以秒為單位遞增,范圍從0x00000000到
    發表于 07-11 10:48

    雅特力AT32 OTGHS應用筆記

    OTGHS介紹本章將描述OTGHS支持的一些基本功能。圖1.OTGHS框圖OTGHS特性OTGHS通用特性:支持USB2.0協議內置獨立4096字節SRAM內置USB2.0高速PHY內置上下拉電阻
    的頭像 發表于 03-28 18:59 ?998次閱讀
    雅特力<b class='flag-5'>AT32</b> OTGHS應用筆記

    雅特力AT32F402/F405入門使用指南

    搭建AT32開發環境一、調試工具及開發板目前AT32F402/AT32F405開發板都自帶AT-Link-EZ調試工具,AT-Link-EZ如下圖左邊紅框所示,它也可拆開后單獨搭配其他
    的頭像 發表于 03-28 18:59 ?2886次閱讀
    雅特力AT32F402/F405入門使用指南

    雅特力AT32 Workbench煥“芯”升級!引入Middleware助力開發高效提速

    近日,雅特力AT32Workbench開發工具完成重大更新升級,新增對MiddlewareFreeRTOS,以及MiddlewaresUSB_DEVICE和USB_HOST的支持。此次升級致力于深度
    的頭像 發表于 03-07 18:46 ?947次閱讀
    雅特力<b class='flag-5'>AT32</b> Workbench煥“芯”升級!引入Middleware助力<b class='flag-5'>開發</b>高效提速