使用dspic30f6014a通過串口與376通訊,能夠判斷u盤連接,和初始化,但打開一個不存在的文件時 返回0x14
程序如下
voidxWriteCH376Cmd( UINT8 mCmd ) ?/* 向CH376寫命令 */
{
WriteUART2(SER_SYNC_CODE1);
sleepm(0);
WriteUART2(SER_SYNC_CODE2);
sleepm(0);
WriteUART2(mCmd);
sleepm(0);
}
voidxWriteCH376Data( UINT8 data ) ?/* 向CH376寫數(shù)據(jù) */
{
while(!U2STAbits.TRMT);
? ? if(U2MODEbits.PDSEL == 3)
? ? ? ? U2TXREG = data;
? ? else
? ? ? ? U2TXREG = data & 0xFF;
? ? while(!U2STAbits.TRMT); ? ??
}
UINT8xReadCH376Data( void ) ?/* 從CH376讀數(shù)據(jù) */
{
while(!U2STAbits.URXDA);
? ? if(U2MODEbits.PDSEL == 3)
? ? ? ? return (U2RXREG);
? ? else
? ? ? ? return (U2RXREG & 0xFF);
}
/* 查詢CH376中斷(INT#低電平) */
UINT8Query376Interrupt( void )
{
//#ifdefCH376_INT_WIRE
//return( CH376_INT_WIRE ? FALSE : TRUE ); ?/* 如果連接了CH376的中斷引腳則直接查詢中斷引腳 */
//#else
if ( PORTFbits.RF7 !=1 ) { ?/* 如果未連接CH376的中斷引腳則查詢串口中斷狀態(tài)碼 */
//RI = 0;
return( TRUE );
}
else return( FALSE );
//#endif
}
UINT8mInitCH376Host( void ) ?/* 初始化CH376 */
{
UINT8res;
sleepm(50);
//CH376_PORT_INIT( ); ?/* 接口硬件初始化 */
InitUART2();
xWriteCH376Cmd(CMD00_RESET_ALL);
sleepm(400);
xWriteCH376Cmd( CMD11_CHECK_EXIST ); ?/* 測試單片機與CH376之間的通訊接口 */
xWriteCH376Data( 0x65 );
res = xReadCH376Data( );
if ( res != 0x9A ) return( ERR_USB_UNKNOWN ); ?/* 通訊接口不正常,可能原因有:接口連接異常,其它設備影響(片選不唯一),串口波特率,一直在復位,晶振不工作 */
xWriteCH376Cmd( CMD21_SET_BAUDRATE ); ?/* 設置串口通訊波特率 */
xWriteCH376Data( 0x02 );
xWriteCH376Data( 0xb2 );
res = xReadCH376Data( );
if ( res != CMD_RET_SUCCESS ) return( ERR_USB_UNKNOWN ); ?/* 通訊波特率切換失敗,建議通過硬件復位CH376后重試 */
? ? ? xWriteCH376Cmd( CMD11_SET_USB_MODE ); ?/* 設備USB工作模式 */
xWriteCH376Data( 0x06 );
sleepm(0);
res = xReadCH376Data( );
if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS );
else return( ERR_USB_UNKNOWN ); ?/* 設置模式錯誤 */
}
UINT8Wait376Interrupt( void ) ?/* 等待CH376中斷(INT#低電平),返回中斷狀態(tài)碼, 超時則返回ERR_USB_UNKNOWN */
{
UINT8 ?i;
//#ifdefDEF_INT_TIMEOUT
//#ifDEF_INT_TIMEOUT < 1
//while ( Query376Interrupt( ) == FALSE ); ?/* 一直等中斷 */
while( PORTFbits.RF7==1);
return( CH376GetIntStatus( ) ); ?/* 檢測到中斷 */
? ? ? i=0;
}
//////////////////////////////////////////////////////////////////////////////////
?mInitCH376Host( ?);
??
? while(s != USB_INT_SUCCESS ) { ?/* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機直接查詢SD卡座的插拔狀態(tài)引腳 */
U2STAbits.OERR=0;//清接收緩存
s= CH376DiskConnect( );
k=s;
sleepm( 100 );
}
sleepm( 200 ); ?/* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */
/* 對于檢測到USB設備的,最多等待10*50mS */
for ( s = 0; s < 10; s ++ ) { ?/* 最長等待時間,10*50mS */
sleepm( 50 );
//printf( "Ready ?\n" );
U2STAbits.OERR=0;
s=CH376DiskMount( );
if ( ?s== USB_INT_SUCCESS ) break; ?/* 初始化磁盤并測試磁盤是否就緒 */
? ? ? ? ? ??
}
sleepm( 200 ); ?/* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */
U2STAbits.OERR=0;
s = CH376FileOpen("/MYADC.TXT\0"); ?/* 打開文件,該文件不存在 */
if ( s == USB_INT_SUCCESS ) { ?/* s ? = ?0x14 */
//printf( "File size = %ld\n", CH376GetFileSize( ) ); ?/* 讀取當前文件長度 */
//printf( "Locate tail\n" );
s = CH376ByteLocate( 0xFFFFFFFF ); ?/* 移到文件的尾部 */
//mStopIfError( s );
}
else if ( s == ERR_MISS_FILE ) { ?/* 沒有找到文件,必須新建文件 */
//printf( "Create\n" );
s = CH376FileCreate( NULL ); ?/* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建,不必再提供文件名,剛才已經(jīng)提供給CH376FileOpen */
//mStopIfError( s );
}
你有沒有換個U盤或者將次U盤格式化一下試試。
換過u盤,也格式化試了,還一樣,聽說有376的調(diào)試工具呀,給我發(fā)一個,我想試試是376或u盤有問題。
我的郵箱個人信息保護,已隱藏
測試軟件已發(fā)。