你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

mBed USBMSD 疑问

[复制链接]
caxfan 提问时间:2019-3-17 01:03 /
本帖最后由 caxfan 于 2019-3-17 20:57 编辑

STM32F407VE板子使用mbed无OS开发SDIOBlockDevice时,参考例程编译成功,但是SD盘没有出现:
1.出现 USB大容量存储设备 2.其它设备->#的设备
使用USBlyzer监测发现
[url=]代码[/url]

[url=][/url]
[url=][/url]

[url=][/url]


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才发送ep->xfer_buff即上面inquiry字符串
write函数里是EPBULK_IN发送,该端点类型是EP_TYPE_BULK型,也就是说inquiry字符串不能被发送.
这个问题如何解决,请大侠帮忙,谢谢!
1.jpg
2.jpg
3.jpg
收藏 评论4 发布时间:2019-3-17 01:03

举报

4个回答
butterflyspring 回答时间:2019-4-24 12:12:05
这个问题看起来信息量比较大,建议你参考一下官方的例程,STM32Cube_FW_F4_V1.24.0\Projects\STM324xG_EVAL\Applications\USB_Device\MSC_Standalone   如果是你需要的功能可以参照一下

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

xdwdf 回答时间:2019-4-28 20:00:47
谢谢资料
caxfan 回答时间:2019-5-5 23:44:12
发现问题
是源程序有bug
uint8_t inquiry[]必须声明为static变量或全局变量
xmshao 回答时间:2019-5-10 16:07:39
caxfan 发表于 2019-5-5 23:44
发现问题
是源程序有bug
uint8_t inquiry[]必须声明为static变量或全局变量 ...

谢谢反馈!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版