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

USB MSC SCSI 命令指纹头协议工作不正常

[复制链接]
stbking 提问时间:2018-12-7 16:29 /
Hi,
平台F756, STM32Cube  FW_F7 V1.2.0, 基于USB MSC demo 例子程序开发指纹头产品。
指纹头和PC通讯协议是基于SCSI ,协议所有命令是 通过 SCSI 命令0xEF来实现。
比如指纹头协议有30个命令,其中第一个为 CMD_TEST_CONNECTION = 0x01. 第3个为 CMD_GET_PARAM =0x03

目前的问题是第一个命令实现了,PC 上的程序PC_APP可以打开usb设备.但当PC_APP上按“获得参数”按钮,向F756发送 CMD_GET_PARAM命令后,
F756程序中仍旧获得第一个命令CMD_TEST_CONNECTION。

感觉是USB bot状态不对,里面的data没被清除,不能正常接收PC_APP发过来的USB/SCSI 命令了。

相关源码如下:(In usbd_msc_scsi.c)

在 int8_t SCSI_ProcessCmd(USBD_HandleTypeDef  *pdev, uint8_t lun,  uint8_t *params)中:
......
case SCSI_VERIFY10:
    return SCSI_Verify10(pdev, lun, params);
  case SCSI_PROTOCOL_B_COMMAND:
          return SCSI_ProcessProtocol(pdev,params);

.......


然后在 SCSI_ProcessProtocol(pdev,params) 中:

static int8_t SCSI_ProcessProtocol(USBD_HandleTypeDef  *pdev,uint8_t *params)
{
    USBD_MSC_BOT_HandleTypeDef  *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData;
    uint16_t cmd;
    if(g_bDeviceOpened==FALSE){
       hmsc->bot_state=USBD_BOT_DATA_OUT;
       USBD_LL_PrepareReceive(pdev,MSC_EPOUT_ADDR, hmsc->bot_data,COMMAND_PACKET_LENGTH);
         g_bDeviceOpened=TRUE;
         return 0;
    }       
    cmd=MAKEWORD(hmsc->bot_data[4],hmsc->bot_data[5]);       
    switch(cmd){
                case CMD_TEST_CONNECTION:      <-设备打开成功后,即使PC_APP发出CMD_GET_PARAM命令,F756还是得到这个命令
                   hmsc->bot_state=USBD_BOT_DATA_OUT;
                        if(hmsc->cbw.bmFlags==0x0){
                           MSC_BOT_SendCSW(pdev,USBD_CSW_CMD_PASSED);
                           hmsc->bot_data_length=0;
                        }else{
                      MSC_BOT_SendCSW(pdev,USBD_CSW_CMD_PASSED);
                      InitResponsePacket(CMD_TEST_CONNECTION, 0, 0, NULL, 0,0);
                      memcpy(hmsc->bot_data,g_pRcmPacket,RESPONSE_PACKET_LENGTH);
                      hmsc->bot_data_length=RESPONSE_PACKET_LENGTH;       
                            }                       
                   return 0;
                case CMD_GET_PARAM:              <-------永远得不到这个协议命令!!!正常情况下,
                                                                PC_APP上发出CMD_GET_PARAM命令后,F756上应该得到这个命令
                     PROTOCOL_GetParam(hmsc);
                     break;

.........

请各位高手帮忙看看是不是我在得到CMD_TEST_CONNECTION命令后,还没有完全处理正确,因此使得下面的其他SCSI命令内容接收不到!!!
万分感激!



收藏 评论2 发布时间:2018-12-7 16:29

举报

2个回答
stbking 回答时间:2018-12-11 14:02:55
问题已经解决了!
hpdell 回答时间:2018-12-12 17:01:26
stbking 发表于 2018-12-11 14:02
问题已经解决了!

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