完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
移植到UCOSII,我们综合是研究帮你搞好了。。。,参考着移植过来就行了
|
|
|
|
看了原子哥的STM32F407中关于USB读卡器的视频,感觉讲的很笼统,只是讲了讲移植,那些函数如何用,为啥那么改的,都没有说。换个其他的u***设备就不知道怎么用了,想移植到ucos上,也是毫无头绪,求指导
|
|
|
|
好的,我研究一下综合例程。另外,再向您请教一下USB的相关问题,有点卡住想不明白了。在u*** host msc模式中,在轮询处理函数中void USBH_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost)
对枚举完成后的程序不太理解,尤其是这里 [AppleScript] 纯文本查看 复制代码 case HOST_CLASS: /* process class state machine */ status = phost->class_cb->Machine(pdev, phost); USBH_ErrorHandle(phost, status); break; 第3行进入对应的函数后,经过 USBH_MSC_BOT_INIT_STATE USBH_MSC_BOT_RESET USBH_MSC_GET_MAX_LUN 进入case USBH_MSC_TEST_UNIT_READY [AppleScript] 纯文本查看 复制代码 case USBH_MSC_TEST_UNIT_READY: /* Issue SCSI command TestUnitReady */ mscStatus = USBH_MSC_TestUnitReady(pdev); if(mscStatus == USBH_MSC_OK ) { USBH_MSC_BOTXferParam.MSCState = USBH_MSC_READ_CAPACITY10; MSCErrorCount = 0; status = USBH_OK; } else { USBH_MSC_ErrorHandle(mscStatus); } break; 进入第3行的子函数 [AppleScript] 纯文本查看 复制代码 uint8_t USBH_MSC_TestUnitReady (USB_OTG_CORE_HANDLE *pdev){ uint8_t index; USBH_MSC_Status_TypeDef status = USBH_MSC_BUSY; if(HCD_IsDeviceConnected(pdev)) { switch(USBH_MSC_BOTXferParam.CmdStateMachine) { case CMD_SEND_STATE: /*Prepare the CBW and relevent field*/ USBH_MSC_CBWData.field.CBWTransferLength = 0; /* No Data Transfer */ USBH_MSC_CBWData.field.CBWFlags = USB_EP_DIR_OUT; USBH_MSC_CBWData.field.CBWLength = CBW_LENGTH_TEST_UNIT_READY; USBH_MSC_BOTXferParam.pRxTxBuff = USBH_MSC_CSWData.CSWArray; USBH_MSC_BOTXferParam.DataLength = USBH_MSC_CSW_MAX_LENGTH; USBH_MSC_BOTXferParam.MSCStateCurrent = USBH_MSC_TEST_UNIT_READY; for(index = CBW_CB_LENGTH; index != 0; index--) { USBH_MSC_CBWData.field.CBWCB[index] = 0x00; } USBH_MSC_CBWData.field.CBWCB[0] = OPCODE_TEST_UNIT_READY; USBH_MSC_BOTXferParam.BOTState = USBH_MSC_SEND_CBW; /* Start the transfer, then let the state machine magage the other transactions */ USBH_MSC_BOTXferParam.MSCState = USBH_MSC_BOT_USB_TRANSFERS; USBH_MSC_BOTXferParam.BOTXferStatus = USBH_MSC_BUSY; USBH_MSC_BOTXferParam.CmdStateMachine = CMD_WAIT_STATUS; status = USBH_MSC_BUSY; break; case CMD_WAIT_STATUS: if(USBH_MSC_BOTXferParam.BOTXferStatus == USBH_MSC_OK) { /* Commands successfully sent and Response Received */ USBH_MSC_BOTXferParam.CmdStateMachine = CMD_SEND_STATE; status = USBH_MSC_OK; } else if ( USBH_MSC_BOTXferParam.BOTXferStatus == USBH_MSC_FAIL ) { /* Failure Mode */ USBH_MSC_BOTXferParam.CmdStateMachine = CMD_SEND_STATE; status = USBH_MSC_FAIL; } else if ( USBH_MSC_BOTXferParam.BOTXferStatus == USBH_MSC_PHASE_ERROR ) { /* Failure Mode */ USBH_MSC_BOTXferParam.CmdStateMachine = CMD_SEND_STATE; status = USBH_MSC_PHASE_ERROR; } break; default: break; } } return status;} 执行完第一个case CMD_SEND_STATE后,返回的状态不就成了USBH_MSC_BUSY了,返回到上一层 [AppleScript] 纯文本查看 复制代码 case USBH_MSC_TEST_UNIT_READY: /* Issue SCSI command TestUnitReady */ mscStatus = USBH_MSC_TestUnitReady(pdev); if(mscStatus == USBH_MSC_OK ) { USBH_MSC_BOTXferParam.MSCState = USBH_MSC_READ_CAPACITY10; MSCErrorCount = 0; status = USBH_OK; } else { USBH_MSC_ErrorHandle(mscStatus); } break; 这不是要执行USBH_MSC_ErrorHandle(mscStatus);这个语句了,还如何往下执行呢? 我看process这个程序是一直要执行到 case USBH_MSC_DEFAULT_APPLI_STATE: 才能转换到用户自己的应用程序当中,这如何过来的? |
|
|
|
关于u*** host msc处理函数的问题 我新建了一个悬赏帖 http://www.openedv.com/thread-104407-1-1.html 希望您能解答,谢谢!
|
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
630浏览 5评论
670浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:17 , Processed in 0.962137 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号