原来用W25Q64+STM32F205 做过MSC虚拟U盘操作很好。现在要添加一个SD卡,使用了STM32_USB-Host-Device_Lib_V2.1.0库。但是发现:第二个虚拟U盘(SD卡)使用512M的卡测试没有问题,交到用户手上后,使用8G的TF卡发现虚拟的U盘无法格式化,可以枚举成功,但不认识U盘,一直提示没有插卡。经过追踪测试发现:
1:用4G的TF卡格式化时,选用每一个扇区512字节,可以认识虚拟U盘。但在win7,win10下默认格式化是4096字节,则无法识别。此时TF卡的物理第一个扇区只有一个MBR的跳转扇区数。
此时PC机无法根据跳转扇区数去查找到逻辑第一个扇区。追踪数据:PC机反复发出读一个物理扇区的指令,STM32F205也将512个字节发回给PC机,但无响应。是PC机端驱动有问题?
2:查看USBD_MSC_SCSI.c 文件发现:块地址的变量定义有问题:uint32_t SCSI_blk_addr;但程序中却有: SCSI_blk_addr *= SCSI_blk_size; 当用4G以上的卡这样计算必定会溢出。
但是改成:uint64_t SCSI_blk_addr; 结果也一样,PC机无法继续执行。因此问题不在这里。
3:用W25Q64和小容量的SD,一切正常说明程序没有问题,但为何用4G以上的卡就出问题?
4:系统中有FATFS,无论什么TF(1G,4G,8G,16G)均可以认识,并可以读写数据,说明TF也没有问题。用f_mkfs (1,1,512)格式化后的TF可以虚拟成U盘,用f_mkfs (1,1,4096)格式化的TF,虚拟U盘不成功!
|