硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2543|回复: 10
收起左侧

[其它] STM32L4—CDC虚拟串口+MSC读卡器复合设备实验问题

[复制链接]

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2021-8-11 11:14:36 | 显示全部楼层 |阅读模式
本帖最后由 ycgxy1650601 于 2021-8-17 18:27 编辑

找不到L4专区,暂时发布在这里,如有违规,我再改正。
MCU:STM32L4R9ZI
用stm32cubeMX分别生成CDC和MSC工程;两个工程分别单独下载,效果OK;然后在CDC工程基础上增加MSC内容,做了一番修改后,改为复合设备工程,工程编译下载后出现两个问题。设备管理器显示正常,如下图
设备管理器composite.JPG



问题1:单独MSC工程(左图)显示正常,复合设备工程(右图)图标显示异常。
正常读卡器实验_手持3.0或单独STM32 Mass Storage(点击“弹出STM32 Mass Storage”后.jpg           问题读卡器实验_cdc基础上加MassStorage(问题1“弹出STM32 Mass Storage”是灰色 问题.jpg


问题2:
下载复合设备程序,点击“弹出HANDLER(G:)”, 设备正常移除;保持连接不动,20秒后,又自动枚举成功(这很奇怪?效果相当于重新插拔usb一次)?
下载单独MSC程序,点击“弹出STM32 Mass Storage”,设备正常移除;之后需要重新插拔usb一次,才能枚举成功(这是正常效果)。
有碰到过的小伙伴吗,帮忙看看,谢谢!

新增问题描述:
保持线路连接不动。上图为单独MSC程序的设备移除后,设备管理器正常显示(设备已删除);下图为复合设备程序的设备移除后,设备管理器异常显示,显示设备运转正常;
正常MassStorage弹出后,设备管理器显示.JPG    问题2异常MassStorage弹出后,设备管理器显示.JPG


续新增问题描述(用USB软件分析):
上图为单独MSC程序。下图为复合设备程序,为啥会自动枚举。
抓包弹出正常.JPG    抓包弹出异常问题2JPG.JPG


续新增问题描述2(用bus xxxxx分析):
上图为单独MSC程序。下图为复合设备程序,为啥会自动枚举。
正常MassStorage弹出后,12.1.0(usb hound).JPG    问题2异常MassStorage弹出后,12.1.0弹出最后一条命令(usb hound).JPG






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-8-11 11:29:02 | 显示全部楼层
复合设备特别注意USB端点的设置,是用的不同端点吧,另外注意加大端点的FIFO
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-8-11 11:36:31 | 显示全部楼层
本帖最后由 ycgxy1650601 于 2021-8-11 11:37 编辑

端点设置,我修改如下:
#define CDC_IN_EP                                   0x81U  /* EP1 for data IN */
#define CDC_OUT_EP                                  0x01U  /* EP1 for data OUT */
#define CDC_CMD_EP                                  0x83U  /* EP2 for CDC commands *///jyg2021

#define MSC_EPIN_ADDR                0x82U
#define MSC_EPOUT_ADDR              0x02U

下面是修改后FIFO
//  HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);//单独cdc工程
//  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);
//  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x80);
              {
                        HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);//复合设备工程
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x20);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 2, 0x20);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 3, 0x40);
                }
我看到手册说最大是1.25KB 的FIFO,所以我按照网上的帖子做了上面修改
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-8-11 12:44:32 | 显示全部楼层
前面回复的没有了?下面再回复
端点地址有修改:
#define CDC_IN_EP                                   0x81U  /* EP1 for data IN */
#define CDC_OUT_EP                                  0x01U  /* EP1 for data OUT */
#define CDC_CMD_EP                                  0x83U  /* EP2 for CDC commands *///jyg2021

#define MSC_EPIN_ADDR                0x82U//jyg2021
#define MSC_EPOUT_ADDR               0x02U

端点FIFO修改:
//  HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);
//  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);
//  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x80);
              {
                        HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x20);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 2, 0x20);
                        HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 3, 0x40);
                }

看手册说明,USB的FIFO为1.25KB,所以参考网上帖子做了如上修改(80+40+20+20+40=1.25KB),不知道对不对?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-8-11 14:40:11 | 显示全部楼层
ycgxy1650601 发表于 2021-8-11 12:44
前面回复的没有了?下面再回复
端点地址有修改:
#define CDC_IN_EP                                    ...

端点部分没啥问题。

可以在Win7电脑上也试试。也许会有点新发现。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-8-11 16:04:26 | 显示全部楼层
eric2013 发表于 2021-8-11 14:40
端点部分没啥问题。

可以在Win7电脑上也试试。也许会有点新发现。

出现一样的情况
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2021-8-12 09:12:44 | 显示全部楼层

那看来是复合的地方没有处理好。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-8-12 16:58:33 | 显示全部楼层
eric2013 发表于 2021-8-12 09:12
那看来是复合的地方没有处理好。

嗯嗯,我还在找问题,有点郁闷
回复

使用道具 举报

19

主题

125

回帖

182

积分

初级会员

积分
182
发表于 2022-4-4 20:17:40 | 显示全部楼层
这位老哥搞好没,这边基于L4的USB CDC+MSC,读写SD卡,串口都没问题。但是工程里面功能做多了后,U盘在资源管理器中就只有一个盘符。 有这个:babble detected

Device  Phase  Data                                                                                                    Description                       Cmd.Phase.Ofs(rep)   
------  -----  ------------------------------------------------------------------------------------------------------  --------------------------------  ------------------  
171.1  USTS   c0000012                                                                                                babble detected                      15395.1.0      
回复

使用道具 举报

4

主题

16

回帖

28

积分

新手上路

我的梦想是不坐在电脑前

积分
28
发表于 2024-1-16 16:32:01 | 显示全部楼层
l4的复合设备调试好了吗?能否分享下代码?最近也在整这个,MSC经常显示感叹号
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 10:48 , Processed in 0.250660 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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