女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

AT32講堂046 | 雅特力AT32 MCU USB設(shè)備庫的架構(gòu)和使用方法

雅特力 AT32 MCU ? 2023-02-22 11:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AT32 USB設(shè)備協(xié)議庫

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

用戶應用程序

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

USB Core Driver和USB設(shè)備類

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

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

USB硬件底層接口

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

USB/OTG外設(shè)

圖1. USB庫結(jié)構(gòu)c131a572-b1f4-11ed-ad0d-dac502259ad0.png

AT32 USB庫文件

如下是AT32 USB應用工程結(jié)構(gòu)圖:圖2. AT32工程結(jié)構(gòu)c15f5850-b1f4-11ed-ad0d-dac502259ad0.pngCore Driver庫路徑:OTGFS-->middlewares\usb_driversUSBFS-->middlewares\usbd_driversDevice Class庫路徑:middlewares\usbd_class如下是USB庫文件列表:表1. USB庫文件列表c18169b8-b1f4-11ed-ad0d-dac502259ad0.png表2. USB設(shè)備類型文件列表c19bf012-b1f4-11ed-ad0d-dac502259ad0.png

USB設(shè)備庫文件說明

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

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

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

默認狀態(tài)

地址狀態(tài)

配置狀態(tài)

掛起狀態(tài)

可使用usbd_connect_state_get函數(shù)查詢當前USB設(shè)備的連接狀態(tài)。圖5.USB設(shè)備連接狀態(tài)c3841832-b1f4-11ed-ad0d-dac502259ad0.pngUSB設(shè)備返回值,USB函數(shù)接口使用如下函數(shù)返回值。圖6.函數(shù)返回值c3a789f2-b1f4-11ed-ad0d-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兩種不同的外設(shè)時,usb_conf.h中對端點FIFO分配稍有不同。USBFS外設(shè)端點FIFO分配USBFS外設(shè)端點分配實現(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

c3e02f64-b1f4-11ed-ad0d-dac502259ad0.png

audio_class.c:端點打開

c3ffc040-b1f4-11ed-ad0d-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:

c424dc04-b1f4-11ed-ad0d-dac502259ad0.png

cdc_class.c端點打開:

c459c9f0-b1f4-11ed-ad0d-dac502259ad0.png

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

USB設(shè)備初始化

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

USB設(shè)備中斷處理

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

端點FIFO初始化

設(shè)備地址設(shè)置為0

端點0初始化

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

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

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

中斷處理函數(shù)會調(diào)用設(shè)備類的SOF處理函數(shù)

udev->class_handler->sof_handler(udev);

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

連接狀態(tài)設(shè)置為掛起狀態(tài)

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

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

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

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

設(shè)備退出掛起狀態(tài)

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

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

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

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

USB設(shè)備在收到主機發(fā)送的數(shù)據(jù)包之后,對應端點0的數(shù)據(jù)(IN/OUT/SETUP)會做單獨處理,其它端點的數(shù)據(jù)會調(diào)用設(shè)備類的IN/OUT handler進行數(shù)據(jù)處理。如下圖所示數(shù)據(jù)的處理過程:圖8.端點數(shù)據(jù)處理流程c537bf80-b1f4-11ed-ad0d-dac502259ad0.png圖9. Setup處理流程c5566570-b1f4-11ed-ad0d-dac502259ad0.pngUSB控制端點枚舉流程當設(shè)備接到主機之后,通過控制端點(端點0)進行枚舉動作,典型的枚舉流程圖如下:圖10.USB枚舉流程c572012c-b1f4-11ed-ad0d-dac502259ad0.pngUSB控制傳輸過程包含SETUP-DATA-STATUS三個階段,如下是一個主機獲取設(shè)備信息的傳輸過程GET_DESCRIPTOR:圖11 Get Descriptorc5b976c4-b1f4-11ed-ad0d-dac502259ad0.png如下是USB庫處理上圖Get Descriptor的流程:圖12. USB庫處理Get Descriptor調(diào)用流程c5ffd466-b1f4-11ed-ad0d-dac502259ad0.pngUSB設(shè)備請求格式(Setup請求)圖13.Setup請求格式c6318966-b1f4-11ed-ad0d-dac502259ad0.pngUSB應用端點處理流程應用端點指客戶實際應用使用到的非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ù)處理c662f38e-b1f4-11ed-ad0d-dac502259ad0.pngOUT端點數(shù)據(jù)處理:圖15.OUT端點數(shù)據(jù)處理c67c7aa2-b1f4-11ed-ad0d-dac502259ad0.png

USB設(shè)備類型例程

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

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復合設(shè)備,可以同時進行音頻播放和錄音。Speaker功能:

支持16K,48K采樣率

支持采樣率切換

支持16bit采樣

支持靜音

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

支持feedback功能

支持雙通道

Microphone功能:

支持16K,48K采樣率

支持采樣率切換

支持16bit采樣

支持靜音

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

支持雙通道

外設(shè)資源使用USB外設(shè):

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

Audio設(shè)備的描述(g_usbd_descriptor)

Audio設(shè)備的配置描述信息(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)

c6915166-b1f4-11ed-ad0d-dac502259ad0.png

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

c6a4482a-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理部分(audio_class.c/h audio_codec.c/h)

端點初始化(class_init_handler)

c6c54c8c-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

c6ee9a1a-b1f4-11ed-ad0d-dac502259ad0.png

Audio控制請求(class_setup_handler)

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

c7825872-b1f4-11ed-ad0d-dac502259ad0.png

c7a71a04-b1f4-11ed-ad0d-dac502259ad0.png

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

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

c7bb233c-b1f4-11ed-ad0d-dac502259ad0.png

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

c7ea5abc-b1f4-11ed-ad0d-dac502259ad0.png

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

c8169b90-b1f4-11ed-ad0d-dac502259ad0.png

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

c83ebfbc-b1f4-11ed-ad0d-dac502259ad0.png

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

audio例程功能配置

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

c86a56ea-b1f4-11ed-ad0d-dac502259ad0.png

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

根據(jù)功能需求修改audio配置(audio_conf.h)

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

其它描述

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

端點定義(audio_class.h)

端點初始化(class_init_handler,class_clear_handler)

修改使用的Audio控制請求

控制請求修改(class_setup_handler)

控制請求設(shè)置處理(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)功能

外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

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

custom hid設(shè)備描述(g_usbd_descriptor)

custom hid設(shè)備配置描述(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

c8968c10-b1f4-11ed-ad0d-dac502259ad0.png

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

c8b456c8-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理部分(custom_hid_class.c/h)

端點初始化(class_init_handler)

c8d81806-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

c8f9288e-b1f4-11ed-ad0d-dac502259ad0.png

HID設(shè)備類請求(class_setup_handler)

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

SET_PROTOCOL

GET_PROTOCOL

SET_IDLE

GET_IDLE

SET_REPORT

代碼如下:

c91c1dc6-b1f4-11ed-ad0d-dac502259ad0.png

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

c9436d36-b1f4-11ed-ad0d-dac502259ad0.png

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

c96cd112-b1f4-11ed-ad0d-dac502259ad0.png

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

c98eb19c-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)custom hid例程進行開發(fā)本章將簡單描述如何修改custom_hid例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

設(shè)備報告描述符(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)

控制請求設(shè)置處理(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”)到主機

外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

keyboard設(shè)備描述(g_usbd_descriptor)

keyboard設(shè)備配置描述(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)

ca2bd8aa-b1f4-11ed-ad0d-dac502259ad0.png

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

ca4b7a5c-b1f4-11ed-ad0d-dac502259ad0.png


2. 數(shù)據(jù)處理部分(keyboard_class.c/h)

端點初始化(class_init_handler)

ca7299b6-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

ca94e340-b1f4-11ed-ad0d-dac502259ad0.png

HID設(shè)備類請求(class_setup_handler)

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

SET_PROTOCOL

GET_PROTOCOL

SET_IDLE

GET_IDLE

SET_REPORT

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

cab7b65e-b1f4-11ed-ad0d-dac502259ad0.png

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

caeec0d6-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)keyboard例程進行開發(fā)本章將簡單描述如何修改keyboard例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

設(shè)備報告描述符(g_usbd_hid_report)

其它描述

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

端點定義(keyboard_class.h)

端點初始化(class_init_handler,class_clear_handler)

修改使用的keyboard控制請求

控制請求修改(class_setup_handler)

控制請求設(shè)置處理(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.鼠標傳輸格式cb434d40-b1f4-11ed-ad0d-dac502259ad0.png鼠標d通常是通過設(shè)置X和Y值來控制PC鼠標移動。外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

mouse設(shè)備描述(g_usbd_descriptor)

mouse設(shè)備配置描述(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)

cb592174-b1f4-11ed-ad0d-dac502259ad0.png

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

cb795840-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理部分(mouse_class.c/h)

端點初始化(class_init_handler)

cb9d38dc-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

cbbb7d24-b1f4-11ed-ad0d-dac502259ad0.png

HID設(shè)備類請求(class_setup_handler)

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

SET_PROTOCOL

GET_PROTOCOL

SET_IDLE

GET_IDLE

SET_REPORT

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

cbd6a270-b1f4-11ed-ad0d-dac502259ad0.png

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

cbfae8ba-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)mouse例程進行開發(fā)本章將簡單描述如何修改mouse例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

設(shè)備報告描述符(g_usbd_hid_report)

其它描述

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

端點定義(mouse_class.h)

端點初始化(class_init_handler,class_clear_handler)

修改使用的mouse控制請求

控制請求修改(class_setup_handler)

控制請求設(shè)置處理(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) 流程cc38d8c8-b1f4-11ed-ad0d-dac502259ad0.png圖18.BOT命令格式cc5be156-b1f4-11ed-ad0d-dac502259ad0.png圖19.BOT狀態(tài)格式cc90e504-b1f4-11ed-ad0d-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

外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

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

msc設(shè)備描述(g_usbd_descriptor)

msc設(shè)備配置描述(g_usbd_configuration)

msc interface

msc endpoint

Lang id(g_string_lang_id)

序列號(g_string_serial)

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

ccae8050-b1f4-11ed-ad0d-dac502259ad0.png

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

ccd18cbc-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理部分(msc_class.c/h)

端點初始化(class_init_handler)

ccf63198-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

cd218ea6-b1f4-11ed-ad0d-dac502259ad0.png

MSC設(shè)備請求(class_setup_handler)

GET_MAX_LUN

BO_RESET

代碼如下:

cd48068a-b1f4-11ed-ad0d-dac502259ad0.png

IN傳輸處理

cd6ef290-b1f4-11ed-ad0d-dac502259ad0.png

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

cd91b73a-b1f4-11ed-ad0d-dac502259ad0.png

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

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

其它描述

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

端點定義(msc_class.h)

端點初始化(class_init_handler,class_clear_handler)

修改使用的msc控制請求

控制請求修改(class_setup_handler)

控制請求設(shè)置處理(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作為打印機設(shè)備,此demo可在PC端識別到一個打印機設(shè)備并且可應答PC端發(fā)送的關(guān)于printer類的狀態(tài)請求命令(例如打印機的有紙/無紙狀態(tài))
實現(xiàn)功能

實現(xiàn)一個打印機設(shè)備

外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

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

printer設(shè)備描述(g_usbd_descriptor)

printer設(shè)備配置描述(g_usbd_configuration)

printer interface

printer endpoint

Lang id(g_string_lang_id)

序列號(g_string_serial)

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

ce3e2e48-b1f4-11ed-ad0d-dac502259ad0.png

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

ce57c0ba-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理(printer_class.c/h)

端點初始化(class_init_handler)

ce75f6fc-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

ce9a5f4c-b1f4-11ed-ad0d-dac502259ad0.png

printer設(shè)備請求(class_setup_handler)

GET_DEVICE_ID

PORT_STATUS

SOFT_RESET

代碼如下:

cebde00c-b1f4-11ed-ad0d-dac502259ad0.png

IN傳輸處理

cf25460c-b1f4-11ed-ad0d-dac502259ad0.png

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

cf3f0e7a-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)printer例程進行開發(fā)本章將簡單描述如何修改printer例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

其它描述

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

端點定義(printer_class.h)

端點初始化(class_init_handler,class_clear_handler)

修改使用的printer控制請求

控制請求修改(class_setup_handler)

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

實現(xiàn)一個虛擬串口

外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

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

vcp_loopback設(shè)備實現(xiàn)1. 設(shè)備描述(cdc_desc.c/h)

cdc設(shè)備描述(g_usbd_descriptor)

cdc設(shè)備配置描述(g_usbd_configuration)

cdc interface

cdc endpoint

Lang id(g_string_lang_id)

序列號(g_string_serial)

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

cf5e014a-b1f4-11ed-ad0d-dac502259ad0.png

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

cf7c2c06-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理(cdc_class.c/h)

端點初始化(class_init_handler)

cf9efd26-b1f4-11ed-ad0d-dac502259ad0.png

端點清除(class_clear_handler)

cfcef0a8-b1f4-11ed-ad0d-dac502259ad0.png

cdc設(shè)備請求(class_setup_handler)

SET_LINE_CODING

GET_LINE_CODING

代碼如下:

cff39278-b1f4-11ed-ad0d-dac502259ad0.png

IN傳輸處理

d039790a-b1f4-11ed-ad0d-dac502259ad0.png

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

d06695fc-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)vcp_loopback例程進行開發(fā)本章將簡單描述如何修改cdc例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

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

設(shè)備描述信息(g_usbd_descriptor)

設(shè)備配置描述信息(g_usbd_configuration)

其它描述

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

端點定義(cdc_class.h)

端點初始化(class_init_handler,class_clear_handler)

修改使用的cdc控制請求

控制請求修改(class_setup_handler)

控制請求設(shè)置處理(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)一個升級功能的設(shè)備,不依賴上位機,當接入PC之后,通過將固件拷貝到磁盤以達到升級目的。實現(xiàn)功能

將flash虛擬成磁盤進行升級

Iap保留使用20K byte空間

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

支持下載地址設(shè)置

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

支持bin文件升級

外設(shè)資源使用USB外設(shè):

端點0 IN/OUT:用于USB枚舉

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

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

virtual_msc_iap設(shè)備實現(xiàn)1. 設(shè)備描述(msc_desc.c/h)參考3.5.3.12. 數(shù)據(jù)處理部分(msc_class.c/h)參考3.5.3.23. BOT和SCSI命令處理參考3.5.3.34. diskio處理參考3.5.3.45. flash升級部分(flash_fat16.c/h)

升級狀態(tài)

d095113e-b1f4-11ed-ad0d-dac502259ad0.png

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

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

升級成功(Success.TXT)

升級失?。‵ailed.TXT)

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

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

FAT16分區(qū)表描述

  • d0bde7da-b1f4-11ed-ad0d-dac502259ad0.png
  • 升級接口函數(shù)d102c620-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)virtual_msc_iap例程進行開發(fā)本章將簡單描述如何修改virtual_msc_iap例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

  • 根據(jù)功能需求修改設(shè)備描述信息(msc_desc.c, msc_desc.h)設(shè)備描述信息(g_usbd_descriptor)設(shè)備配置描述信息(g_usbd_configuration)其它描述
  • 根據(jù)功能修改要使用端點(msc_class.c, msc_class.h)端點定義(msc_class.h)端點初始化(class_init_handler,class_clear_handler)
  • 修改使用的msc控制請求控制請求修改(class_setup_handler)控制請求設(shè)置處理(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例程

復合設(shè)備定義如下:擁有多個相互獨立接口的設(shè)備被稱為復合設(shè)備。當使用該設(shè)備時,該設(shè)備上擁有多個組合的功能。例如,Composite vcp keyboard demo 提供的復合設(shè)備包含HID和CDC功能(鍵盤和串口通信)實現(xiàn)功能

  • 實現(xiàn)一個USB虛擬串口(參考3.7)
  • 實現(xiàn)一個USB鍵盤設(shè)備(參考3.3)

外設(shè)資源使用USB外設(shè):

  • 端點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設(shè)備實現(xiàn)1. 設(shè)備描述(cdc_keyboard_desc.c/h)

  • cdc_keyboard設(shè)備描述(g_usbd_descriptor)
  • cdc_keyboard設(shè)備配置描述(g_usbd_configuration)cdc interfacecdc endpointkeyboard interfacekeyboard endpoint
  • Lang id(g_string_lang_id)
  • 序列號(g_string_serial)
  • 廠商產(chǎn)品ID(custom_hid_desc.h)d1214078-b1f4-11ed-ad0d-dac502259ad0.png
  • 制造商、產(chǎn)品名、配置描述、接口描述(msc_desc.h)d13f9eb0-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理(cdc_keyboard_class.c/h)

  • 端點初始化(class_init_handler)d165d8be-b1f4-11ed-ad0d-dac502259ad0.png
  • 端點清除(class_clear_handler)d197f04c-b1f4-11ed-ad0d-dac502259ad0.png
  • 設(shè)備請求(class_setup_handler)cdc設(shè)備類請求:SET_LINE_CODINGGET_LINE_CODIN

Keyboard hid設(shè)備類請求:

  • SET_PROTOCOLGET_PROTOCOLSET_IDLEGET_IDLESET_REPORT

代碼如下:

  • d1b97776-b1f4-11ed-ad0d-dac502259ad0.png
  • IN傳輸處理d1e20146-b1f4-11ed-ad0d-dac502259ad0.png
  • OUT傳輸處理(接收數(shù)據(jù))d20de086-b1f4-11ed-ad0d-dac502259ad0.png

如何根據(jù)composite_vcp_keyboard例程進行開發(fā)本章將簡單描述如何修改composite_vcp_keyboard例程的代碼來進行復合設(shè)備開發(fā),根據(jù)應用具體的需求來修改代碼。

  • 根據(jù)功能需求修改設(shè)備描述信息(cdc_keyboard_desc.c, cdc_keyboard_desc.h)設(shè)備描述信息(g_usbd_descriptor)設(shè)備配置描述信息(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)控制請求設(shè)置處理(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固件庫utilities\at32f435_437_usb_iap_demo中,使用方法可參考《AN0007_AT32_IAP_using_the_USB_HID_ZH_V2.x.x.pdf》1. 實現(xiàn)功能

  • 實現(xiàn)使用HID進行設(shè)備升級

2. 外設(shè)資源使用USB 外設(shè):

  • 端點0 IN/OUT:用于USB枚舉
  • 端點1 IN:用于數(shù)據(jù)發(fā)送
  • 端點1 OUT:用于數(shù)據(jù)接收

hid_iap設(shè)備實現(xiàn)1. 設(shè)備描述(hid_iap_desc.c/h)

  • hid iap設(shè)備描述(g_usbd_descriptor)
  • hid iap設(shè)備配置描述(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)d2383d4a-b1f4-11ed-ad0d-dac502259ad0.png
  • 制造商、產(chǎn)品名、配置描述、接口描述(hid_iap_desc.h)d258ae04-b1f4-11ed-ad0d-dac502259ad0.png

2. 數(shù)據(jù)處理(hid_iap_class.c/h)

  • 端點初始化(class_init_handler)d27fbf58-b1f4-11ed-ad0d-dac502259ad0.png
  • 端點清除(class_clear_handler)d2a77732-b1f4-11ed-ad0d-dac502259ad0.png
  • HID設(shè)備類請求(class_setup_handler)實現(xiàn)如下請求:SET_PROTOCOLGET_PROTOCOLSET_IDLEGET_IDLESET_REPORT代碼如下:d2ca1170-b1f4-11ed-ad0d-dac502259ad0.png
  • hid iap發(fā)送數(shù)據(jù)d2f8f21a-b1f4-11ed-ad0d-dac502259ad0.png
  • hid iap接收數(shù)據(jù)d32c8eb8-b1f4-11ed-ad0d-dac502259ad0.png
  • 升級命令數(shù)據(jù)處理d350eb8c-b1f4-11ed-ad0d-dac502259ad0.png

3. hid iap升級協(xié)議表14.hid iap升級命令d3876b08-b1f4-11ed-ad0d-dac502259ad0.png

0x5AA0進入IAP模式

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

上位機:[0x5A, 0xA0]

IAP設(shè)備響應:[0x5A, 0XA0, ACK/NACK]

0x5AA1開始下載

上位機:[0x5A,0xA1]

IAP設(shè)備響應:[0x5A,0xA1,ACK/NACK]

0x5AA2設(shè)置下載地址

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

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

IAP設(shè)備響應:[0x5A,0xA2, ACK/NACK]

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

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

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

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

0x5AA4下載結(jié)束

上位機:[0x5A, 0xA4]

IAP設(shè)備響應:[0x5A, 0xA4, ACK/NACK]

0x5AA5固件CRC校驗

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

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

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

0x5AA6跳轉(zhuǎn)命令

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

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

IAP設(shè)備響應:[0x5A,0xA6,ACK/NACK]

0x5AA7獲取IAP設(shè)置的app地址

返回IAP設(shè)置的app地址

上位機:[0x5A, 0xA7]

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

如何根據(jù)hid_iap例程進行開發(fā)本章將簡單描述如何修改hid_iap例程的代碼來進行開發(fā),根據(jù)應用具體的需求來修改代碼。

  • 根據(jù)功能需求修改設(shè)備描述信息(hid_iap_desc.c, hid_iap_desc.h)設(shè)備描述信息(g_usbd_descriptor)設(shè)備配置描述信息(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)控制請求設(shè)置處理(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的地址不要重合。

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

聲明:本文內(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

    文章

    17984

    瀏覽量

    366924
  • AT32
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    AT32 IAP using the USART

    的中斷向量表相應的移動,移動的偏移量為x AT32 USART IAP 快速使用方法 硬件資源 文檔中是用 AT-START-AT32F403A 實驗板的硬件條件為例,IAP demo 源代碼還包括
    發(fā)表于 07-11 10:51

    首日速遞 | 閃耀2025慕尼黑上海電子展,全方位展現(xiàn)智能“芯”實力

    4月15日,慕尼黑上海電子展(electronicaChina2025)在上海新國際博覽中心盛大啟幕。攜多款AT32系列MCU新品及完
    的頭像 發(fā)表于 04-16 00:15 ?422次閱讀
    首日速遞 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>閃耀2025慕尼黑上海電子展,全方位展現(xiàn)智能“芯”實力

    AT32 OTGHS應用筆記

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

    AT32F402/F405入門使用指南

    搭建AT32開發(fā)環(huán)境一、調(diào)試工具及開發(fā)板目前AT32F402/AT32F405開發(fā)板都自帶AT-Link-EZ調(diào)試工具,AT-Link-EZ如下圖左邊紅框所示,它也可拆開后單獨搭配其他電路板使用,支持IDE在線調(diào)試、在線燒錄、USB轉(zhuǎn)串口等功能。圖1.AT-START
    的頭像 發(fā)表于 03-28 18:59 ?752次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F402/F405入門使用指南

    AT32 Workbench煥“芯”升級!引入Middleware助力開發(fā)高效提速

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

    AT32F402/F405時鐘配置

    電子發(fā)燒友網(wǎng)站提供《AT32F402/F405時鐘配置.pdf》資料免費下載
    發(fā)表于 01-15 15:24 ?0次下載
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F402/F405時鐘配置

    發(fā)布高性能電機控制專用MCU

    近日,科技正式推出了其首款高性能電機控制專用MCU——AT32M412/M416。這款MCU專為出行工具、家電及工業(yè)控制等應用而設(shè)計,
    的頭像 發(fā)表于 11-01 18:11 ?1330次閱讀

    STM32轉(zhuǎn)AT32代碼轉(zhuǎn)換

    1.引言在嵌入式開發(fā)中,我們經(jīng)常會遇到更換單片機芯片的事情,若芯片是同一廠家的還好說,若是不同廠家的則需要重新寫,重新調(diào),重新去學習其底層驅(qū)動程序,比較費時費力。如:ST32轉(zhuǎn)AT32、ST32轉(zhuǎn)
    的頭像 發(fā)表于 09-28 08:09 ?767次閱讀
    STM32轉(zhuǎn)<b class='flag-5'>AT32</b>代碼轉(zhuǎn)換

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

    介紹如何結(jié)合提供的V2.x.x的板級支持包(BSP)來配置時鐘。以下介紹時鐘配置的方法主要分兩種:1、以手動編寫代碼調(diào)用BSP中提供的驅(qū)動函數(shù)接口來進行時鐘配
    的頭像 發(fā)表于 09-15 08:08 ?1025次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>088 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F402/F405時鐘配置

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

    新建項目新項目向?qū)T32ID提供支持MCU的C語言項目模板,方便用戶快速創(chuàng)建項目。菜單欄【File】>【New】>【CProject】。新建項目向?qū)У膶υ捒驅(qū)⒊霈F(xiàn)。在對
    的頭像 發(fā)表于 09-15 08:08 ?1408次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>087 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> IDE快速入門指南

    基于AT32 MCU的洗衣機電機控制驅(qū)動方案,解鎖智能家居新體驗

    配置、超薄嵌入、極致靜音體驗以及衣物護理功能作為產(chǎn)品競爭的核心要素,同步響應行業(yè)政策對能效要求的提升,這一系列要求無疑對電機控制技術(shù)提出了更高的挑戰(zhàn)。MCU作為
    的頭像 發(fā)表于 09-15 08:07 ?1033次閱讀
    基于<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>的洗衣機電機控制驅(qū)動方案,解鎖智能家居新體驗

    AT32 MCU的隨機數(shù)生成

    應用的需求。底下提供兩種方法:提高亂度的方法之一,使用ADC的誤差。AT32的微控制器內(nèi)置最多三個高級12位片上SAR模擬數(shù)字轉(zhuǎn)換器(ADC)并提供自校準功能,保證1
    的頭像 發(fā)表于 08-30 12:26 ?1292次閱讀
    <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>的隨機數(shù)生成

    AT32講堂085 | AT32 MCU HICK時鐘校準

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

    電機應用快速入門指南

    AT32電機控制算法庫目標電機:三相永磁同步電機(直流無刷電機)控制模式:可執(zhí)行有位置感測器/無位置感測器FOC弦波矢量控制可執(zhí)行有位置感測器/無位置感測器120°方波BLDC電機控制三相PWM調(diào)制
    的頭像 發(fā)表于 08-30 12:26 ?928次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>電機應用快速入門指南

    【GD32 MCU 入門教程】GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發(fā)表于 08-25 09:24 ?1374次閱讀
    【GD32 <b class='flag-5'>MCU</b> 入門教程】GD32 <b class='flag-5'>MCU</b> FPU <b class='flag-5'>使用方法</b>