OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4316|回复: 0

mBed USBMSD 疑问

[复制链接]

1

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2016-10-26
在线时间
43 小时
发表于 2019-3-17 20:38:12 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 caxfan 于 2019-3-17 20:54 编辑

STM32F407VE板子使用mbed无OS 版本BSP_ID163
开发SDIOBlockDevice时,参考例程编译成功,但是SD盘没有出现:
[url=][/url]

1.出现 USB大容量存储设备 2.其它设备->#的设备
使用USBlyzer监测发现


[url=][/url]

[url=][/url]
应为inquiry字符串

BulkIn端点应答明显错误
查看程序USBMSD.cpp

bool USBMSD::inquiryRequest (void) {
    uint8_t inquiry[] = { 0x00, 0x80, 0x00, 0x01,
                          36 - 4, 0x80, 0x00, 0x00,
                          'M', 'B', 'E', 'D', '.', 'O', 'R', 'G',
                          'M', 'B', 'E', 'D', ' ', 'U', 'S', 'B', ' ', 'D', 'I', 'S', 'K', ' ', ' ', ' ',
                          '1', '.', '0', ' ',
                        };
    if (!write(inquiry, sizeof(inquiry))) {
        return false;
    }
    return true;
}

bool USBMSD::write (uint8_t * buf, uint16_t size) {
    if (size >= cbw.DataLength) {
        size = cbw.DataLength;
    }
    stage = SEND_CSW;
    if (!writeNB(EPBULK_IN, buf, size, MAX_PACKET_SIZE_EPBULK))
{
        return false;
    }
...}
writeNB->endpointWrite->HAL_PCD_EP_Transmit->USB_EPStartXfer

而stm32f4xx_||_usb.c中
USB_EPStartXfer函数

    if (ep->type == EP_TYPE_ISOC)
    {
      USB_WritePacket(USBx, ep->xfer_buff, ep->num, ep->xfer_len, dma);   
    }
即端点类型是EP_TYPE_ISOC(只有EPISO_OUT EPISO_IN)才发送ep->xfer_buff,
即上面inquiry字符串,write函数里是EPBULK_IN发送,该端点类型是EP_TYPE_BULK型,也就是说inquiry字符串不能被发送.

这个问题如何解决,请大侠帮忙,谢谢!

2.jpg
1.jpg
3.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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