完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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命令内容接收不到!!! 万分感激! |
|
相关推荐
1个回答
|
|
USB MSC SCSI命令指纹头协议工作不正常可能有以下几个原因:
1. 数据缓冲区未正确处理:确保在STM32Cube FW_F7 V1.2.0中,USB MSC的数据缓冲区已正确初始化和处理。如果缓冲区未正确处理,可能会导致接收到的数据不准确,从而影响命令的识别。 2. 命令解析错误:检查STM32Cube FW_F7 V1.2.0中的命令解析逻辑,确保CMD_GET_PARAM命令(0x03)被正确识别。如果命令解析逻辑有误,可能会导致接收到的命令被错误地识别为其他命令。 3. USB MSC状态机问题:检查STM32Cube FW_F7 V1.2.0中的USB MSC状态机实现,确保状态转换正确。如果状态机实现有误,可能会导致USB MSC在接收数据时出现异常。 4. USB MSC中断处理问题:检查STM32Cube FW_F7 V1.2.0中的USB MSC中断处理逻辑,确保在接收到数据时,中断处理函数能够正确地处理数据。如果中断处理逻辑有误,可能会导致数据未被正确处理。 5. 固件版本问题:虽然STM32Cube FW_F7 V1.2.0是一个较新的固件版本,但仍有可能存在一些已知或未知的问题。尝试查找是否有关于此问题的已知问题,并查看是否有可用的固件更新或补丁。 6. 硬件问题:检查STM32F756硬件,确保硬件连接正确且没有损坏。硬件问题可能会导致数据传输不稳定,从而影响命令的识别。 为了解决这个问题,可以尝试以下步骤: 1. 仔细检查STM32Cube FW_F7 V1.2.0中的命令解析逻辑,确保CMD_GET_PARAM命令(0x03)被正确识别。 2. 检查STM32Cube FW_F7 V1.2.0中的USB MSC状态机实现,确保状态转换正确。 3. 检查STM32Cube FW_F7 V1.2.0中的USB MSC中断处理逻辑,确保在接收到数据时,中断处理函数能够正确地处理数据。 4. 查找是否有关于此问题的已知问题,并查看是否有可用的固件更新或补丁。 5. 检查STM32F756硬件连接,确保硬件连接正确且没有损坏。 6. 如果问题仍然存在,尝试使用其他开发环境或固件版本进行测试,以排除环境或固件版本问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1649 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
994 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
694 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1613 浏览 2 评论
1872浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
656浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
543浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 21:37 , Processed in 0.937031 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号