野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15771|回复: 6

stm32F4 usb host CDC类调试

[复制链接]
发表于 2016-3-11 15:43:22 | 显示全部楼层 |阅读模式
本帖最后由 天之痕 于 2016-3-11 15:44 编辑

本帖最后由 天之痕 于 2016-3-11 15:25 编辑

概述

在调试stm32F4的usbhost与华为me909进行通信,还没有找到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接头。对于后期调试准备了下下策。


正在进行的工作

移植了官方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错误,等待进一步调试

说明
如果有感兴趣的朋友可以帮助我一下,或者帮我一起调试一下。我会把这个工程发到论坛上


问题

keil 在编译完出线这个警告,没有找到是什么问题,但是结果是 0错误 0警告。有知道什么问题的请回复下。


回复

使用道具 举报

发表于 2016-3-11 17:55:52 | 显示全部楼层
这个没有关系,是浏览信息,只是方便我们跳转浏览文件的,

不会影响编译后的程序
回复 支持 反对

使用道具 举报

发表于 2016-3-13 12:03:49 | 显示全部楼层
mark 跟踪学习  学习分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-14 14:43:15 | 显示全部楼层
flyleaf 发表于 2016-3-11 17:55
这个没有关系,是浏览信息,只是方便我们跳转浏览文件的,

不会影响编译后的程序

是的,但是不爽,就想知道是怎么回事
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-14 14:45:22 | 显示全部楼层
截止至2016/3/14
结帖:因为根据调试信息看是硬件问题,所以买了一个带usbhost接口的开发板进行调试。今天板子刚到。。。
烧程序,测试成功!果然是硬件问题!!! 问题解决。
回复 支持 反对

使用道具 举报

发表于 2016-3-15 21:25:42 | 显示全部楼层
截止至2016/3/14
结帖:因为根据调试信息看是硬件问题,所以买了一个带usbhost接口的开发板进行调试。今天板子刚到。。。
烧程序,测试成功!果然是硬件问题!!! 问题解决。

是否可以实现模块与平台的TCP连接?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 09:10:28 | 显示全部楼层
猪头爱美丽 发表于 2016-3-15 21:25
截止至2016/3/14
结帖:因为根据调试信息看是硬件问题,所以买了一个带usbhost接口的开发板进行调试。今天 ...

可以                                             
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 03:54 , Processed in 0.031499 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表