4289|8

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32F103RB的USB读取问题 [复制链接]

最近在调试STM32的USB。设置三个端点。
端点0作为控制端点,端点1作为批量读端点,端点2作为批量写端点;
现在在windows上用测试软件发现写完全正常,但是读取STM32的数据时,总是需要读取两次,第一次读取的数据是上一次的数据,只有读取第二次才能读取正确。其中端点0没有用到。

测试如下:
第一次开机运行,windows写32字节数据A给STM32,windows读刚刚发送STM32数据A,结果发现全为0XCC。后续windows再读一次STM32数据就可以读取正确。
后续每次都是如此。

现在肯定是STM32出问题了,但是不知道是什么环节设置出的问题,我是用STM32的USB库修改过来的程序。望高手指点一下。
此帖出自stm32/stm8论坛

最新回复

                                 还是没看懂……  详情 回复 发表于 2010-6-8 22:38
点赞 关注
 

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 显然是程序的问题。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
显然是程序的问题。
这个回答太经典了~~
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个回答太经典了~~
myfaith 发表于 2010-6-8 00:11
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
USB IN传输对于STM32来说,是先将USB BUFFER中的数据传送出去,然后产生IN中断。

你的现象很明显,是第一次主机要求IN的时候,数据并没有存放在USB BUFFER中,而是在产生了IN的中断后,才将数据放入了USB BUFFER,所以在主机的第二次IN请求时,正确的数据才被传送了出去。
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
你是自己写的PC端驱动程序?是不是你PC端解析包协议出错了。
你的问题具体一下看不到是哪地方的问题,以前只用STM32搞过HID和MASS STORAGE的,对PC端USB驱动不太了解。
      其实对STM32这边来说,USB做的工作是比较简单的,简单的说就是响应,STM32来中断后收数据然后做出响应的响应回给PC
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

7
 
这样吧,我讲一下我设计的思路。
STM32功能:每次windows程序发送数据过来,则保存在缓冲区内;若windows程序读取数据,则把缓冲区内的数据发送出去。

windows程序功能:执行一次功能则发送32字节数据给STM32,然后读取刚刚发送出去的32字节数据,也就是说每次发送和读取的数据应该是一样。

以下是bus hound的数据。
测试步骤:

打开windows程序,第一次发送“00 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f 10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f” 32字节数据。bus hound上没有显示有读取数据,但是windows上显示读取数据都为0xcc;

第二次发送“01 02 03 04  05 06 07 08  09 0a 0b 0c  0d 0e 0f 10 11 12 13 14  15 16 17 18  19 1a 1b 1c  1d 1e 1f 20”32字节,跟着windows读取32字节“00 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f  10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f”这里就不对应了。读取的32字节是第一次发送的32字节。

第三次发送“02 03 04  05 06 07 08  09 0a 0b 0c  0d 0e 0f 10 11 12 13 14  15 16 17 18  19 1a 1b 1c  1d 1e 1f 20 21”32字节,跟着windows读取32字节“ 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f  10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f 20”同样不对应了。读取的32字节是第二次发送的32字节。

第四次发送“03 04  05 06 07 08  09 0a 0b 0c  0d 0e 0f 10 11 12 13 14  15 16 17 18  19 1a 1b 1c  1d 1e 1f 20 21 22”32字节,跟着windows读取32字节“02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f  10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f 20 21”同样不对应了。读取的32字节是第三次发送的32字节。


bus hound数据如下:
  Device - Device ID (followed by the endpoint for USB devices)
            (16) Generic USB Hub
            (21) STM32 USB
  Phase  - Phase Type
            CTL   USB control transfer      
            DI    Data in                    
            DO    Data out                  
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data

Device  Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  16.1  DI     02                                                  .                        1.1.0        
  16.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               2.1.0(2)     
  16.0  DI     01 01 01 00                                         ....                     2.2.0        
  16.0  CTL    23 01 10 00  01 00 00 00                            CLEAR FEATURE            4.1.0        
  16.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               5.1.0(2)     
  16.0  DI     01 01 00 00                                         ....                     5.2.0        
  16.0  CTL    23 03 04 00  01 00 00 00                            SET FEATURE              7.1.0        
  16.1  DI     02                                                  .                        8.1.0        
  16.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               9.1.0        
  16.0  DI     03 01 10 00                                         ....                     9.2.0        
  16.0  CTL    23 01 14 00  01 00 00 00                            CLEAR FEATURE           10.1.0        
  16.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS              11.1.0(2)     
  16.0  DI     03 01 00 00                                         ....                    11.2.0        
  16.0  CTL    23 03 04 00  01 00 00 00                            SET FEATURE             13.1.0        
  16.1  DI     02                                                  .                       14.1.0        
  16.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS              15.1.0        
  16.0  DI     03 01 10 00                                         ....                    15.2.0        
  16.0  CTL    23 01 14 00  01 00 00 00                            CLEAR FEATURE           16.1.0        
  16.0  CTL    a3 00 00 00  02 00 04 00                            GET STATUS              17.1.0        
  16.0  DI     00 01 00 00                                         ....                    17.2.0        
  16.0  CTL    a3 00 00 00  03 00 04 00                            GET STATUS              18.1.0        
  16.0  DI     00 01 00 00                                         ....                    18.2.0        
  16.0  CTL    a3 00 00 00  04 00 04 00                            GET STATUS              19.1.0        
  16.0  DI     00 01 00 00                                         ....                    19.2.0        
  16.0  CTL    a3 00 00 00  05 00 04 00                            GET STATUS              20.1.0        
  16.0  DI     00 01 00 00                                         ....                    20.2.0        
  16.0  CTL    a3 00 00 00  06 00 04 00                            GET STATUS              21.1.0        
  16.0  DI     00 01 00 00                                         ....                    21.2.0        
  16.0  CTL    a3 00 00 00  07 00 04 00                            GET STATUS              22.1.0        
  16.0  DI     00 01 00 00                                         ....                    22.2.0        
  21.0  CTL    80 06 00 01  00 00 12 00                            GET DESCRIPTOR          23.1.0        
  21.0  DI     12 01 10 01  00 00 00 40  59 58 01 00  00 02 01 02  [email=.......@YX].......@YX[/email]......        23.2.0        
               03 01                                               ..                      23.2.16      
  21.0  CTL    80 06 00 02  00 00 09 00                            GET DESCRIPTOR          24.1.0        
  21.0  DI     09 02 20 00  01 01 00 a0  32                        .. .....2               24.2.0        
  21.0  CTL    80 06 00 02  00 00 20 00                            GET DESCRIPTOR          25.1.0        
  21.0  DI     09 02 20 00  01 01 00 a0  32 09 04 00  00 02 ff ff  .. .....2.......        25.2.0        
               ff 04 07 05  81 02 40 00  00 07 05 02  02 40 00 00  ......@......@..        25.2.16      
  21.0  CTL    80 00 00 00  00 00 02 00                            GET STATUS              26.1.0        
  21.0  DI     03 00                                               ..                      26.2.0        
  21.0  CTL    00 09 01 00  00 00 00 00                            SET CONFIG              27.1.0        
  21.2  DO     00 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f  ................        28.1.0        
               10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f  ................        28.1.16      
  21.2  DO     01 02 03 04  05 06 07 08  09 0a 0b 0c  0d 0e 0f 10  ................        29.1.0        
               11 12 13 14  15 16 17 18  19 1a 1b 1c  1d 1e 1f 20  ...............         29.1.16      
  21.1  DI     00 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f  ................        30.1.0        
               10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f  ................        30.1.16      
  21.2  DO     02 03 04 05  06 07 08 09  0a 0b 0c 0d  0e 0f 10 11  ................        31.1.0        
               12 13 14 15  16 17 18 19  1a 1b 1c 1d  1e 1f 20 21  .............. !        31.1.16      
  21.1  DI     01 02 03 04  05 06 07 08  09 0a 0b 0c  0d 0e 0f 10  ................        32.1.0        
               11 12 13 14  15 16 17 18  19 1a 1b 1c  1d 1e 1f 20  ...............         32.1.16      
  21.2  DO     03 04 05 06  07 08 09 0a  0b 0c 0d 0e  0f 10 11 12  ................        33.1.0        
               13 14 15 16  17 18 19 1a  1b 1c 1d 1e  1f 20 21 22  ............. !"        33.1.16      
  21.1  DI     02 03 04 05  06 07 08 09  0a 0b 0c 0d  0e 0f 10 11  ................        34.1.0        
               12 13 14 15  16 17 18 19  1a 1b 1c 1d  1e 1f 20 21  .............. !        34.1.16
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
这样吧,我讲一下我设计的思路。
STM32功能:每次windows程序发送数据过来,则保存在缓冲区内;若windows程序读取数据,则把缓冲区内的数据发送出去。

windows程序功能:执行一次功能则发送32字节数据给STM32,然后读取刚刚发送出去的32字节数据,也就是说每次发送和读取的数据应该是一样。

以下是bus hound的数据。
测试步骤:

打开windows程序,第一次发送“00 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f 10 11 12 13  14 15 16 17  18 19 1a 1b  1c 1d 1e 1f” 32字节数据。bus hound上没有显示有读取数据,但是windows上显示读取数据都为0xcc;

...
关键是你的Windows程序,为什么"Bus hound上没有显示有读取数据"?显然读取数据的操作并没有发送USB请求给STM32。
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 还是没看懂……
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表