阅读:2054回复:4
请教关于SCSI~RBC命令集中的READ(10)命令发到设备后设备该做哪些处理。(50分题)
READ(10)命令发到我的设备端后,我的设备服务端固件程序需要做哪些动作来响应主机?这个命令的意思是什么?有数据阶段回复主机吗,或者还是直接回复CSW就可以了?
我看了PHILIPS网站上的那个MASS STORAGE的固件例子程序,但是它那里面用的硬盘接口是ATA接口(真正的硬盘IDE连接),而我这里是要把三星FLASH做成U盘,而且对于硬件我还一知半解,可以肯定的是我这里没有什么ATA接口之类的。不过我想先看懂它原来程序的意思,再进行修改,请大家帮我看看它原来程序的意思: BOOLEAN RBC_Read(void) { #define cdbRead RBC_CDB.RbcCdb_Read Hal4ATA_SectCntInBlk = ATADevExt_IDData.MaximumBlockTransfer << BITNUM4EP2PKT_PER_SECTOR; /* // Setting ATA Hardware */ ATABF_IDEXfer_dir = 1; Hal4ATA_ReadWriteSetting(); /* // config TPBulkXfer Paras */ Xfer_Space &= BOTXFERSPACE_MASK; BOTXfer_atATA = 1; BOTXfer_wResidue = CBW_wXferLen; TPBulksup_ErrorHandler(CASE6,BOTXfer_wResidue); RBC_BuildSenseData(SCSI_SENSE_NO_SENSE,0,0); BOTFSMstate = USBFSM4BOT_DATAIN; return (TRUE); #undef cdbRead } 主要是其中的几个变量Hal4ATA_SectCntInBlk 、ATADevExt_IDData.MaximumBlockTransfer 、 BITNUM4EP2PKT_PER_SECTOR各代表什么意思。请各位大侠指教。 |
|
最新喜欢:zxwits... |
沙发#
发布于:2002-07-25 16:55
你需要做的工作如下:
1.翻译Read10命令,即读出LBA地址和Block长度 2.从FLASH中读LBA地址和Block长度的扇区数据 3.响应Host的DataIn请求,即将读出的(Block*扇区长度)字节的数据打包后发送给主机 4.根据发送的情况回复主机csw 以上是正常情况,若中间出错,需要另外处理。 |
|
板凳#
发布于:2002-07-26 14:58
读出的LBA地址如何转换为FLASH的起始绝对地址?这里面的逻辑块是可以自己定义的吗,我把两个扇区定义为一个逻辑块可以吗(1K大小一个逻辑块)?
不过我估计这里说的块的含义是确定的,BLOCK的长度也是确定的,到底应该是多少? |
|
地板#
发布于:2003-09-15 15:09
我对逻辑块地址和逻辑块长度也有同样的问题?
谁能讲讲? |
|
地下室#
发布于:2003-09-15 18:07
block的大小和数量都是你定义的
看你在read capacity(25――)里面怎么回的了 bpb里也有定义,相应的是扇区总数和扇区大小 你自己定义大小, Flash的 Page = Logical Block Address %0x20 Flash的 Block = Logical Block Address/0x20 0x20,是我们定义一个簇64个扇区的来的 这个看你自己怎么定义了。 当然前面还有些mbr,bpb,fat,root占用些分区 明白了么? |
|