clear_zcl
驱动牛犊
驱动牛犊
  • 注册日期2002-05-30
  • 最后登录2002-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2054回复:4

请教关于SCSI~RBC命令集中的READ(10)命令发到设备后设备该做哪些处理。(50分题)

楼主#
更多 发布于:2002-07-25 15:34
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各代表什么意思。请各位大侠指教。

最新喜欢:

zxwitsmezxwits...
juhang
驱动牛犊
驱动牛犊
  • 注册日期2002-04-09
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-25 16:55
你需要做的工作如下:
    1.翻译Read10命令,即读出LBA地址和Block长度
    2.从FLASH中读LBA地址和Block长度的扇区数据
    3.响应Host的DataIn请求,即将读出的(Block*扇区长度)字节的数据打包后发送给主机
    4.根据发送的情况回复主机csw

    以上是正常情况,若中间出错,需要另外处理。
clear_zcl
驱动牛犊
驱动牛犊
  • 注册日期2002-05-30
  • 最后登录2002-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-26 14:58
    读出的LBA地址如何转换为FLASH的起始绝对地址?这里面的逻辑块是可以自己定义的吗,我把两个扇区定义为一个逻辑块可以吗(1K大小一个逻辑块)?
    不过我估计这里说的块的含义是确定的,BLOCK的长度也是确定的,到底应该是多少?
li_qingsong
驱动牛犊
驱动牛犊
  • 注册日期2003-07-03
  • 最后登录2004-08-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-09-15 15:09
我对逻辑块地址和逻辑块长度也有同样的问题?
谁能讲讲?
bjzps
驱动小牛
驱动小牛
  • 注册日期2003-03-06
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望22点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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占用些分区
明白了么?

游客

返回顶部