mBed USBMSD 疑问
2019-07-20 03:14发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
本帖最后由 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字符串不能被发送.
这个问题如何解决,请大侠帮忙,谢谢!
一周热门 更多>