??? CH376_RST?= 1;??????? /* 復(fù)位 */
??? delay_ms( 20 );
??? CH376_RST?= 0;??????? /* 禁止復(fù)位 */
??? delay_ms( 100 );??????? /* 延時100毫秒 */
??? while(mInitCH376Host( ) != USB_INT_SUCCESS){
????}
/* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機直接查詢SD卡座的插拔狀態(tài)引腳 */?
??? while ( CH376DiskConnect( ) != USB_INT_SUCCESS ){?
??????? delay_ms( 100 );
??? }
??? delay_ms( 200 );??? /* 對于檢測到USB設(shè)備的,最多等待100*50mS,主要針對有些MP3太慢,對于檢測到USB設(shè)備
??????????????????????????? 并且連接DISK_MOUNTED的,最多等待5*50mS,主要針對DiskReady */?
??? for ( i = 0; i < 100; i ++ ){??
??????? delay_ms( 50 );
??????? s = CH376DiskMount( );????????????? /* 初始化磁盤并測試磁盤是否就緒 */??
??????? if ( s == USB_INT_SUCCESS ){??????? /* 準備好 */
??????????? break;
??????? }else if ( s == ERR_DISK_DISCON ){????? /* 檢測到斷開,重新檢測并計時 */
??????????? break;
??????? }?
??????? if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ){
??????? break;}???????????? /* 有的U盤總是返回未準備好,不過可以忽略,只要其建立連接MOUNTED且嘗試5*50mS */
??? }?????????
??? if ( s == ERR_DISK_DISCON ){
??????? /* 檢測到斷開,重新檢測并計時 */?
??? }??
??? if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ){
??????? /* 未知USB設(shè)備,例如USB鍵盤、打印機等 */
??? }
/* 獲取出廠信息 */
??? i = CH376ReadBlock( buf );????????? /* 如果需要,可以讀取數(shù)據(jù)塊CH376_CMD_DATA.DiskMountInq,返回長度 */
??? if ( i == sizeof( INQUIRY_DATA ) ){? /* U盤的廠商和產(chǎn)品信息 */?????
??????? buf[ i ] = 0;
??? }
??? s = CH376DiskQuery( (PUINT32)buf );?/* 查詢磁盤剩余空間信息,扇區(qū)數(shù) */
??? strcpy( (char *)TarName, "\\AAAAAAAA.TXT" ); /* 目標文件名 */
??? s = CH376FileCreatePath( TarName );? ?/* 新建多級目錄下的文件,支持多級目錄路徑,輸入緩沖區(qū)必須在RAM中 */
??? strcpy((char *)buf, "兄弟們那個加油哇 呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵" );
??? s = CH376ByteWrite( buf, strlen((const char *)buf), NULL ); /* 以字節(jié)為單位向當前位置寫入數(shù)據(jù)塊 */
??? s = CH376FileClose( TRUE );?? /* 關(guān)閉文件,對于字節(jié)讀寫建議自動更新文件長度 */
??? while ( CH376DiskConnect( )?== USB_INT_SUCCESS ){? /* 檢查U盤是否連接,等待U盤拔出 */
??????? delay_ms( 100 );
??? }
UINT8?mInitCH376Host( void )
{
UINT8?res;
???????
??? DelayMS(50);??????????????????????????? /* 1.上電延時50mS */
??? CH376_PORT_INIT( );???????????????????? /* 取消片選 + 上拉中斷 */
??? xWriteCH376Cmd( CMD11_CHECK_EXIST );??? /* 2.發(fā)送命令CMD11_CHECK_EXIST(0x06) */
??? xWriteCH376Data( 0x55 );??????????????? /* 2.發(fā)送數(shù)據(jù)0x55 */???????????????
??? res = xReadCH376Data( );??????????????? /* 2.讀取返回數(shù)據(jù) */
??? xEndCH376Cmd( );
??? if ( res != 0xAA ){???????????????????? /* 2.正確返回0xAA,其他錯誤。 */
??????? return( ERR_USB_UNKNOWN );????????? /* 2.檢測硬件連接、復(fù)位、晶振等 */
??? }??????????????????????????????????????
??? xWriteCH376Cmd( CMD11_SET_USB_MODE );?? /* 3.發(fā)送命令0x15,即設(shè)備USB工作模式。 */
??? xWriteCH376Data( 0x06 );??????????????? /* 3.發(fā)送數(shù)據(jù)0x06,即U盤模式。0x03為SD卡模式。 */
??? DelayUS(20);
??? res = xReadCH376Data( );
??? xEndCH376Cmd( );
??? if ( res == CMD_RET_SUCCESS ){?????????
??????? return( USB_INT_SUCCESS );????????? /* 3.返回0x51,USB事務(wù)或者傳輸操作成功? */
??? }else {
??????? return( ERR_USB_UNKNOWN );????????? /* 3.設(shè)置模式錯誤 */
??? }???????
}
CH376S芯片,硬件SPI連接,軟件CS片選,使用INT#引腳查詢。初始化mInitCH376Host函數(shù)返回值是正確的,
但是,CH376DiskConnect()不管U盤插入還是拔出,返回值都是0x14,即USB_INT_SUCCESS。插入U盤不是應(yīng)該0x15,拔出是0x16嗎?這是為什么?