阅读:3855回复:15
scsi miniport driver问题,在线寻帮助!
公司做的scsi miniport driver 有一个bug,详细情况如下:
这个驱动是专门为SD和MMC卡而做的,现在的问题是我可以FORMAT MMC 卡,但是不能FORMAT SD 卡,而这两个卡用的是同一个IP,而且驱动也是一样的。看驱动代码发觉子所以不能格式化是因为在SCSIStartio例程里面SRB->CDB[0]不等于SCSIOP_READ,在mmc格式化时就有SCSIOP_READ操作。我查了一些资料发现srb的数据结构都是操作系统的port driver 填充的。我现在想问的是我们有办法操作这些数据结构吗?为什么同样的操作引起在SCSIStartio例程里路径不同?(是不是驱动的初始化的引起的?)这个问题困扰我好几天了,哪位做过这方面的清给于赐教,非常谢谢! |
|
沙发#
发布于:2004-05-27 15:54
ding
|
|
板凳#
发布于:2004-05-28 13:02
SRB->CDB[0]不是read不是很正常么?port driver是不会错的,SRB->CDB[0]是什么东西?
|
|
地板#
发布于:2004-05-28 16:08
terrychen:
谢谢你的回复。 我第一次作scsi miniport 驱动程序,刚开始学,有很多不懂。这次用sandiak 64M 的SD 卡是不能格式化的(不能得到“format complete”提示),但我的美国那边的同事告诉我用 SanDisk 16MB 和Lexar 128MB SD卡时刻以格式化的。你能不能告诉我导致这问题的可能原因吗?(我仔细察看了DEBUG信息,发现POPRT 驱动没有发SCSIOP_READ和SCSIOP_WRITE 指令,现在是不知道为什么PORT 驱动不给我的MINIPORT 驱动发这些指令?)非常谢谢! |
|
地下室#
发布于:2004-05-28 16:43
我明白你的意思,你的意思就是说为什么port不给你miniport发read,write命令,但是做格式化也不全是read,write,还有别的命令在里面,我问的是你那些命令既然不是read,write,那是些什么命令?port driver总会发命令的,你看看是什么命令,再看看你的miniport driver里面对这些命令的实现都正确么?
|
|
5楼#
发布于:2004-05-28 17:22
我看了一下PORT驱动在格式化传给我的MINIPORT驱动的命令:
SCSIOP_TEST_UNIT_READY(最多) SCSIOP_MODE_SENSE SCSIOP_READ_CAPACITY(最多) SCSIOP_VERIFY(比较多) 我不知道这种情况是不是何初始化也有关系? 非常谢谢! |
|
6楼#
发布于:2004-05-30 15:58
SCSIOP_TEST_UNIT_READY是用来测试硬件设备的
SCSIOP_READ_CAPACITY是读取容量信息的 相应的命令你可查看scsi规范,具体我就不在这里多说了 至于初试化问题,你需要看具体的scsi设备(不同scsi设备有细微差别)的规范而定,如果可能将你的程序mail给我,这样或许能更快速的定位你的错误。 |
|
|
7楼#
发布于:2004-05-31 11:26
SCSIOP_TEST_UNIT_READY(最多)
SCSIOP_MODE_SENSE SCSIOP_READ_CAPACITY(最多) SCSIOP_VERIFY(比较多)(比较多) 都是很正常的.在做format的时候经常要操作的。你看看你对这些命令的返回的数据有问题么 |
|
8楼#
发布于:2004-05-31 17:38
AllenZh
非常谢谢你的建议,只是公司有严格的保密制度,代码就。。。。实在是不好意思。 terrychen 我刚才察看了一下这些命令返回的数据主要是对 Srb->ScsiStatus和 Srb->SrbStatus的赋值。 SCSIOP_TEST_UNIT_READY返回的是: Srb->ScsiStatus = SCSISTAT_GOOD; Srb->SrbStatus = SRB_STATUS_SUCCESS|SRB_STATUS_AUTOSENSE_VALID; SCSIOP_MODE_SENSE返回的是: <对senseBuffer和cacheBuffer赋值操作> Srb->ScsiStatus = SCSISTAT_GOOD; Srb->SrbStatus = SRB_STATUS_SUCCESS; SCSIOP_READ_CAPACITY返回的是: <读capacity的一些操作> Srb->ScsiStatus = SCSISTAT_GOOD; Srb->SrbStatus = SRB_STATUS_SUCCESS; SCSIOP_VERIFY返回的是: Srb->ScsiStatus = SCSISTAT_GOOD; Srb->SrbStatus = SRB_STATUS_SUCCESS; 每个Srb完成后都执行了这两步: ScsiPortNotification(RequestComplete, pdx, Srb); ScsiPortNotification(NextRequest, pdx, NULL); 为什么同样规格的卡(容量不一样)有的卡可以格式化有的却不行? 我现在是不是可以定为问题主要是出在startio例程里面? 非常谢谢! |
|
9楼#
发布于:2004-05-31 22:54
AllenZh 你是怎么确定卡只是容量不一样的? 又有什么理由是startio呢? 为什么不可能是卡不一样(当然不仅包括容量)呢? 为什么不可能是其它地方呢? 你仔细查阅一下scsi规范,尤其看看初试化部分,是不是有问题 |
|
|
10楼#
发布于:2004-06-01 09:28
AllenZh,说得很有道理,问题我个人感觉startio里面问题可能大些,SCSIOP_TEST_UNIT_READY(最多)
SCSIOP_MODE_SENSE SCSIOP_READ_CAPACITY(最多) SCSIOP_VERIFY(比较多)(比较多)具体的返回的数值有问题么?比如说你SCSIOP_READ_CAPACITY,返回的block size和Max LBA对么?一个个好好再看看 而且我经常看到mode_sense会返回check condition的情况,你最好check一下 |
|
11楼#
发布于:2004-06-01 09:39
terrychen and AllenZh
thank you very much and i will check my code according to your suggestion. |
|
12楼#
发布于:2004-06-22 18:47
terrychen or AllenZh:
前一段时间出差了,回来继续check这个问题。我们的block size定义为512字节。我想问一下你是怎么确认Max LBA是对的还是错的?我仔细检查了所有SD卡的command发现也都是对的。64M的SD卡可以正常进行读写的,如果Max LBA是错的,应该是不能进行读写SD卡的吧.另一个问题是在我的驱动里我怎么能得到mode_sense的check condition? |
|
13楼#
发布于:2004-06-23 09:05
SCSIOP_READ_CAPACITY返回的是否与你的实际大小一致?
是否你的SD卡对大容量不支持,你使用什么格式(Fat16、32还其它)进行格式化的。 |
|
|
14楼#
发布于:2004-06-23 11:08
SCSIOP_READ_CAPACITY的问题AllenZh说得差不错,mode_sense的问题你不用介意,那个命令是去读一些scsi的配置页,如果没有check condition更好了。说明你们的配置页都不缺
|
|
15楼#
发布于:2004-06-23 13:08
AllenZh or terrychen,
我们的芯片能对128m的SD卡进行正常的读写和格式化(FAT32,NTFS)。但是现在唯独不能对64M的SD卡进行格式化(FAT32,NTFS)。我想问你们一下如果SCSIOP_READ_CAPACITY读出来的容量不对,我还能对我的卡能进行正常的读写吗?现在我的卡问题是不能格式化,要是copy大文件则速度比较慢。 |
|