打印
[STM32F4]

STM32F429 U盘+FreeRTOS 问题

[复制链接]
3543|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yongjidehanleng|  楼主 | 2015-8-11 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题1: FreeRTOS为操作系统,STM32F429为主机,对U盘进行读写。有时候会出现:U盘插入时,会出现系统停止运行,把U盘拔出来,系统又可以正常运行。此现象出现之后,只有系统复位之后才会消失,不如现象一直存在。(此现象出现的概率也较小),U盘中断级别为5,改U盘中断级别为8或者9之后,现象依旧会出现。我用的USB库是3.1.0的版本
问题2:因为之前不支持U盘热插拔,所以我有改USB中断里面的底层:
static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd)
{ ... .... if( hprt0 & USB_OTG_HPRT_PCDET==USB_OTG_HPRT_PCDET)
{ //USB_MASK_INTERRUPT(hhcd->Instance,USB_OTG_GINTSTS_DISCINT);
HAL_HCD_Connect_Callbcak(hhcd); } .... } 屏蔽掉了USB_MASK_INTERRUPT(hhcd->Instance,USB_OTG_GINTSTS_DISCINT)就支持热插拔了。。。
沙发
yongjidehanleng|  楼主 | 2015-8-11 11:44 | 只看该作者
自己先顶一下。。。

使用特权

评论回复
板凳
mark0668| | 2015-8-11 12:34 | 只看该作者
对USB 不太懂,你可以参考下官方的综合例程,你用的是官方F429 开发板吗?

使用特权

评论回复
地板
mmuuss586| | 2015-8-11 12:36 | 只看该作者

找香水城版主吧;

使用特权

评论回复
5
fanxsd| | 2015-8-11 13:36 | 只看该作者
太高端了

使用特权

评论回复
6
yongjidehanleng|  楼主 | 2015-8-11 16:49 | 只看该作者
mark0668 发表于 2015-8-11 12:34
对USB 不太懂,你可以参考下官方的综合例程,你用的是官方F429 开发板吗?

不是官方开发板,自己做的板子。。。现在U盘应用什么都已经写完了。。。就剩下这个BUG了。。。官方历程早就看了好多遍了。。。我怀疑可能底层驱动的问题。。。

使用特权

评论回复
7
yongjidehanleng|  楼主 | 2015-8-11 16:50 | 只看该作者
mmuuss586 发表于 2015-8-11 12:36
找香水城版主吧;

怎么找?

使用特权

评论回复
8
mark0668| | 2015-8-11 17:31 | 只看该作者
yongjidehanleng 发表于 2015-8-11 16:49
不是官方开发板,自己做的板子。。。现在U盘应用什么都已经写完了。。。就剩下这个BUG了。。。官方历程早 ...

你使用了 SDRAM 吗?

使用特权

评论回复
9
yongjidehanleng|  楼主 | 2015-8-11 19:58 | 只看该作者
mark0668 发表于 2015-8-11 17:31
你使用了 SDRAM 吗?

有使用SDRAM。。。SDRAM来给LCD显示做缓存之类使用的。。。我U盘数据导出的时候,数据也是从SDRAM上拷贝来的。。。但是,我这边出现上面现象是插入U盘的时候,整个系统好像死机了,然后,拔出U盘系统又正常运行了(有按键响应。)。。。这个时候还没有对U盘进行读写操作,这现象跟SDRAM有关嘛?
我初步怀疑是不是USB库底层没做好,导致中断之类的原因。。。

使用特权

评论回复
10
mark0668| | 2015-8-11 20:38 | 只看该作者
没有关系,只是问问你,这应该是你代码没写好的,官方例程都是可以运行的.

使用特权

评论回复
11
yongjidehanleng|  楼主 | 2015-8-12 16:53 | 只看该作者
mark0668 发表于 2015-8-11 20:38
没有关系,只是问问你,这应该是你代码没写好的,官方例程都是可以运行的.

恩,一个系统东西多了,就会出现各种问题。。。

使用特权

评论回复
12
yongjidehanleng|  楼主 | 2015-8-12 16:55 | 只看该作者
yongjidehanleng 发表于 2015-8-12 16:53
恩,一个系统东西多了,就会出现各种问题。。。

我的VBUS脚直接接5V电源,所以,如果5V有干扰,是否就会出现上面的情况。。。

使用特权

评论回复
13
宛豆苗| | 2015-8-14 17:34 | 只看该作者
你的问题描述太简单了,不能定位你的问题所在,不过你可以参考官方例程,里面有相同应用的例程:



STM32Cube_FW_F4_V1.7.0\Projects\STM324x9I_EVAL\Applications\USB_Host\MSC_RTOS

使用特权

评论回复
14
想做大牛的小马| | 2015-8-17 16:32 | 只看该作者
先不用RTOS,看是否正常!确定usb驱动和协议栈没有问题~
所谓的系统停止运行是什么概念?按理说应该进入中断处理,开始对USB进行枚举,可以单步看一下跑到什么位置了?
第二个mask函数看起来是屏蔽了中断,所以你注释掉就好了~

使用特权

评论回复
15
yongjidehanleng|  楼主 | 2015-8-17 17:03 | 只看该作者
想做大牛的小马 发表于 2015-8-17 16:32
先不用RTOS,看是否正常!确定usb驱动和协议栈没有问题~
所谓的系统停止运行是什么概念?按理说应该进入中 ...

谢谢!
USB_MASK_INTERRUPT(hhcd->Instance,USB_OTG_GINTSTS_DISCINT);//USB检测到设备连接时,屏蔽掉USB设备断开连接 ,然后开始对设备进行枚举。所以,我还不是很理解,为何检测到设备连接的时候,要先屏蔽掉设备断开连接,难道是怕在设备枚举阶段时,设备断开会进入中断嵌套?
(USB断开连接中断位,在检测到设备断开连接时,又会开起来)
系统停止运行:即整个系统有好多个任务,比如按键任务和LED任务,这两个任务的优先级最低,也就是当U盘插入时,按键任务响应不了,LED任务也停止了。。。
单步运行:这种想象出现概率比较低,单步的时候,也没出现过。。。
还有一个原因:我的VBUS供电5V干扰比较大。。。会不会是因为这个问题,导致枚举的时候失败了,然后,停止在某个中断中出不来了?
还有:STM32 USB VBUS电压的范围多少? 在USB2.0的规范好像是4.4V--5.5V

使用特权

评论回复
16
yongjidehanleng|  楼主 | 2015-8-17 17:06 | 只看该作者
mark0668 发表于 2015-8-11 20:38
没有关系,只是问问你,这应该是你代码没写好的,官方例程都是可以运行的.

额。。。那你有暴力测试一下吗?
比如:插进去,立马拔出来,试几次之后,U盘还能识别吗?
或者,你有试过连续拔插几十次都没问题吗?(我现在那个工程是,上面那个也不屏蔽了,但是正常拔插20次之后,就不行了,要复位之后,才能再次识别)

使用特权

评论回复
17
yongjidehanleng|  楼主 | 2015-8-17 17:07 | 只看该作者
宛豆苗 发表于 2015-8-14 17:34
你的问题描述太简单了,不能定位你的问题所在,不过你可以参考官方例程,里面有相同应用的例程:

你在用U盘开发中,有遇到什么问题吗?拿出来,大家探讨一下。。。

使用特权

评论回复
18
想做大牛的小马| | 2015-8-18 10:48 | 只看该作者
yongjidehanleng 发表于 2015-8-17 17:03
谢谢!
USB_MASK_INTERRUPT(hhcd->Instance,USB_OTG_GINTSTS_DISCINT);//USB检测到设备连接时,屏蔽掉USB ...

有可能停在某个处理函数里了,调试器停下来,看不出来停在哪儿吗?vbus 5V没有问题,不过干扰比较大的情况下,可能会影响D+ D-传输从而产生错误的~

使用特权

评论回复
19
yongjidehanleng|  楼主 | 2015-8-18 14:15 | 只看该作者
想做大牛的小马 发表于 2015-8-18 10:48
有可能停在某个处理函数里了,调试器停下来,看不出来停在哪儿吗?vbus 5V没有问题,不过干扰比较大的情 ...

恩,谢谢!
现在已经可以确定,如上现象是因为U盘任务的优先级别比较高,所以,当U盘在枚举的时候,LED和按键优先级比较低,所以没办法运行。
我觉得现在整个问题可能是因为VBUS 5V不稳定,所以导致枚举的时候失败,然后一直在枚举,导致任务比较低的无法运行。。。
因为5V的干扰比较大,所以,我用的JLINK无法调试,一调试,就提示电压过高,直接退出调试界面。。。
现在还是U盘识别问题,也就是上面那一句话,不屏蔽的话,U盘正常拔出十几次,然后,就无法识别了。。。(从底层来看,设备插入识别到,然后屏蔽设备断开连接中断位,设备退出,设备断开连接位开启,然后从调试来看,设备一开始插入,断开连接中断位被屏蔽,拔出来之后,屏蔽的该位没有被开启,导致断开连接位有被置位,但是依然被屏蔽,无法响应中断)
兄弟,你在调试U盘中有遇到过什么问题嘛?

使用特权

评论回复
20
想做大牛的小马| | 2015-8-20 14:20 | 只看该作者
yongjidehanleng 发表于 2015-8-18 14:15
恩,谢谢!
现在已经可以确定,如上现象是因为U盘任务的优先级别比较高,所以,当U盘在枚举的时候,LED和 ...

接u盘时主要的问题还是出现在有些特殊的u盘,在枚举时stm32的主机协议栈可能需要一些特别的处理~
有OS在里面就比较复杂了,usb的优先级的确要设为最高,否则会轻易被打断产生传输错误,另如果是HS的话最好使用DMA

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

37

帖子

0

粉丝