STM32
直播中

陈秀珍

7年用户 900经验值
私信 关注
[问答]

STM32F407VE使用mbed无OS开发SDIOBlockDevice时,inquiry字符串不能被发送如何解决?

STM32F407VE板子使用mbed无OS开发SDIOBlockDevice时,参考例程编译成功,但是SD盘没有出现:
1.出现 USB大容量存储设备 2.其它设备->#的设备
使用USBlyzer监测发现
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)

胖子的逆袭

2024-4-22 15:56:23
1。检查SDIO配置:确保SDIO引脚(CLK、CMD、D0-D3)在代码中正确配置。确保它们正确连接到板上的SD卡插槽。
2.检查SDIOBlockDevice初始化:确保使用正确的参数(如SD卡块大小和块数)正确初始化SDIOBlockDevice。3.验证SD卡兼容性:确保您使用的SD卡与SDIO接口和您的板兼容。此外,请尝试使用其他SD卡查看问题是否仍然存在。4.调试USBMSD类:您可以添加调试打印语句,也可以使用调试器检查查询请求是否正确发送,以及是否收到任何错误或响应。
5.检查USBMSD类的实现:确保USBMSD级的实现是正确的,并且与您的板的硬件配置匹配。
6.查阅mbed OS和STM32F4文档和社区:您可以查看mbed OS文档和论坛,以及STM32F4参考手册,了解有关使用SDIOBlockDevice和解决类似问题的更多信息和示例。
通过执行这些步骤,您应该能够使用mbed操作系统识别并解决STM32F407VE板上的SDIOBlockDevice问题。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分