U盤(pán)被374彈出后,如不拔出復(fù)位單片機(jī)后,第一復(fù)位不能識(shí)別,必須復(fù)位兩次才行

  我現(xiàn)在用ARM2292與374通信作為主機(jī).有一個(gè)U盤(pán)有再被彈出后,不拔出如果再次復(fù)位ARM,一切正常,能識(shí)別出U盤(pán),出能寫(xiě)讀數(shù)據(jù).    另外一個(gè)U盤(pán)就不行了,被彈出后,第一次復(fù)位ARM,程序運(yùn)行到 if ( CH374DiskReady( ) == ERR_SUCCESS ) break; /* 查詢(xún)磁盤(pán)是否準(zhǔn)備好 */ 程序一直沒(méi)有出來(lái),但如果再次復(fù)位ARM時(shí)就一切正常了,如果再?gòu)?fù)位就又不行了,第4次復(fù)位ARM就又可以了.為什么另一個(gè)U盤(pán)沒(méi)有這種現(xiàn)象呢.請(qǐng)指點(diǎn)原因,我在程序中加了上電復(fù)位374T這條程序.

如果正體電路板斷電,再上電讀寫(xiě)一切正常.謝謝

你可以這樣測(cè)試下看,在你復(fù)位不正常的時(shí)候,你看下在復(fù)位單片機(jī)的時(shí)候USB口是否有信號(hào)出來(lái)?如果有的話,那說(shuō)明你給374初始化的時(shí)候你可以這樣操作下: Write374Byte( REG_USB_SETUP, 0x00 ); /* 關(guān)閉USB操作 */ CH374DelaymS( 10 ); 接著在初始化374


關(guān)閉USB也不行,為什么另外一個(gè)U盤(pán)每次復(fù)位都能識(shí)別出來(lái),而且一切正常.但為什么就這一塊出現(xiàn)這種情況呢,是U盤(pán)的問(wèn)題嗎?而且很有規(guī)律的,復(fù)位一次不正常,接著下一次復(fù)位一定正常,就是一次正常,下一次一定不正常,請(qǐng)指點(diǎn), 為什么我在374初始前加了軟復(fù)位后.任何一個(gè)U盤(pán)都識(shí)別不民來(lái),我用的是374T,只有軟復(fù)位控制.我用的是374庫(kù),請(qǐng)問(wèn)在庫(kù)里面加復(fù)位了嗎.


在設(shè)置了軟件復(fù)位之后在進(jìn)行庫(kù)的初始化應(yīng)該是可以通過(guò)的,


(1)子程序庫(kù)中有復(fù)位操作 (2)你程序中對(duì)374復(fù)位后,要等40ms后才能繼續(xù)對(duì)其操作 (3)示例程序已被你修改,不妨貼出來(lái)看看


int main( ) {

UINT8 i, c, SecCount,check; UINT16 NewSize, count; PUINT8 pCodeStr; CH374_PORT_INIT( ); LED_OUT_INIT( ); LED_OUT_ACT( ); /* 開(kāi)機(jī)后LED亮一下以示工作 */ CH374DelaymS( 100 ); /* 延時(shí)100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 為了讓計(jì)算機(jī)通過(guò)串口監(jiān)控演示過(guò)程 */ printf( "Start\n" ); Write374Byte( REG_USB_SETUP, 0x00 ); /* 關(guān)閉USB操作 */ CH374DelaymS( 10 );

// Write374Byte( REG_SYS_CTRL,(Read374Byte( 0x05 ))| 0x08 ); 如果加上這一句話程序不能認(rèn)別U盤(pán)了  程序執(zhí)行到這下面這一句,printf( "Wait Udisk\n" );等待U盤(pán)插入的程序,就不執(zhí)行了,去掉這一句就沒(méi)有問(wèn)題了*/ i = CH374LibInit( ); /* 初始化CH374程序庫(kù)和CH374芯片,操作成功返回0 */ mStopIfError( i );

printf( "Wait Udisk\n" ); . . . }

while ( CH374DiskStatus < DISK_CONNECT ) { CH374DiskConnect( ); CH374DelaymS( 50 ); /* 沒(méi)必要頻繁查詢(xún) */ } LED_OUT_ACT( ); /* LED亮 */ CH374DelaymS( 200 ); for ( i = 0; i < 100; i ++ { CH374DelaymS( 100 ); printf( "Ready ?\n" ); if ( CH374DiskReady( ) == ERR_SUCCESS ){ printf( "right!\n" ); break;} /*我的那個(gè)怪U盤(pán)第一次復(fù)位就執(zhí)行到這,好像是死到庫(kù)里面了,沒(méi)有出來(lái) ,如果再?gòu)?fù)位一次就一切正常了,依次就是這樣,復(fù)位一次不行再?gòu)?fù)位一次就行了*/ printf( "wrong!\n" ); if ( CH374DiskStatus < DISK_CONNECT ) break; if ( CH374DiskStatus >= DISK_MOUNTED && i > 5 ) break; ?。?


如果在程序中需要對(duì)CH374進(jìn)行軟件復(fù)位,那么應(yīng)這樣做: Write374Byte( REG_SYS_CTRL,( Read374Byte( 0x05 ) ) | 0x08 ); /* 復(fù)位 */ Write374Byte( REG_SYS_CTRL,( Read374Byte( 0x05 ) ) & 0xF7 ); /* 停止復(fù)位 */ 延時(shí)100mS/* 由于此時(shí)374剛被復(fù)位,還未設(shè)置模式,CH374DelaymS( )不夠精確,自己做個(gè)延時(shí)函數(shù) */; ...其他操作


謝謝呀,今天沒(méi)有拿來(lái)那個(gè)怪U盤(pán),等明天試試


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

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