【CH376S】扇區(qū)寫入不正常求助~~~附代碼~~

bool FileSecWrite(char* cpWrBuf, char cTarSecNbr)

{

char cRx[10];

int nLocPt=0;

char cPasSecNbr = 0;


do

{

if( CH_.SecWrite(cTarSecNbr) != 0x14 ) return false;//申請(qǐng)寫入個(gè)數(shù)


if( CH_.ReadEP0(cRx) == 0x00 ) return false;

cPasSecNbr = cRx[1];????????????????????????????????//實(shí)際寫入個(gè)數(shù)


if( CH_.DiskWrite(*(int*)&cRx[5], cPasSecNbr) != 0x1E ) return false;


do{

CH_.WrHostData(cpWrBuf + nLocPt, 64);

nLocPt += 64;

}while( CH_.DiskWriteGo() == 0x1E );


cTarSecNbr -= cPasSecNbr;????????????????//更新下次申請(qǐng)寫入個(gè)數(shù)

}while(cTarSecNbr != 0x00);????//若剩余寫入個(gè)數(shù)為0則退出


return true;

}

//函數(shù)外面會(huì)Close這個(gè)文件以修改文件長(zhǎng)度



以上代碼能運(yùn)行到true,而且為了實(shí)驗(yàn)方便,也不采用太大的cTarSecNbr值(取8)。整個(gè)流程大概如下:

申請(qǐng)寫入cTarSecNbr個(gè)扇區(qū)----》0x27命令讀返回,取得當(dāng)前文件LBA(即*(int*)&cRx[5])和允許本次寫入扇區(qū)數(shù)目cPasSecNbr----》以64個(gè)字節(jié)為一次數(shù)據(jù)傳送,直到本次扇區(qū)數(shù)目寫完,即調(diào)用WrHostData寫入數(shù)據(jù)cPasSecNbr乘以8這么多次----》檢查還有沒(méi)有剩下的未完成扇區(qū),有則循環(huán),無(wú)則退出----》關(guān)閉文件。


但實(shí)驗(yàn)結(jié)果總是出乎意料,不能寫入,求各位幫助解答~~~謝謝~

你這個(gè)里面的代碼不全,命令怎么發(fā)的都看不到,你參考下面的扇區(qū)寫函數(shù),改一改你的函數(shù)。

UINT8?CH376DiskWriteSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount )? /* 將緩沖區(qū)中的多個(gè)扇區(qū)的數(shù)據(jù)塊寫入U(xiǎn)盤,不支持SD卡 */
/* iLbaStart 是寫入的線起始性扇區(qū)號(hào), iSectorCount 是寫入的扇區(qū)數(shù) */
{
?UINT8?s, err;
?UINT16?mBlockCount;
?for ( err = 0; err != 3; ++ err ) {? /* 出錯(cuò)重試 */
??xWriteCH376Cmd( CMD5H_DISK_WRITE );? /* 向USB存儲(chǔ)器寫扇區(qū) */
??xWriteCH376Data( (UINT8)iLbaStart );? /* LBA的最低8位 */
??xWriteCH376Data( (UINT8)( (UINT16)iLbaStart >> 8 ) );
??xWriteCH376Data( (UINT8)( iLbaStart >> 16 ) );
??xWriteCH376Data( (UINT8)( iLbaStart >> 24 ) );? /* LBA的最高8位 */
??xWriteCH376Data( iSectorCount );? /* 扇區(qū)數(shù) */
??xEndCH376Cmd( );
??for ( mBlockCount = iSectorCount * DEF_SECTOR_SIZE / CH376_DAT_BLOCK_LEN; mBlockCount != 0; -- mBlockCount ) {? /* 數(shù)據(jù)塊計(jì)數(shù) */
???s = Wait376Interrupt( );? /* 等待中斷并獲取狀態(tài) */
???if ( s == USB_INT_DISK_WRITE ) {? /* USB存儲(chǔ)器寫數(shù)據(jù)塊,請(qǐng)求數(shù)據(jù)寫入 */
????CH376WriteHostBlock( buf, CH376_DAT_BLOCK_LEN );? /* 向USB主機(jī)端點(diǎn)的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */
????xWriteCH376Cmd( CMD0H_DISK_WR_GO );? /* 繼續(xù)執(zhí)行USB存儲(chǔ)器的寫操作 */
????xEndCH376Cmd( );
????buf += CH376_DAT_BLOCK_LEN;
???}
???else break;? /* 返回錯(cuò)誤狀態(tài) */
??}
??if ( mBlockCount == 0 ) {
???s = Wait376Interrupt( );? /* 等待中斷并獲取狀態(tài) */
???if ( s == USB_INT_SUCCESS ) return( USB_INT_SUCCESS );? /* 操作成功 */
??}
??if ( s == USB_INT_DISCONNECT ) return( s );? /* U盤被移除 */
??CH376DiskReqSense( );? /* 檢查USB存儲(chǔ)器錯(cuò)誤 */
?}
?return( s );? /* 操作失敗 */
}


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频