stm32F437 與 me909 通過 usb 通信調試

概述

還沒有找到stm32 與 華爲通信模塊通過USB通信的例子,本貼直播調試usb host的全過程,如果有搞過的請跟帖幫忙分析一下。

已經知道的東西

1.華爲me909 usb屬於usb device,是cdc類。
2.stm32F4具備usb host功能,可以使用官方提供的usb庫進行設計,最新的usb庫爲2.2.0版本。

3.移植了usb hid的例子,stm32F4作爲host 與鼠標進行通信,完成。使用的是PA11 和 PA12腳,FS(全速模式)。

4.華爲me909爲自供電usb設備,因此當usb出現故障的時候不能通過插拔usb接口對usb進行復位,好在me909有復位引腳,經測試,通過模塊本身的復位引腳對模塊進行復位後,usb可以重新與stm32建立連接,相當於重新插拔USB接頭。對於後期調試準備了下下策。

正在進行的工作

2016/3/9/17:43之前
移植了官方usb host CDC的例子,結合原子提供的hid的例程進行調試,未果,只能進行到“USBH_USR_DeviceAddressAssigned(從機分配地址成功)“這一步,後續還沒進展。現在怎麼突破枚舉的問題正在開展,閱讀源碼是必要的。

截止至2016/3/9/17:43
設備已經枚舉成功,終於邁出了第一步,調試過程:跟蹤調試,發現程序在 usbh_stdreq.c 第479行時if ( cfg_desc->bNumInterfaces <= USBH_MAX_NUM_INTERFACES) 解析描述信息後會檢查接口數是否在設定的範圍內,華爲的接口數爲6個大於在 usbh_conf.h設置的例程中的 2個接口,所以枚舉失敗。改爲6後,並把最對endpoint(端點數) 設置爲3(在華爲的 USB Interface Descriptor Guide文件中說明)。枚舉成功!
但是提示的是不支持的設備,正在進一步調試,趁熱打鐵!

截止至2016/3/9/18:03
打印出各個接口的信息
bInterfaceClass: 00FFh,bInterfaceSubClass: 0006h,bInterfaceProtocol: 0010h
bInterfaceClass: 00FFh,bInterfaceSubClass: 0006h,bInterfaceProtocol: 0013h
bInterfaceClass: 00FFh,bInterfaceSubClass: 0006h,bInterfaceProtocol: 0012h
bInterfaceClass: 00FFh,bInterfaceSubClass: 0006h,bInterfaceProtocol: 0016h
bInterfaceClass: 00FFh,bInterfaceSubClass: 0006h,bInterfaceProtocol: 0006h
bInterfaceClass: 00FFh,bInterfaceSubClass: 0006h,bInterfaceProtocol: 001Bh
跟手冊完全一致 ^-^

截止至2016/3/11/12:03
將端點 按照華爲模塊手冊說明進行設置。有時可以接收到數據,但是概率很低,調試時發現在
CDC_ProcessReception(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost) 函數中
URB_STATE URB_StatusRx = HCD_GetURB_State(pdev , CDC_Machine.CDC_DataItf.hc_num_in);時

URB_StatusRx 的值爲 URB_ERROR

查找發生這個錯誤的原因 在一箇中斷處理函數中
else if((pdev->host.HC_Status[num] == HC_XACTERR) ||
(pdev->host.HC_Status[num] == HC_DATATGLERR))
{
pdev->host.ErrCnt[num] = 0;
pdev->host.URB_State[num] = URB_ERROR;
}

引用香水城的描述
同樣查看XACTERR和DATAEGLERR的置位原因,找到對應的寄存器,即OTG_FS_HCINTx中的【TXERR】和【DTERR】位被硬件置

【TXERR】:Transaction error,可能是CRC校驗錯誤、超時、比特填充錯誤、或者錯誤的EOP
【DTERR】:Data toggle error,表示收、發雙方的數據同步位不再同步,可能是主機處理不當,也有可能是設備處理不當。最直觀的方法是使用USB分析儀,看出錯前的總線通信來判斷是誰沒有正確處理數據同步位的翻轉。

截止至2016/3/11 15:24確定爲XACTERR錯誤,等待進一步調試

截止至2016/3/14
結帖:因爲根據調試信息看是硬件問題,所以買了一個帶usbhost接口的開發板進行調試。今天板子剛到。。。
燒程序,測試成功!果然是硬件問題!!! 問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章