一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內(nèi)不再提示

雅特力AT32 MCU USB設備庫的架構(gòu)和使用方法

0739hhbb ? 來源:AT32 MCU 雅特力科技 ? 2023-02-22 10:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AT32 USB設備協(xié)議庫

這部分主要介紹AT32 USB設備庫的結(jié)構(gòu)和庫的使用方法,AT32 USB是基于USB2.0全速設備,不支持USB2.0高速設備。這里庫的作用是用來管理USB外設和實現(xiàn)USB的基本協(xié)議,使開發(fā)者能夠更快的上手開發(fā)。USB Deivce庫包含以下幾個模塊如圖1:
  • 用戶應用程序

    此部分為開發(fā)者根據(jù)應用具體需求開發(fā)應用程序。

  • USB Core Driver和USB設備類

    USB Core Driver:此部分實現(xiàn)USB設備標準協(xié)議棧,標準請求等接口。

    USB設備類:此部分實現(xiàn)一個具體USB設備的描述和設備請求。

  • USB硬件底層接口

    此部分實現(xiàn)硬件寄存器抽象接口

  • USB/OTG外設

圖1. USB庫結(jié)構(gòu)f9323596-b216-11ed-bfe3-dac502259ad0.png ? ?

AT32 USB庫文件

如下是AT32 USB應用工程結(jié)構(gòu)圖:圖2. AT32工程結(jié)構(gòu)f943cee6-b216-11ed-bfe3-dac502259ad0.pngCore Driver庫路徑:OTGFS-->middlewaresusb_driversUSBFS-->middlewaresusbd_driversDevice Class庫路徑:middlewaresusbd_class如下是USB庫文件列表:表1. USB庫文件列表f96d1f62-b216-11ed-bfe3-dac502259ad0.png表2. USB設備類型文件列表f9962538-b216-11ed-bfe3-dac502259ad0.png ?

USB設備庫文件說明

USB庫實現(xiàn)USB設備標準請求,同時實現(xiàn)USB規(guī)格里面的4種傳輸類型(control,interrupt,bulk,isochronous)的函數(shù)接口。圖3.USB庫文件結(jié)構(gòu)f9d3e382-b216-11ed-bfe3-dac502259ad0.png ?

USB設備文件函數(shù)接口

usbd_int.c函數(shù)接口usbd_int.c主要處理底層中斷,不同USB外設,此部分會根據(jù)外設不同而有所改變。AT32系列芯片USB外設存在USBFS和OTGFS兩種外設,此部分函數(shù)接口基本相同。表3.usbd_int函數(shù)接口fa10aa7e-b216-11ed-bfe3-dac502259ad0.png ?usbd_core.c函數(shù)接口usbd_core.c此文件封裝不同的usb接口用于不同的地方調(diào)用,包括一些接收,發(fā)送函數(shù)等。表4.usbd_core函數(shù)接口fa2ac83c-b216-11ed-bfe3-dac502259ad0.png ?usbd_sdr.c函數(shù)接口usbd_sdr.c此文件處理USB一些標準請求。表5.usbd_sdr函數(shù)接口fa61a870-b216-11ed-bfe3-dac502259ad0.png支持的標志設備請求如下表:表6. 標準設備請求fa719c94-b216-11ed-bfe3-dac502259ad0.png ?usbd_xx_class.c函數(shù)接口usbd_xx_class.c 此文件為具體設備類型的數(shù)據(jù)處理,通過結(jié)構(gòu)體函數(shù)來實現(xiàn)不同設備類型數(shù)據(jù)的處理。開發(fā)者根據(jù)不同的設備類型,來實現(xiàn)下面函數(shù)結(jié)構(gòu)體中的函數(shù),達到不同應用結(jié)果。函數(shù)結(jié)構(gòu)體如下:表7.設備class函數(shù)結(jié)構(gòu)體fa9affb2-b216-11ed-bfe3-dac502259ad0.png表8.設備class函數(shù)接口fab19236-b216-11ed-bfe3-dac502259ad0.png ?usbd_xx_desc.c函數(shù)接口usbd_xx_desc.c此文件為設備描述文件,設備描述信息都通過此文件的函數(shù)接口返回給主機。表9.設備描述函數(shù)結(jié)構(gòu)體fad473f0-b216-11ed-bfe3-dac502259ad0.png表10.設備描述接口函數(shù)faefc38a-b216-11ed-bfe3-dac502259ad0.png ?其它參數(shù)函數(shù)的參數(shù)結(jié)構(gòu)體如下,USB設備庫中參數(shù)傳遞使用結(jié)構(gòu)體usbd_core_type,如下圖:圖4.全局結(jié)構(gòu)體fb273eb4-b216-11ed-bfe3-dac502259ad0.pngUSB設備的連接狀態(tài)如下圖:連接狀態(tài)包含:
  • 默認狀態(tài)

  • 地址狀態(tài)

  • 配置狀態(tài)

  • 掛起狀態(tài)

可使用usbd_connect_state_get函數(shù)查詢當前USB設備的連接狀態(tài)。圖5.USB設備連接狀態(tài)fb4eb944-b216-11ed-bfe3-dac502259ad0.pngUSB設備返回值,USB函數(shù)接口使用如下函數(shù)返回值。圖6.函數(shù)返回值fb64146a-b216-11ed-bfe3-dac502259ad0.png ?

端點FIFO分配

USB要正常收發(fā)數(shù)據(jù),在初始化時需要為每個端點分配發(fā)送/接收的FIFO,F(xiàn)IFO的大小可以根據(jù)端點上傳輸?shù)淖畲蟀L度確認。注意,分配給所有端點FIFO大小的和不能超過系統(tǒng)分配給USB緩沖區(qū)的最大長度,具體USB的緩沖區(qū)大小參考RM上的描述。開發(fā)者可以參考例程usb_conf.h為每個端點自定義分配FIFO。另外使用USBFS和OTGFS兩種不同的外設時,usb_conf.h中對端點FIFO分配稍有不同。 USBFS外設端點FIFO分配USBFS外設端點分配實現(xiàn)了兩種分配方式,一種自動分配,一種是用戶自定義分配。
  • 自動分配:

    1. 通過打開usb_conf.h中USB_EPT_AUTO_MALLOC_BUFFER宏開啟自動分配功能

    2. 在調(diào)用打開端點函數(shù)(usbd_ept_open)時自動根據(jù)傳入的最大包長度自動分配FIFO

    3. 如果使用雙緩沖模式(同步端點,雙緩沖Bulk)時,在打開端點前先調(diào)用(usbd_ept_dbuffer_enable)表示使用雙緩沖模式,可參考audio例程。

    4. 自動分配audio例程配置如下:

    usb_conf.h

    fb8f2ef2-b216-11ed-bfe3-dac502259ad0.png

    audio_class.c:端點打開

    fbb7e18a-b216-11ed-bfe3-dac502259ad0.png

  • 自定義分配:

    1. 關(guān)閉usb_conf.h中USB_EPT_AUTO_MALLOC_BUFFER宏開啟自定義分配

    2. 在調(diào)用打開端點函數(shù)(usbd_ept_open)時調(diào)用usbd_ept_buf_custom_define函數(shù)自定義為端點分配FIFO,參考vcp_loopback例程。

    3. vcp_loopback例程自定義分配配置

    usb_conf.h:

    fbe61cee-b216-11ed-bfe3-dac502259ad0.png

    cdc_class.c端點打開:

    fc12f61a-b216-11ed-bfe3-dac502259ad0.png

OTGFS外設端點FIFO分配OTGFS對于端點的接收緩沖是共享的,因此對于所有的OUT端點,只需要分配一個接收FIFO。對發(fā)送緩沖區(qū)則需要為每個發(fā)送端點分配一塊自己專用的FIFO。支持的端點個數(shù)請參考對應型號的RM。OTGFS的端點分配都需要開發(fā)者根據(jù)端點支持的最大包長度進行分配,注意usb_conf.h中對端點分配的FIFO大小單位為word(Byte)。以vcp_loopback例程為例:fc40a02e-b216-11ed-bfe3-dac502259ad0.png ?

USB設備初始化

在使用USB時,需要對USB的寄存器做一些基本的初始化,通過調(diào)用USB的初始化函數(shù)完成這部分的操作,對于外設USBFS和OTGFS在初始化時所調(diào)用的函數(shù)一定的區(qū)別。 USBFS外設初始化USBFS初始化函數(shù)usbd_core_init包含5個參數(shù):fc7b6bc8-b216-11ed-bfe3-dac502259ad0.png例程vcp_loopback的初始化如下:usbd_core_init(&usb_core_dev, USB, &class_handler, &desc_handler, 0); OTGFS外設初始化OTGFS初始化函數(shù)usbd_init包含5個參數(shù):fc99ec24-b216-11ed-bfe3-dac502259ad0.png例程vcp_loopback的初始化如下:fcbd976e-b216-11ed-bfe3-dac502259ad0.png ?

USB設備中斷處理

USB中斷入口函數(shù)usbd_irq_handler處理所有USB中斷,包括Reset,端點收發(fā)數(shù)據(jù),SOF,掛起,喚醒等中斷,下面介紹一些典型的中斷處理。圖7.USB中斷處理函數(shù)fccdc5b2-b216-11ed-bfe3-dac502259ad0.png ?Reset中斷處理當USB設備在總線上檢測到Reset信號時,將產(chǎn)生Reset中斷。軟件在收到Reset中斷時,需要做基本的初始化,用于后面的枚舉處理。Reset中斷處理函數(shù)usbd_reset_handler:
  • 端點FIFO初始化

  • 設備地址設置為0

  • 端點0初始化

  • 調(diào)用設備類的事件函數(shù)

    udev->class_handler->event_handler(udev, USBD_RESET_EVENT);

端點中斷處理當USB端點收發(fā)數(shù)據(jù)完成時,將產(chǎn)生對應的端點完成中斷,端點完成中斷處理發(fā)送和接收的數(shù)據(jù)。中斷處理函數(shù):usbd_xeptx_handler SOF中斷處理打開SOF中斷之后,USB設備在每收到一個主機發(fā)送的SOF就會產(chǎn)生SOF中斷。中斷處理函數(shù):usbd_sof_handler
  • 中斷處理函數(shù)會調(diào)用設備類的SOF處理函數(shù)

    udev->class_handler->sof_handler(udev);

Suspend中斷處理當總線滿足掛起條件時,USB設備會產(chǎn)生一個掛起中斷,開發(fā)者可根據(jù)此中斷判斷是否需要進入低功耗模式。中斷處理函數(shù):usbd_suspend_handler
  • 連接狀態(tài)設置為掛起狀態(tài)

  • 設置設備進入掛起狀態(tài)

  • 調(diào)用設備類的事件處理函數(shù)

    udev->class_handler->event_handler(udev, USBD_SUSPEND_EVENT);

Wakeup中斷處理當設備在掛起狀態(tài)時,如果總線上有wakeup信號,USB設備將產(chǎn)生wakeup中斷。中斷處理函數(shù):usbd_wakeup_handler
  • 設備退出掛起狀態(tài)

  • 連接狀態(tài)設置為進入掛起之前的狀態(tài)

  • 調(diào)用設備類事件處理函數(shù)

    udev->class_handler->event_handler(udev, USBD_WAKEUP_EVENT);

USB設備端點數(shù)據(jù)處理流程

USB設備在收到主機發(fā)送的數(shù)據(jù)包之后,對應端點0的數(shù)據(jù)(IN/OUT/SETUP)會做單獨處理,其它端點的數(shù)據(jù)會調(diào)用設備類的IN/OUT handler進行數(shù)據(jù)處理。如下圖所示數(shù)據(jù)的處理過程:圖8.端點數(shù)據(jù)處理流程fcf323de-b216-11ed-bfe3-dac502259ad0.png圖9. Setup處理流程fd1a6c14-b216-11ed-bfe3-dac502259ad0.png ?USB控制端點枚舉流程當設備接到主機之后,通過控制端點(端點0)進行枚舉動作,典型的枚舉流程圖如下:圖10.USB枚舉流程fd4835fe-b216-11ed-bfe3-dac502259ad0.pngUSB控制傳輸過程包含SETUP-DATA-STATUS三個階段,如下是一個主機獲取設備信息的傳輸過程GET_DESCRIPTOR:圖11 Get Descriptorfd6480b0-b216-11ed-bfe3-dac502259ad0.png如下是USB庫處理上圖Get Descriptor的流程:圖12. USB庫處理Get Descriptor調(diào)用流程fda5eec4-b216-11ed-bfe3-dac502259ad0.pngUSB設備請求格式(Setup請求)圖13.Setup請求格式fde1e91a-b216-11ed-bfe3-dac502259ad0.png ?USB應用端點處理流程應用端點指客戶實際應用使用到的非0端點,包括Bulk,interrupt,ISO等端點類型,這些端點的數(shù)據(jù)通回調(diào)函數(shù)in_handler和out_handler進行處理。開發(fā)者只需要在xxx_class.c中class_in_handler和class_out_handler里面實現(xiàn)具體端點的數(shù)據(jù)處理即可。IN端點數(shù)據(jù)處理:圖14.IN端點數(shù)據(jù)處理fe194306-b216-11ed-bfe3-dac502259ad0.pngOUT端點數(shù)據(jù)處理:圖15.OUT端點數(shù)據(jù)處理fe3b6562-b216-11ed-bfe3-dac502259ad0.png ?

USB設備類型例程

本章將說明使用AT32 USB設備庫實現(xiàn)不同的設備類型的例程。目前實現(xiàn)的設備例程如下:
  • Audio

  • custom_hid

  • keyboard

  • mouse

  • msc(mass strorage)

  • printer

  • vcp_loopback

  • virtual_msc_iap

  • composite_vcp_keyboard

  • hid_iap

Audio例程

Audio例程使用audio V1.0的協(xié)議實現(xiàn)一個Speaker和Microphone,傳輸Audio數(shù)據(jù)使用同步傳輸,Speaker使用同步OUT傳輸,Microphone使用同步IN傳輸。Audio的例程運行在AT-START評估板上,Audio Speaker和Mircophone是基于Audio Arduino Demo Board進行實現(xiàn),實驗過程中需要連接AT-START和Audio Arduino Board,更多開發(fā)板信息請參考《UM_Audio Arduino Daughter Board_V1.0/V2.0》,Audio協(xié)議請參數(shù)《Universal Serial Bus Device Class Define for Audio Device V1.0》。 實現(xiàn)功能實現(xiàn)一個Speaker和Microphone的Audio復合設備,可以同時進行音頻播放和錄音。Speaker功能:
  • 支持16K,48K采樣率

  • 支持采樣率切換

  • 支持16bit采樣

  • 支持靜音

  • 支持音量調(diào)節(jié)

  • 支持feedback功能

  • 支持雙通道

Microphone功能:
  • 支持16K,48K采樣率

  • 支持采樣率切換

  • 支持16bit采樣

  • 支持靜音

  • 支持音量調(diào)節(jié)

  • 支持雙通道

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉以及Audio部分控制。

  • 端點1 IN:用于Microphone錄音數(shù)據(jù)

  • 端點1 OUT:用于Speaker播放數(shù)據(jù)

  • 端點2 IN:用于Feedback數(shù)據(jù)

I2C
  • 使用I2C發(fā)送控制信息到音頻Board

I2S:
  • 使用I2S1發(fā)送數(shù)據(jù)到音頻board(speaker)

  • 使用I2S2從音頻board接收數(shù)據(jù)(microphone)

DMA
  • 使用DMA1通道3傳輸I2S1的數(shù)據(jù)

  • 使用DMA1通道4傳輸I2S2的數(shù)據(jù)

TIMER:
  • 使用TIMER產(chǎn)生Codec所需要的時鐘

Audio設備實現(xiàn)USB Audio設備類實現(xiàn)源文件在audio_class.c和audio_desc.c中,外部codec的控制以及音頻數(shù)據(jù)的處理都在audio_codec.c中實現(xiàn),根據(jù)主機的請求設置會調(diào)用到audio_codec.c中具體的設置函數(shù)。另外需要特別注意關(guān)于USB設備端點FIFO大小的分配在usb_conf.h中配置,此部分根據(jù)具體端點傳輸?shù)淖畲蟀L度進行分配。 1. 設備描述:(audio_desc.c/h
  • Audio設備的描述(g_usbd_descriptor)

  • Audio設備的配置描述信息(g_usbd_configuration)

    AC interface

    Mricrophone Streaming interface

    Microphone Terminal INPUT/OUTPUT

    Microphone Feature Unit

    Microphone Endpoint

    Speaker Streaming interface

    Speaker Terminal INPUT/OUTPUT

    Speaker Feature Unit

    Speaker Endpoint

    Feedback Endpoint

  • Lang id (g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(audio_desc.h)

    fe573706-b216-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(audio_desc.h)

    fe7439fa-b216-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理部分(audio_class.c/h audio_codec.c/h
  • 端點初始化(class_init_handler)

    fe9b5bc0-b216-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler)

    feb2576c-b216-11ed-bfe3-dac502259ad0.png

  • Audio控制請求(class_setup_handler)

    實現(xiàn)如下audio控制請求:

    fed7e536-b216-11ed-bfe3-dac502259ad0.png

    ff0152fe-b216-11ed-bfe3-dac502259ad0.png

  • Audio音量、靜音、采樣率設置(class_ept0_rx_handler)

    此函數(shù)用于接收完主機發(fā)送的設置數(shù)據(jù)之后進行處理,包括設置音量,靜音,以及采樣率的設置。

    ff387b94-b216-11ed-bfe3-dac502259ad0.png

  • Microphone和Feedback數(shù)據(jù)傳輸(class_in_handler)

    ff659a34-b216-11ed-bfe3-dac502259ad0.png

  • Speaker數(shù)據(jù)接收(class_out_handler)

    ff7e6014-b216-11ed-bfe3-dac502259ad0.png

  • audio_codec.c中實現(xiàn)codec具體的控制以及數(shù)據(jù)處理,需要實現(xiàn)如下函數(shù):

    ff8f0e00-b216-11ed-bfe3-dac502259ad0.png

    以上函數(shù)可根據(jù)例程里的方式進行實現(xiàn),也可以根據(jù)開發(fā)者實際使用的codec來進行修改,對于codec的初始化部分,在這里將不再講述。

  • audio例程功能配置

    audio_conf.h中可以對當前audio例程進行配置,例如:是否需要speaker功能,支持采樣率等,有如下選項配置:

    ffd80c04-b216-11ed-bfe3-dac502259ad0.png

如何根據(jù)Audio例程進行開發(fā)本章將簡單描述如何修改audio例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改audio配置(audio_conf.h)

  • 根據(jù)功能需求修改設備描述信息(audio_desc.c, audio_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    其它描述

  • 根據(jù)功能修改要使用端點(audio_class.c, audio_class.h)

    端點定義(audio_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的Audio控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • Audio數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

  • 根據(jù)具體需求實現(xiàn)codec函數(shù)接口(audio_codec.c)

custom_hid例程

custom_hid實現(xiàn)一個HID(human interface device)功能,與上位機(Artery_UsbHid_Demo)通信完成一些簡單的交互操作,HID使用中斷傳輸與上位機通信,例程在AT-START開發(fā)板上運行,上位機可在官網(wǎng)下載,關(guān)于HID協(xié)議參考《Human Interface Devices (HID) V1.11》。 實現(xiàn)功能
  • 上位機顯示按鍵狀態(tài)

  • 通過上位機控制開發(fā)板LED等開關(guān)狀態(tài)

  • HID數(shù)據(jù)回環(huán)功能

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

  • 端點1 OUT:用于數(shù)據(jù)接收

custom_hid設備實現(xiàn)custom_hid設備類實現(xiàn)源代碼主要在custom_hid_class.c和custom_hid_desc.c中,這兩個源文件實現(xiàn)了對設備的描述和設備的處理。 1. 設備描述:(custom_hid_desc.c/h)
  • custom hid設備描述(g_usbd_descriptor)

  • custom hid設備配置描述(g_usbd_configuration)

    HID interface

    HID Endpoint

  • custom hid report描述(g_usbd_hid_report)

    HID_REPORT_ID_2(LED2)

    HID_REPORT_ID_3(LED3)

    HID_REPORT_ID_4(LED4)

    HID_REPORT_ID_5(BUTTON)

    HID_REPORT_ID_6(LOOPBACK DATA)

  • Lang id(g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(custom_hid_desc.h

    fff20f3c-b216-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(custom_hid_desc.h)

    000a149c-b217-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理部分(custom_hid_class.c/h)
  • 端點初始化(class_init_handler)

    0031ae8a-b217-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler)

    005768d2-b217-11ed-bfe3-dac502259ad0.png

  • HID設備類請求(class_setup_handler)

    實現(xiàn)如下請求:

    SET_PROTOCOL

    GET_PROTOCOL

    SET_IDLE

    GET_IDLE

    SET_REPORT

    代碼如下:

    0082eae8-b217-11ed-bfe3-dac502259ad0.png

  • Custom_HID發(fā)送數(shù)據(jù)

    00b64708-b217-11ed-bfe3-dac502259ad0.png

  • Custom_HID接收數(shù)據(jù)

    00c4f190-b217-11ed-bfe3-dac502259ad0.png

  • 數(shù)據(jù)處理

    00d5c81c-b217-11ed-bfe3-dac502259ad0.png

如何根據(jù)custom hid例程進行開發(fā)本章將簡單描述如何修改custom_hid例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(custom_hid_desc.c, custom_hid_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    設備報告描述符(g_usbd_hid_report)

    其它描述

  • 根據(jù)功能修改要使用端點(custom_hid_class.c, custom_hid_class.h)

    端點定義(custom_hid_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的custom_hid控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • custom_hid發(fā)送接收數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

  • 修改數(shù)據(jù)處理部分

keyboard例程

keyboard實現(xiàn)一個鍵盤功能,使用中斷傳輸與上位機通信,例程在AT-START開發(fā)板上運行,通過按鍵發(fā)送字符串到主機。 實現(xiàn)功能
  • 通過按鍵發(fā)送字符串(”Keyboard Demo”)到主機

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

keyboard設備實現(xiàn)keyboard設備類實現(xiàn)源代碼主要在keyboard_class.c和keyboard_desc.c中,這兩個源文件實現(xiàn)了對設備的描述和設備的處理。 1. 設備描述:(keyboard_desc.c/h
  • keyboard設備描述(g_usbd_descriptor)

  • keyboard設備配置描述(g_usbd_configuration)

    keyboard interface

    keyboard endpoint

  • keyboard report描述(g_usbd_hid_report)

  • Lang id(g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(keyboard_desc.h)

    00f4e530-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(keyboard_desc.h)

    01087fdc-b217-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理部分(keyboard_class.c/h
  • 端點初始化(class_init_handler)

    013759d8-b217-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler)

    0154ab78-b217-11ed-bfe3-dac502259ad0.png

  • HID設備類請求(class_setup_handler)

    實現(xiàn)如下請求:

    SET_PROTOCOL

    GET_PROTOCOL

    SET_IDLE

    GET_IDLE

    SET_REPORT

  • keyboard發(fā)送數(shù)據(jù)

    01751732-b217-11ed-bfe3-dac502259ad0.png

  • keyboard字符數(shù)據(jù)處理

    018ed0e6-b217-11ed-bfe3-dac502259ad0.png

如何根據(jù)keyboard例程進行開發(fā)本章將簡單描述如何修改keyboard例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(keyboard_desc.c, keyboard_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    設備報告描述符(g_usbd_hid_report)

    其它描述

  • 根據(jù)功能修改要使用端點(keyboard_class.c, keyboard_class.h)

    端點定義(keyboard_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的keyboard控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • keyboard發(fā)送接收數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

  • 修改數(shù)據(jù)處理部分

Mouse例程

實現(xiàn)功能mouse實現(xiàn)一個簡單的鼠標功能,使用中斷傳輸與上位機通信,例程在AT-START開發(fā)板上運行,通過開發(fā)板上的按鍵發(fā)送鼠標右鍵功能。圖16.鼠標傳輸格式01ad4d0a-b217-11ed-bfe3-dac502259ad0.png鼠標d通常是通過設置X和Y值來控制PC鼠標移動。 外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

mouse設備實現(xiàn)mouse設備實現(xiàn)源代碼主要在mouse_class.c和mouse_desc.c中,這兩個源文件實現(xiàn)了對設備的描述和設備的處理。 1. 設備描述:(mouse_desc.c/h
  • mouse設備描述(g_usbd_descriptor)

  • mouse設備配置描述(g_usbd_configuration)

    mouseinterface

    mouseendpoint

  • mouse report描述(g_usbd_hid_report)

  • Lang id(g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(mouse_desc.h)

    01e9ce9c-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(keyboard_desc.h)

    02015c6a-b217-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理部分(mouse_class.c/h)
  • 端點初始化(class_init_handler)

    02221ab8-b217-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler)

    024927c0-b217-11ed-bfe3-dac502259ad0.png

  • HID設備類請求(class_setup_handler)

    實現(xiàn)如下請求:

    SET_PROTOCOL

    GET_PROTOCOL

    SET_IDLE

    GET_IDLE

    SET_REPORT

  • keyboard發(fā)送數(shù)據(jù)

    0262cdba-b217-11ed-bfe3-dac502259ad0.png

  • mouse數(shù)據(jù)處理

    027719a0-b217-11ed-bfe3-dac502259ad0.png

如何根據(jù)mouse例程進行開發(fā)本章將簡單描述如何修改mouse例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(mouse_desc.c, mouse_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    設備報告描述符(g_usbd_hid_report)

    其它描述

  • 根據(jù)功能修改要使用端點(mouse_class.c, mouse_class.h)

    端點定義(mouse_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的mouse控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • mouse發(fā)送接收數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

  • 修改數(shù)據(jù)處理部分

msc例程

msc(mass storage)例程展示如何通過USB BULK傳輸,進行PC主機和AT-START通信,該例程支持BOT(Bulk only transfer)協(xié)議和SCSI(small computer system interface)指令。圖17. BOT 命令/數(shù)據(jù)/狀態(tài) 流程02aeb752-b217-11ed-bfe3-dac502259ad0.png圖18.BOT命令格式02d11d74-b217-11ed-bfe3-dac502259ad0.png圖19.BOT狀態(tài)格式02fa5a72-b217-11ed-bfe3-dac502259ad0.png ?實現(xiàn)功能
  • 將內(nèi)部FLASH虛擬成一個磁盤

  • 實現(xiàn)bulk-only傳輸協(xié)議

  • 實現(xiàn)subclass SCSI傳輸命令

    MSC_CMD_INQUIRY

    MSC_CMD_START_STOP

    MSC_CMD_MODE_SENSE6

    MSC_CMD_MODE_SENSE10

    MSC_CMD_ALLOW_MEDIUM_REMOVAL

    MSC_CMD_READ_10

    MSC_CMD_READ_CAPACITY

    MSC_CMD_REQUEST_SENSE

    MSC_CMD_TEST_UNIT

    MSC_CMD_VERIFY

    MSC_CMD_WRITE_10

    MSC_CMD_READ_FORMAT_CAPACITY

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

  • 端點1 OUT:用于數(shù)據(jù)接收

msc設備實現(xiàn)1. 設備描述:(msc_desc.c/h
  • msc設備描述(g_usbd_descriptor)

  • msc設備配置描述(g_usbd_configuration)

    msc interface

    msc endpoint

  • Lang id(g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(custom_hid_desc.h)

    0311144c-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(msc_desc.h)

    03333d60-b217-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理部分(msc_class.c/h)
  • 端點初始化(class_init_handler)

    0349afa0-b217-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler)

    037224a8-b217-11ed-bfe3-dac502259ad0.png

  • MSC設備請求(class_setup_handler)

    GET_MAX_LUN

    BO_RESET

    代碼如下:

    039912d4-b217-11ed-bfe3-dac502259ad0.png

  • IN傳輸處理

    03c93900-b217-11ed-bfe3-dac502259ad0.png

  • OUT傳輸處理(接收數(shù)據(jù))

    03e5fce8-b217-11ed-bfe3-dac502259ad0.png

3. BOT和SCSI命令處理Bulk-only transfer和SCSI的命令處理在庫文件msc_bot_scsi.c/h中。表11.msc_bot_scsi函數(shù)列表040a6fd8-b217-11ed-bfe3-dac502259ad0.png ?4. diskio處理此部分主要處理與存儲設備間接口,例程里面以內(nèi)部flash的存儲控制作為說明,msc_diskio.c/h根據(jù)開發(fā)者使用存儲不同,只需要實現(xiàn)對應存儲的讀寫函數(shù)即可。表12.inquiry描述044256d2-b217-11ed-bfe3-dac502259ad0.png表13 diskio操作函數(shù)04617972-b217-11ed-bfe3-dac502259ad0.png ?如何根據(jù)msc例程進行開發(fā)本章將簡單描述如何修改msc例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(msc_desc.c, msc_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    其它描述

  • 根據(jù)功能修改要使用端點(msc_class.c, msc_class.h)

    端點定義(msc_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的msc控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • msc發(fā)送接收數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

  • 修改diskio部分,實現(xiàn)表13里面的函數(shù)(msc_diskio.c/h)

printer例程

Printer例程展示了使用USB Device作為打印機設備,此demo可在PC端識別到一個打印機設備并且可應答PC端發(fā)送的關(guān)于printer類的狀態(tài)請求命令(例如打印機的有紙/無紙狀態(tài)) 實現(xiàn)功能
  • 實現(xiàn)一個打印機設備

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

  • 端點1 OUT:用于數(shù)據(jù)接收

printer設備實現(xiàn)1. 設備描述(printer_desc.c/h
  • printer設備描述(g_usbd_descriptor)

  • printer設備配置描述(g_usbd_configuration)

    printer interface

    printer endpoint

  • Lang id(g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(custom_hid_desc.h)

    04893b60-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(msc_desc.h)

    04ac42e0-b217-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理(printer_class.c/h
  • 端點初始化(class_init_handler)

    04d8248c-b217-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler

    04fe3c30-b217-11ed-bfe3-dac502259ad0.png

  • printer設備請求(class_setup_handler)

    GET_DEVICE_ID

    PORT_STATUS

    SOFT_RESET

    代碼如下:

    051592e0-b217-11ed-bfe3-dac502259ad0.png

  • IN傳輸處理

    0530c466-b217-11ed-bfe3-dac502259ad0.png

  • OUT傳輸處理(接收數(shù)據(jù))

    054ff750-b217-11ed-bfe3-dac502259ad0.png

如何根據(jù)printer例程進行開發(fā)本章將簡單描述如何修改printer例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(printer_desc.c, printer_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    其它描述

  • 根據(jù)功能修改要使用端點(printer_class.c, printer_class.h)

    端點定義(printer_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的printer控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • printer發(fā)送接收數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

vcp loopback例程

在現(xiàn)代PC中,USB是和絕大部分外設通信的標準接口。盡管如此,大部分的工業(yè)軟件依舊使用COM接口(UART)通信。vcp_loopback例程提供使用USB設備模擬COM接口方法,解決了該問題, vcp_loopback例程展示了如何通過CDC協(xié)議進行USB數(shù)據(jù)收發(fā)。改例程需要使用虛擬串口驅(qū)動,可在官網(wǎng)下載。 實現(xiàn)功能
  • 實現(xiàn)一個虛擬串口

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

  • 端點1 OUT:用于數(shù)據(jù)接收

  • 端點2 IN:監(jiān)控中斷傳輸

vcp_loopback設備實現(xiàn)1. 設備描述(cdc_desc.c/h
  • cdc設備描述(g_usbd_descriptor)

  • cdc設備配置描述(g_usbd_configuration)

    cdc interface

    cdc endpoint

  • Lang id(g_string_lang_id)

  • 序列號(g_string_serial)

  • 廠商產(chǎn)品ID(custom_hid_desc.h)

    056f8ade-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、產(chǎn)品名、配置描述、接口描述(msc_desc.h)

    0596a916-b217-11ed-bfe3-dac502259ad0.png

2. 數(shù)據(jù)處理(cdc_class.c/h
  • 端點初始化(class_init_handler)

    05b8695c-b217-11ed-bfe3-dac502259ad0.png

  • 端點清除(class_clear_handler)

    05e0ec92-b217-11ed-bfe3-dac502259ad0.png

  • cdc設備請求(class_setup_handler)

    SET_LINE_CODING

    GET_LINE_CODING

    代碼如下:

    06044ee4-b217-11ed-bfe3-dac502259ad0.png

  • IN傳輸處理

    062ca394-b217-11ed-bfe3-dac502259ad0.png

  • OUT傳輸處理(接收數(shù)據(jù))

    06570bd4-b217-11ed-bfe3-dac502259ad0.png

如何根據(jù)vcp_loopback例程進行開發(fā)本章將簡單描述如何修改cdc例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(cdc_desc.c, cdc_desc.h)

    設備描述信息(g_usbd_descriptor)

    設備配置描述信息(g_usbd_configuration)

    其它描述

  • 根據(jù)功能修改要使用端點(cdc_class.c, cdc_class.h)

    端點定義(cdc_class.h)

    端點初始化(class_init_handler,class_clear_handler)

  • 修改使用的cdc控制請求

    控制請求修改(class_setup_handler)

    控制請求設置處理(class_ept0_rx_handler)

  • cdc發(fā)送接收數(shù)據(jù)處理修改

    IN數(shù)據(jù)處理(class_in_handler)

    OUT數(shù)據(jù)處理(class_out_handler)

  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

virtual_msc_iap例程

virtual msc iap實現(xiàn)一個升級功能的設備,不依賴上位機,當接入PC之后,通過將固件拷貝到磁盤以達到升級目的。 實現(xiàn)功能
  • 將flash虛擬成磁盤進行升級

  • Iap保留使用20K byte空間

  • 升級完成之后reset usb設備返回升級狀態(tài)

  • 支持下載地址設置

  • 支持升級完成之后跳轉(zhuǎn)到APP運行

  • 支持bin文件升級

外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉

  • 端點1 IN:用于數(shù)據(jù)發(fā)送

  • 端點1 OUT:用于數(shù)據(jù)接收

virtual_msc_iap設備實現(xiàn)1. 設備描述(msc_desc.c/h參考3.5.3.1 2. 數(shù)據(jù)處理部分(msc_class.c/h參考3.5.3.2 3. BOTSCSI命令處理參考3.5.3.3 4. diskio處理參考3.5.3.4 5. flash升級部分(flash_fat16.c/h
  • 升級狀態(tài)

    0683b3c8-b217-11ed-bfe3-dac502259ad0.png

    當連接Host之后,在響應磁盤上通過TXT文檔顯示當前狀態(tài)

    準備升級狀態(tài)(Ready.TXT)

    升級成功(Success.TXT)

    升級失?。‵ailed.TXT)

    未知文件或錯誤(Unkonwn.TXT)

    升級文件大于FLASH大?。↙arge.TXT)

  • FAT16分區(qū)表描述

    06a93de6-b217-11ed-bfe3-dac502259ad0.png
  • 升級接口函數(shù)06f42540-b217-11ed-bfe3-dac502259ad0.png
如何根據(jù)virtual_msc_iap例程進行開發(fā)本章將簡單描述如何修改virtual_msc_iap例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(msc_desc.c, msc_desc.h)設備描述信息(g_usbd_descriptor)設備配置描述信息(g_usbd_configuration)其它描述
  • 根據(jù)功能修改要使用端點(msc_class.c, msc_class.h)端點定義(msc_class.h)端點初始化(class_init_handler,class_clear_handler)
  • 修改使用的msc控制請求控制請求修改(class_setup_handler)控制請求設置處理(class_ept0_rx_handler)
  • msc發(fā)送接收數(shù)據(jù)處理修改IN數(shù)據(jù)處理(class_in_handler)OUT數(shù)據(jù)處理(class_out_handler)
  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)
  • 修改diskio部分,實現(xiàn)表13里面的函數(shù)(msc_diskio.c/h)
  • 修改flash_fat16.c/h升級參數(shù),包括APP起始地址,IAP占用空間等,要保證IAP和APP地址不重合。

composive_vcp_keyboard例程

復合設備定義如下:擁有多個相互獨立接口的設備被稱為復合設備。當使用該設備時,該設備上擁有多個組合的功能。例如,Composite vcp keyboard demo 提供的復合設備包含HID和CDC功能(鍵盤和串口通信) 實現(xiàn)功能
  • 實現(xiàn)一個USB虛擬串口(參考3.7)
  • 實現(xiàn)一個USB鍵盤設備(參考3.3)
外設資源使用USB外設:
  • 端點0 IN/OUT:用于USB枚舉
  • 端點1 IN:用于數(shù)據(jù)發(fā)送
  • 端點1 OUT:用于數(shù)據(jù)接收
  • 端點2 IN:CDC命令中斷傳輸
  • 端點3 IN:Keyboard發(fā)送數(shù)據(jù)
composite_vcp_keyboard設備實現(xiàn)1. 設備描述(cdc_keyboard_desc.c/h
  • cdc_keyboard設備描述(g_usbd_descriptor)
  • cdc_keyboard設備配置描述(g_usbd_configuration)cdc interfacecdc endpointkeyboard interfacekeyboard endpoint
  • Lang id(g_string_lang_id)
  • 序列號(g_string_serial)
  • 廠商產(chǎn)品ID(custom_hid_desc.h)071ba26e-b217-11ed-bfe3-dac502259ad0.png
  • 制造商、產(chǎn)品名、配置描述、接口描述(msc_desc.h)07318782-b217-11ed-bfe3-dac502259ad0.png
2. 數(shù)據(jù)處理(cdc_keyboard_class.c/h
  • 端點初始化(class_init_handler)07595ae6-b217-11ed-bfe3-dac502259ad0.png
  • 端點清除(class_clear_handler)077dc21e-b217-11ed-bfe3-dac502259ad0.png
  • 設備請求(class_setup_handler)cdc設備類請求:SET_LINE_CODINGGET_LINE_CODIN

    Keyboard hid設備類請求:

    SET_PROTOCOLGET_PROTOCOLSET_IDLEGET_IDLESET_REPORT

    代碼如下:

    079b6a44-b217-11ed-bfe3-dac502259ad0.png
  • IN傳輸處理07cb4796-b217-11ed-bfe3-dac502259ad0.png
  • OUT傳輸處理(接收數(shù)據(jù))0808f5d2-b217-11ed-bfe3-dac502259ad0.png
如何根據(jù)composite_vcp_keyboard例程進行開發(fā)本章將簡單描述如何修改composite_vcp_keyboard例程的代碼來進行復合設備開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(cdc_keyboard_desc.c, cdc_keyboard_desc.h)設備描述信息(g_usbd_descriptor)設備配置描述信息(g_usbd_configuration)其它描述
  • 根據(jù)功能修改要使用端點(cdc_keyboard_class.c, cdc_keyboard_class.h)端點定義(cdc_class.h)端點初始化(class_init_handler,class_clear_handler)
  • 修改使用的cdc控制請求控制請求修改(class_setup_handler)控制請求設置處理(class_ept0_rx_handler)
  • cdc_keyboard發(fā)送接收數(shù)據(jù)處理修改IN數(shù)據(jù)處理(class_in_handler)OUT數(shù)據(jù)處理(class_out_handler)
  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)

hid_iap例程

hid_iap例程使用usb hid實現(xiàn)IAP升級功能,需要搭配上位機使用,上位機可在官網(wǎng)下載IAP_Programmer。hid iap的例程代碼位于BSP固件庫utilitiesat32f435_437_usb_iap_demo中,使用方法可參考《AN0007_AT32_IAP_using_the_USB_HID_ZH_V2.x.x.pdf》 1. 實現(xiàn)功能
  • 實現(xiàn)使用HID進行設備升級
2. 外設資源使用USB 外設:
  • 端點0 IN/OUT:用于USB枚舉
  • 端點1 IN:用于數(shù)據(jù)發(fā)送
  • 端點1 OUT:用于數(shù)據(jù)接收
hid_iap設備實現(xiàn)1. 設備描述(hid_iap_desc.c/h
  • hid iap設備描述(g_usbd_descriptor)
  • hid iap設備配置描述(g_usbd_configuration)HID interfaceHID Endpoint
  • hid iap report描述(g_usbd_hid_report)
  • Lang id(g_string_lang_id)
  • 序列號(g_string_serial)
  • 廠商產(chǎn)品ID(hid_iap_desc.h)08321566-b217-11ed-bfe3-dac502259ad0.png
  • 制造商、產(chǎn)品名、配置描述、接口描述(hid_iap_desc.h)084e44e8-b217-11ed-bfe3-dac502259ad0.png
2. 數(shù)據(jù)處理(hid_iap_class.c/h
  • 端點初始化(class_init_handler)087c3c40-b217-11ed-bfe3-dac502259ad0.png
  • 端點清除(class_clear_handler)089e6f86-b217-11ed-bfe3-dac502259ad0.png
  • HID設備類請求(class_setup_handler)實現(xiàn)如下請求:SET_PROTOCOLGET_PROTOCOLSET_IDLEGET_IDLESET_REPORT代碼如下:08be20b0-b217-11ed-bfe3-dac502259ad0.png
  • hid iap發(fā)送數(shù)據(jù)08e60cec-b217-11ed-bfe3-dac502259ad0.png
  • hid iap接收數(shù)據(jù)0918b4f8-b217-11ed-bfe3-dac502259ad0.png
  • 升級命令數(shù)據(jù)處理 094243a4-b217-11ed-bfe3-dac502259ad0.png
3. hid iap升級協(xié)議表14.hid iap升級命令0976967c-b217-11ed-bfe3-dac502259ad0.png
  1. 0x5AA0進入IAP模式

    作為一個特定的命令,當用戶APP收到這個命令之后將進入IAP模式。實現(xiàn)方式為收到這個命令之后擦除flag然后reset

    上位機:[0x5A, 0xA0]

    IAP設備響應:[0x5A, 0XA0, ACK/NACK]

  2. 0x5AA1開始下載

    上位機:[0x5A,0xA1]

    IAP設備響應:[0x5A,0xA1,ACK/NACK]

  3. 0x5AA2設置下載地址

    設置下載地址需按照1KB對齊,每下載1Kbyte數(shù)據(jù)之后,都需要重新設置下載地址。

    上位機(命令+地址):[0x5A, 0xA2, 0x08, 0x00, 0x40, 0x00]

    IAP設備響應:[0x5A,0xA2, ACK/NACK]

  4. 0x5AA3下載數(shù)據(jù)命令(1KB 對齊多個包發(fā)送)

    下載數(shù)據(jù)命令采用命令+長度+數(shù)據(jù)的格式進行發(fā)送,每包最大數(shù)據(jù)量為60Byte(64–命令–長度),當發(fā)送數(shù)據(jù)達到1KB時,上位機需要等待設備的ACK響應。此時設備需將1KB的數(shù)據(jù)寫到FLASH。

    上位機(命令(2Byte)+長度(2 Byte)+數(shù)據(jù)(n byte)):[0x5A,0xA3,LEN1,LEN0,DATA0….DATAn]

    收完1KB數(shù)據(jù)后IAP設備響應:[0x5A, 0XA3, ACK/NACK]

  5. 0x5AA4下載結(jié)束

    上位機:[0x5A, 0xA4]

    IAP設備響應:[0x5A, 0xA4, ACK/NACK]

  6. 0x5AA5固件CRC校驗

    上位機傳輸固件起始地址和固件大小/1KB(固件大小按1KB對齊,不足補0xFF),由IAP計算CRC之后返回給上位機。

    上位機:[0x5A,0xA5, 0x08, 0x00, 0x40, 0x00, LEN1, LEN0]

    IAP設備響應: [0x5A, 0xA5, ACK/NACK, CRC3, CRC2, CRC1, CRC0]

  7. 0x5AA6跳轉(zhuǎn)命令

    跳轉(zhuǎn)命令將跳轉(zhuǎn)到用戶代碼進行運行

    上位機:[0x5A,0xA6, 0x08, 0x00, 0x40, 0x00]

    IAP設備響應:[0x5A,0xA6,ACK/NACK]

  8. 0x5AA7獲取IAP設置的app地址

    返回IAP設置的app地址

    上位機:[0x5A, 0xA7]

    IAP設備響應:[0x5A, 0xA7, ACK/NACK, 0x08, 0x00, 0x40, 0x00]

如何根據(jù)hid_iap例程進行開發(fā)本章將簡單描述如何修改hid_iap例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。
  • 根據(jù)功能需求修改設備描述信息(hid_iap_desc.c, hid_iap_desc.h)設備描述信息(g_usbd_descriptor)設備配置描述信息(g_usbd_configuration)其它描述
  • 根據(jù)功能修改要使用端點(hid_iap_class.c, hid_iap_class.h)端點定義(hid_iap_class.h)端點初始化(class_init_handler,class_clear_handler)
  • 修改使用的hid控制請求控制請求修改(class_setup_handler)控制請求設置處理(class_ept0_rx_handler)
  • hid_iap發(fā)送接收數(shù)據(jù)處理修改IN數(shù)據(jù)處理(class_in_handler)OUT數(shù)據(jù)處理(class_out_handler)
  • 根據(jù)需求修改端點FIFO大小分配(usb_conf.h)
  • 修改hid_iap_user.h中的升級參數(shù),包括APP起始地址等,IAP占用空間等,保證APP地址和IAP的地址不要重合。
審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17956

    瀏覽量

    365895
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8173

    瀏覽量

    272445
  • 雅特力
    +關(guān)注

    關(guān)注

    0

    文章

    179

    瀏覽量

    8558
  • AT32
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    2693

原文標題:AT32講堂046 | 雅特力AT32 MCU USB設備庫的架構(gòu)和使用方法

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AT32系列MCU上Flash模擬EEPRO的應用原理和使用方法

    AN0002—AT32 MCU如何使用片上Flash來實現(xiàn)EEPROM功能當前諸多嵌入式應用場景都需要用到 EEPROM 作為非易失性的數(shù)據(jù)存儲設備。出于客戶低成本的考慮,AT32
    發(fā)表于 11-26 07:15

    AT32 MCU USB主機庫應用說明

    AT32 MCU USB Host Library Application Note主要描述AT32F4xx 系列USB 主機庫的架構(gòu)
    發(fā)表于 10-25 07:02

    AT32 MCU USB設備應用說明

    AT32 MCU USB Device Library Application Note主要描述AT32F4xx 系列USB 設備
    發(fā)表于 10-25 07:07

    攜高效能AT32 MCU“芯”動亮相ICCAD 2020

    高峰論壇,獲得了業(yè)界人士、廣大客戶及眾多媒體的廣泛關(guān)注。 (供圖,下同) 在同期舉辦的IP 與 IC 設計專題論壇上,
    的頭像 發(fā)表于 12-16 17:12 ?2286次閱讀

    攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會

    技術(shù)、邊緣AI、新興應用和生態(tài)發(fā)展等熱門議題。 業(yè)務處長陳佳延在大會發(fā)表了題為“
    的頭像 發(fā)表于 08-30 10:04 ?4801次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>攜高性能<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相全球<b class='flag-5'>MCU</b>生態(tài)發(fā)展大會

    如何使用AT32 MCU主機庫快速開發(fā)USB相關(guān)應用

    這部分主要介紹AT32 USB主機庫的結(jié)構(gòu)和使用方法,AT32 USB支持全速和低速,不支持
    的頭像 發(fā)表于 01-14 10:56 ?2402次閱讀
    如何使用<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>主機庫快速開發(fā)<b class='flag-5'>USB</b>相關(guān)應用

    AT32 SPI

    AT32 SPI 科技AT32F415系
    發(fā)表于 03-30 10:44 ?675次閱讀

    攜高性能AT32 MCU精彩亮相D Forum 2021 微控制器論壇

    AT32高效能MCU平臺–持續(xù)布局多元化應用市場”的主題演講。產(chǎn)品與行銷處長杜立博先生在演講中首先介紹了公司近幾年來取得的成績,
    的頭像 發(fā)表于 02-24 09:33 ?1036次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>攜高性能<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相D Forum 2021 微控制器論壇

    攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會

    技術(shù)、邊緣AI、新興應用和生態(tài)發(fā)展等熱門議題。業(yè)務處長陳佳延在大會發(fā)表了題為“AT3
    的頭像 發(fā)表于 02-24 09:31 ?750次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>攜高性能<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相全球<b class='flag-5'>MCU</b>生態(tài)發(fā)展大會

    AT32講堂046 | AT32 MCU USB設備架構(gòu)使用方法

    AT32USB設備協(xié)議這部分主要介紹AT32USB設備的結(jié)構(gòu)和
    的頭像 發(fā)表于 02-22 11:23 ?7305次閱讀
    <b class='flag-5'>AT32</b>講堂046 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>USB</b><b class='flag-5'>設備</b><b class='flag-5'>庫</b>的<b class='flag-5'>架構(gòu)</b>和<b class='flag-5'>使用方法</b>

    展臺首日速遞,AT32 MCU精彩亮相

    8月23日,elexcon2023深圳國際電子展在深圳會展中心(福田)正式拉開帷幕!攜AT32MCU精彩亮相,電機控制、工業(yè)控制、消費&商務、電力&電源、智能家電及汽車電子等
    的頭像 發(fā)表于 08-24 08:17 ?906次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>展臺首日速遞,<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相

    如何使用AT32 MCU定時器進行PWM輸入測試

    如何使用AT32 MCU定時器進行PWM輸入測試
    的頭像 發(fā)表于 10-27 14:20 ?4038次閱讀
    如何使用<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>定時器進行PWM輸入測試

    AT32 MCU Printf的功能使用方法

    AT32 MCU Printf的功能使用方法
    的頭像 發(fā)表于 10-27 09:27 ?1806次閱讀
    <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> Printf的功能<b class='flag-5'>使用方法</b>

    AT32 MCU實現(xiàn)高效電機驅(qū)動控制與應用

    發(fā)展。受邀出席此次會議,產(chǎn)品市場總監(jiān)林金海發(fā)表了題為“AT32
    的頭像 發(fā)表于 11-17 08:15 ?1134次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>實現(xiàn)高效電機驅(qū)動控制與應用

    AT32 MCU與SEGGER攜手合作,開發(fā)量產(chǎn)事半功倍

    近日,與SEGGER共同宣布J-Link仿真調(diào)試器與Flasher在線燒錄器全面支持AT32 MCU產(chǎn)品,SEGGER工具鏈的加持使
    的頭像 發(fā)表于 02-23 10:27 ?679次閱讀