/**
*
读磁盘扇区命令
* @param sect
读取的物理扇区号
* @param *buf
数据缓冲区指针
* @return 0 -
成功
*/
short
ufiReadSect(
DWORD
sect,
BYTE
*buf)
{
READ_10
*read10;
CBW
*cbw;
//
设置
Bulk-Only
协议参数
cbw = &ufiCmdRunning.
cbw
;
cbw->
dCBW_Signature
= CBW_SIGNATURE;
cbw->
dCBW_Tag
= 0x60a624de;
cbw->
dCBW_DataXferLen
= 512;
cbw->
bCBW_Flag
=0x80;
cbw->
bCBW_LUN
=0;
cbw->
bCBW_CDBLen
= 16;
//sizeof(CDB_RBC);
//
设置
UFI
命令参数
read10 = &(cbw->
cdbRBC
.
ufiRead10
);
read10->
OperationCode
= 0x28;
read10->
LBA_0
= byteInInt(sect, 0);
read10->
LBA_1
= byteInInt(sect, 1);
read10->
LBA_2
= byteInInt(sect, 2);
read10->
LBA_3
= byteInInt(sect, 3);
read10->
XferLen_0
= 0x01;
read10->
XferLen_1
= 0x00;
//
设置状态扫描函数所需要的参数
ufiCmdRunning.
funUfiCmd
= bulkRead;
ufiCmdRunning.
pBuf
= buf;
ufiCmdRunning.
state
= UFI_STATE_BEGIN;
//
通过
Bulk
端口发送读命令
bulkRead((
unsigned
char
*)&ufiCmdRunning.
cbw
, buf, (
unsigned
char
*)&ufiCmdRunning.
csw
);
return
0;
}
|
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/317092,如需转载请自行联系原作者