bool FileSecWrite(char* cpWrBuf, char cTarSecNbr)
{
char cRx[10];
int nLocPt=0;
char cPasSecNbr = 0;
do
{
if( CH_.SecWrite(cTarSecNbr) != 0x14 ) return false;//申请写入个数
if( CH_.ReadEP0(cRx) == 0x00 ) return false;
cPasSecNbr = cRx[1]; //实际写入个数
if( CH_.DiskWrite(*(int*)&cRx[5], cPasSecNbr) != 0x1E ) return false;
do{
CH_.WrHostData(cpWrBuf + nLocPt, 64);
nLocPt += 64;
}while( CH_.DiskWriteGo() == 0x1E );
cTarSecNbr -= cPasSecNbr; //更新下次申请写入个数
}while(cTarSecNbr != 0x00); //若剩余写入个数为0则退出
return true;
}
//函数外面会Close这个文件以修改文件长度
以上代码能运行到true,而且为了实验方便,也不采用太大的cTarSecNbr值(取8)。整个流程大概如下:
申请写入cTarSecNbr个扇区----》0x27命令读返回,取得当前文件LBA(即*(int*)&cRx[5])和允许本次写入扇区数目cPasSecNbr----》以64个字节为一次数据传送,直到本次扇区数目写完,即调用WrHostData写入数据cPasSecNbr乘以8这么多次----》检查还有没有剩下的未完成扇区,有则循环,无则退出----》关闭文件。
但实验结果总是出乎意料,不能写入,求各位帮助解答~~~谢谢~