CH376S測試U盤CH376DiskMount( )返回0x2c

CH376S測試U盤CH376DiskMount( )返回0x2c

CH376DiskConnect( )返回0x14,成功,測試磁盤就緒不成功,求助

/* CH376芯片 軟件模擬8位并口連接的硬件抽象層 V1.0 */ /* 提供I/O接口子程序 */

#include "HAL.H"

#define UWR_CLR PORTD &= ~(1 <<4) //UWR置低 #define UWR_SET PORTD |= (1 <<4) //UWR置高

#define URD_CLR PORTD &= ~(1 <<5) //URD置低 #define URD_SET PORTD |= (1 <<5) //URD置高

#define UA0_CLR PORTD &= ~(1 <<6) //UA0置低 #define UA0_SET PORTD |= (1 <<6) //UA0置高

void mDelayuS( UINT8 us ) { while ( us -- ) ; }

#define CH376_INT_WIRE ((PIND&0X02)>>1) /* 假定CH376的INT#引腳,如果未連接那么也可以通過查詢狀態(tài)端口實現(xiàn) */

void CH376_PORT_INIT( void ) /* 由于使用通用I/O模擬并口讀寫時序,所以進行初始化 */ { DDRD=0Xf0; UWR_SET; URD_SET; UA0_CLR; DDRC=0X00; /* 設(shè)置并口輸入 */ mDelayuS(10); }

UINT8 xReadCH376Status( void ) /* 從CH376讀狀態(tài),僅用于并口方式 */ { UINT8 mData; mDelayuS(200); UA0_SET; UWR_SET; URD_SET; mDelayuS(10);

DDRC=0X00; mDelayuS(10);

URD_CLR; /* 輸出有效讀控制信號, 讀CH376芯片的狀態(tài)端口 */ mDelayuS(10); mData =PINC; /* 從CH376的并口輸入數(shù)據(jù) */ URD_SET; UWR_SET; UA0_CLR; return( mData ); }

UINT8 xReadCH376Data( void ) /* 從CH376讀數(shù)據(jù) */ { UINT8 mData; mDelayuS(200); UA0_CLR; UWR_SET; URD_SET; mDelayuS(10);

DDRC=0X00; mDelayuS(10);

URD_CLR; /* 輸出有效讀控制信號, 讀CH376芯片的狀態(tài)端口 */ mDelayuS(10); mData =PINC; /* 從CH376的并口輸入數(shù)據(jù) */ URD_SET; UWR_SET; UA0_CLR; return( mData ); }

void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376寫命令 */ {

UA0_SET; UWR_SET; URD_SET; mDelayuS(10); DDRC=0XFF; mDelayuS(10); UWR_CLR; /* 輸出有效寫控制信號, 寫CH376芯片的命令端口 */ mDelayuS(10);

PORTC=mCmd ; mDelayuS(10); UWR_SET; URD_SET; mDelayuS(10); }

void xWriteCH376Data( UINT8 mData ) /* 向CH376寫數(shù)據(jù) */ {

UA0_CLR; UWR_SET; URD_SET; mDelayuS(10); DDRC=0XFF; mDelayuS(10); UWR_CLR; /* 輸出有效寫控制信號, 寫CH376芯片的命令端口 */ mDelayuS(10);

PORTC=mData; mDelayuS(10); UWR_SET; URD_SET; mDelayuS(10); }

/* 查詢CH376中斷(INT#低電平) */ UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果連接了CH376的中斷引腳則直接查詢中斷引腳 */ #else return( (xReadCH376Status( ) & PARA_STATE_INTB) ? FALSE : TRUE ); /* 如果未連接CH376的中斷引腳則查詢狀態(tài)端口 */ #endif }

UINT8 mInitCH376Host( void ) /* 初始化CH376 */ { UINT8 res; CH376_PORT_INIT( ); /* 接口硬件初始化 */ xWriteCH376Cmd( CMD_CHECK_EXIST ); /* 測試單片機與CH376之間的通訊接口 */ xWriteCH376Data( 0x57 ); res = xReadCH376Data( ); if ( res != 0xa8 ) return( ERR_USB_UNKNOWN ); /* 通訊接口不正常,可能原因有:接口連接異常,其它設(shè)備影響(片選不唯一),串口波特率,一直在復(fù)位,晶振不工作 */ xWriteCH376Cmd(0x15); /* 設(shè)備USB工作模式 */ xWriteCH376Data( 0x06 ); mDelayuS(200); res = xReadCH376Data( ); if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS ); else return( ERR_USB_UNKNOWN ); /* 設(shè)置模式錯誤 */ }

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機,應(yīng)該替換為實際的處理措施,例如顯示錯誤信息,等待用戶確認(rèn)后重試等 */ void mStopIfError( UINT8 iError ) { if ( iError == USB_INT_SUCCESS ) return; /* 操作成功 */ }

#define xEndCH376Cmd( )


主程序:

delay_ms( 100 ); /* 延時100毫秒 */ //開啟全局中斷 //總中斷允許 s = mInitCH376Host( ); /* 初始化CH376 */

mStopIfError( s ); /* 其它電路初始化 */

while ( 1 ) { while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機直接查詢SD卡座的插拔狀態(tài)引腳 */ delay_ms( 100 ); } delay_ms( 200 ); /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */ /* 對于檢測到USB設(shè)備的,最多等待10*50mS */ for ( s = 0; s < 10; s ++ ) { /* 最長等待時間,10*50mS */ delay_ms( 50 ); if (CH376DiskMount( ) ==USB_INT_SUCCESS ){ break; } /* 初始化磁盤并測試磁盤是否就緒 */ } delay_ms( 200 );


CH376DiskMount( )返回值是0x2c,為什么呢?求大俠指點


void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376寫命令 */ {

UA0_SET; UWR_SET; URD_SET; mDelayuS(10); DDRC=0XFF; PORTC=mCmd ; mDelayuS(10); UWR_CLR; /* 輸出有效寫控制信號, 寫CH376芯片的命令端口 */ mDelayuS(10);

mDelayuS(10); UWR_SET; URD_SET; mDelayuS(10); }

寫命令按照我這樣。你那樣寫可能會出問題的。


這樣還是不行的,初始化測試通信的時候是沒問題的,按位取反正常。 xWriteCH376Cmd( CMD_CHECK_EXIST ); /* 測試單片機與CH376之間的通訊接口 */ xWriteCH376Data( 0x55 ); res = xReadCH376Data( ); res返回值是0xaa.

USB工作模式 也是正確的,可以檢測到設(shè)備連接,CH376DiskConnect()返回值是0x14,但是CH376DiskMount( )錯誤,返回值是0x16,以及CH376GetDiskStatus( )返回值是0x02


怎么解決啊?求指導(dǎo)


求助


你檢查一下USB口那邊VCC、UD-、UD+電壓是多少?另外,發(fā)完命令要等待數(shù)據(jù)發(fā)完后才能查詢中斷。


VCC、UD-、UD+分別為5v,0v,3v


FILE_SYS.C文件沒有做任何修改的


這是原理圖,并口方式,cs一直選通20134715264351.jpg


沒有人遇到這種問題嗎?


那你拿示波器看下UD+和UD-在發(fā)送完成DISKMOUNT命令之后是否有信號出來。XI端的20P的電容去掉。


問題終于解決,12M晶振是壞的??!標(biāo)注的12M,測量竟然是4M。。。。感謝你的幫助


您好我這ch375芯片工作正常,但是usb存儲器初始化之后返回值也是0x2c 麻煩您看看是不是硬件問題1698287488060.png


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

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