阅读:1128回复:3
请教 USB 的SCSI怎样支持多个设备
我的系统有Nand 和SD Card , 使用SCSI协议实现了U盘,但是现在只能认出一个设备, 请问怎样让PC知知道我有两个设备
CBW的bLUN总是0 先谢谢大家了 strcut CBW //命令块包结构 { unsigned long dSignature; //包标识符 USBC unsigned long dTag; //包识别符 unsigned long dDataLength; //期望传输的数据 unsigned char bmFlag; //方向标志 unsigned char bLUN; //LUN unsigned char bCBLength; //命令块大小 unsigned char CBWCB[16]; //命令块 |
|
沙发#
发布于:2007-03-22 08:45
为什么要lun一直是0呢?0和1不是正好是2个设备吗?
|
|
|
板凳#
发布于:2007-03-22 08:48
枚举时,你给设备设置了一个地址吗?一个设备至少要一个单独的地址!你的代码写的在全点。偶看看?
shenfei5@163.com |
|
地板#
发布于:2007-03-23 23:53
__align(32) SCSI_DATA_STANDARD_INQUIRY g_StandardInquiry_1 =
{ SCSI_DEVICE, // PeriphQualifier:3, PeriphDevType:5 0x80, //bDevTypeModifier = (RMB:1, DevTypeModifier:7) // Attention: 0x80--removable disk, only support one partion, PD-DRM requirement // 0x00--local disk, can support multi-partions, 2005-1-17 , By ccyu 0, // bVersion = (ISOVersion:2, ECMAVersion:3, ANSIVersion:3) 0x01, // bDeviceCapability = (AENC:1, TrmIOP:1, fReserved1:2, ResponseFormat:4) 0x00, // sizeof(SCSI_DATA_STANDARD_INQUIRY) - 5, // bAdditionalLength (n-5) 0, // bReserved2 0, // bReserved3 0, // bDeviceSup port = (RelAddr: 1, WBus32:1, WBus16:1, Sync:1, // Linked:1, Reserved4:1, CmdQueue:1, SoftReset:1) {'U','S','B','2','.','0',' ',' '}, // sVendorID[8] {'S','D','_','M','M','C',' ','C','A','R','D',' ',' ',' ',' ',' '}, // sProductID[16] {'1','.','1','0'} // sProductRevision[4] }; __align(32) SCSI_DATA_STANDARD_INQUIRY g_StandardInquiry_2 = { SCSI_DEVICE, // PeriphQualifier:3, PeriphDevType:5 0x80, // bDevTypeModifier = (RMB:1, DevTypeModifier:7) 0, // bVersion = (ISOVersion:2, ECMAVersion:3, ANSIVersion:3) 0, // bDeviceCapability = (AENC:1, TrmIOP:1, fReserved1:2, ResponseFormat:4) sizeof(SCSI_DATA_STANDARD_INQUIRY) - 5, // bAdditionalLength (n-5) 0, // bReserved2 0, // bReserved3 0, // bDeviceSup port = (RelAddr: 1, WBus32:1, WBus16:1, Sync:1, // Linked:1, Reserved4:1, CmdQueue:1, SoftReset:1) {'U','S','B','2','.','0',' ',' '}, // sVendorID[8] {'M','e','d','i','a',' ','P','l','a','y','e','r',' ',' ',' ',' '}, // sProductID[16] {'2','.','0','0'} }; 上边是设备描述表 case SCSI_CMD_INQUIRY: { struct SCSIInquiry* pInquiry = (struct SCSIInquiry*)&SCSICBW->CBWCB[0]; MASS_DRIVE_GetIsExistent(FIRST_TIME,SCSICBW->bLUN); if((pInquiry->Reserved1 == 0x01) && (pInquiry->PageCode == 0x80)) //3request SCSI serial number for DRM { packetLen = MIN(SCSICBW->dDataLength, sizeof(SerialPage)); USBSlave_WriteMSCEP(SerialPage, packetLen); } else// considering all other commands as standard INQUARY command response { packetLen = MIN(SCSICBW->dDataLength, sizeof(SCSI_DATA_STANDARD_INQUIRY)); if(SCSICBW->bLUN == SCSI_SDCARD_LUN) { USBSlave_WriteMSCEP((void *)&g_StandardInquiry_1, packetLen); } else { USBSlave_WriteMSCEP((void *)&g_StandardInquiry_2, packetLen); } } SCSI_SetSenseKey(SCSICBW->bLUN, SCSI_SENSEKEY_NOSENSE,SCSI_ASC_NO_ADDITIONAL_SENSE_INFO); } break; |
|