無法寫東西進(jìn)U盤的問題

我用375串口連接單片機(jī)做USB主設(shè)備,連接入U(xiǎn)盤可以讀取數(shù)據(jù),但嘗試用命令DISK_WRITE 寫數(shù)據(jù)到U盤的時(shí)候就收不到375的中斷回復(fù)了,誰能幫忙看下,謝謝?。。?/p>

u8 mWriteSector( unsigned long iLbaStart, unsigned char iSectorCount , u8 * ubuffer ) { unsigned char mIntStatus ; unsigned char *mBufferPoint; unsigned int mBlockCount; unsigned char mLength ; //??′?D′è?64×??úμ?êy?Y CH375_WR_CMD( CMD_DISK_WRITE ); CH375_WR_DAT( (unsigned char)iLbaStart ); CH375_WR_DAT( (unsigned char)( iLbaStart >> 8 ) ); CH375_WR_DAT( (unsigned char)( iLbaStart >> 16 ) ); CH375_WR_DAT( (unsigned char)( iLbaStart >> 24 ) ); CH375_WR_DAT( iSectorCount ); for ( mBlockCount = iSectorCount * CH375_BLK_PER_SEC; mBlockCount != 0; mBlockCount -- ) { mLength = 0x40 ; mIntStatus = mWaitInterrupt( ); if ( mIntStatus == USB_INT_DISK_WRITE ) { CH375_WR_CMD( CMD_WR_USB_DATA7 ); CH375_WR_DAT( mLength ); while ( mLength -- ) CH375_WR_DAT( *ubuffer++ ); CH375_WR_CMD( CMD_DISK_WR_GO ); } else break; } if ( mBlockCount == 0 ) { mIntStatus = mWaitInterrupt( ); if ( mIntStatus == USB_INT_SUCCESS ) return( 0 ); } return( mIntStatus ); }

你使用下面的程序看下可以不可以: /* 將緩沖區(qū)中的多個(gè)扇區(qū)的數(shù)據(jù)塊寫入U(xiǎn)盤 */ unsigned char mWriteSector( unsigned long iLbaStart, unsigned char iSectorCount,unsigned char *mBufferPoint ) /* iLbaStart 是寫入的線起始性扇區(qū)號(hào), iSectorCount 是寫入的扇區(qū)數(shù) */ { unsigned char mIntStatus; unsigned int mBlockCount; unsigned char mLength; CH375_WR_CMD_PORT( CMD_DISK_WRITE ); /* 向USB存儲(chǔ)器寫數(shù)據(jù)塊 */ CH375_WR_DAT_PORT( (unsigned char)iLbaStart ); /* LBA的最低8位 */ CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 8 ) ); CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 16 ) ); CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 24 ) ); /* LBA的最高8位 */ CH375_WR_DAT_PORT( iSectorCount ); /* 扇區(qū)數(shù) */ // mBufferPoint = DISK_BUFFER; /* 指向緩沖區(qū)起始地址 */ for ( mBlockCount = iSectorCount *8; mBlockCount != 0; mBlockCount -- ) { /* 數(shù)據(jù)塊計(jì)數(shù) */ mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_DISK_WRITE ) { /* USB存儲(chǔ)器寫數(shù)據(jù)塊,請(qǐng)求數(shù)據(jù)寫入 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向CH375緩沖區(qū)寫入數(shù)據(jù)塊 */ mLength = 64; CH375_WR_DAT_PORT( mLength ); /* 后續(xù)數(shù)據(jù)的長(zhǎng)度 */ do { CH375_WR_DAT_PORT( *mBufferPoint ); mBufferPoint ++; } while ( -- mLength ); CH375_WR_CMD_PORT( CMD_DISK_WR_GO ); /* 繼續(xù)執(zhí)行USB存儲(chǔ)器的寫操作 */ } else break; /* 返回錯(cuò)誤狀態(tài) */ } if ( mBlockCount == 0 ) { mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_SUCCESS ) return( 0 ); /* 操作成功 */ } return( mIntStatus ); /* 操作失敗 */


試了還是不行, 就是在發(fā)完第一個(gè)64字節(jié)的數(shù)據(jù)后就卡在mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ 這句了,也就是收不到請(qǐng)求寫數(shù)據(jù)的中斷了,怎么回事呢?


求救啊


基本上可以理解為現(xiàn)在根本就不能寫數(shù)據(jù),前面的初始化磁盤有沒有成功?U盤容量有沒有獲取到?一定要保證磁盤容量能獲取.如果磁盤容量不能獲取則發(fā)送R_SENSE命令后,延時(shí)100-200MS后重試獲取磁盤容量命令,反復(fù),直到獲取. 你程序流程基本正確,可能問題出在U盤插上去后并沒有準(zhǔn)備好就去進(jìn)行讀寫操作.造成失敗.


可以獲取容量,也能讀出所有數(shù)據(jù),就是寫不進(jìn)去,難道是你們的片子的問題? 應(yīng)該不會(huì)吧,還有別的可能嘛?


誰來幫幫忙啊


你可以選擇換一個(gè)U盤來測(cè)試下,需要看下你前面初始化的步驟看下有沒有問題.


初始化后 讀可以隨便讀的,就是不能寫,初始化時(shí)有什么和寫相關(guān)的操作嘛? 我換個(gè)U盤試試看


你是采用并口連接還是串口連接方式?如果是串口的話,建議你把波特率提高測(cè)試下看,如果是并口模擬時(shí)序的話,還是需要注意下模擬時(shí)序時(shí)的延時(shí)問題.


是串口方式,比特率是9600沒改,是不是有影響?


波特率可以動(dòng)態(tài)修改嗎?我發(fā)了修改的命令,375沒有回應(yīng), CH375_WR_CMD( CMD_SET_BAUDRATE ); CH375_WR_DAT( 3 ); CH375_WR_DAT( 204 );//改成115200 //adjust the uart2's bandrate also // UART2_ChangeConfig(); // DelayMs(1); for ( i = 0xffff; i != 0; i -- ) if ( CH375_RD_DAT( ) == CMD_RET_SUCCESS ) break; if ( i != 0 ) return 0 ; } return 1 ;


修改的位置時(shí)機(jī)有沒有要求?急 啊~~~


在CH375和單片機(jī)正常復(fù)位之后,就可以改變波特率.在修改CH375的波特率后,需要你去修改單片機(jī)自身的波特率,使兩者波特率一致,再去讀取中斷狀態(tài)代碼; 流程:修改CH375波特率->修改單片機(jī)自身波特率->讀取態(tài)中斷狀


在你修改完波特率之后你可以不去讀取狀態(tài)而延時(shí)1MS之后修改自己?jiǎn)纹瑱C(jī)的波特率在做測(cè)試命令看可以不可以.


奇怪,修改波特率后通信只是偶爾能進(jìn)行,大部分時(shí)間收不到375響應(yīng). 我一直修改執(zhí)行讀寫命令的延時(shí),偶爾能收到響應(yīng)。。。


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

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