[原創(chuàng)]CH375S芯片讀寫時(shí)個(gè)別數(shù)據(jù)丟失??

做的課題是單片機(jī)讀寫U盤:

單片機(jī)使用ATmega8,USB芯片使用CH375S.上次發(fā)貼詢問無(wú)法檢測(cè)到U盤,后來(lái)發(fā)現(xiàn)是USB

的D+和D-線接反了。。呵呵。

現(xiàn)在CH375能讀寫U盤(以扇區(qū)方式),但是讀寫時(shí)不穩(wěn)定,有時(shí)會(huì)出現(xiàn)讀寫錯(cuò)誤。

讀寫一個(gè)扇區(qū)的時(shí)候分8次,每次64個(gè)字節(jié)大小,

現(xiàn)在最致命的狀況是這64個(gè)字節(jié)存在漏讀(寫)一兩個(gè)字節(jié),這樣后面的數(shù)據(jù)的位置便依次

往前移一兩個(gè)字節(jié)。。 /////////////////////////////////////////////////////// 本來(lái)初步估計(jì)應(yīng)該是時(shí)序的問題,但無(wú)論單片機(jī)內(nèi)讀寫CH375子函數(shù)怎么延時(shí)均會(huì)出現(xiàn)漏

讀的現(xiàn)象,而且漏讀的數(shù)據(jù)位置似乎是沒有規(guī)律的。。

CH375用的晶振是12M的,兩個(gè)電容用20P,換個(gè)晶振也還是一樣。。單片機(jī)使用的是內(nèi)部8M的

RC振蕩,會(huì)不會(huì)是單片機(jī)內(nèi)部的問題?

我還想問一點(diǎn)的就是CH375的#ACT端接的LED燈一直都不亮這算不算正常??

下面附上讀寫CH375的子函數(shù):

/* *函數(shù):void Wch375Cmd(cmd) *功能:模擬AD總線往CH375寫一個(gè)命令字 *輸入?yún)?shù):無(wú) *輸出參數(shù):無(wú) */ void Wch375Cmd( Uint8 CMD ) { DDRB = 0XFF; //置B口為輸出方式 delay_nus(2); ClrBit(PORTD,CS_375);//使能CH375 SetBit(PORTD,A0); //置命令方式 PORTB = CMD; //輸出命令字 ClrBit(PORTD,WR); //寫使能 DDRB = 0XFF; //延時(shí) SetBit(PORTD,WR); SetBit(PORTD,CS_375);//取消使能375 DDRB = 0X00; delay_nus(2); }

/* *功能 : 模擬AD總線往CH375寫一個(gè)8位數(shù)據(jù) */ void Wch375Dat( Uint8 DATA ) { DDRB = 0XFF; ClrBit(PORTD,CS_375); ClrBit(PORTD,A0); PORTB = DATA; ClrBit(PORTD,WR); //寫使能 DDRB = 0XFF; SetBit(PORTD,WR); //取消寫使能 SetBit(PORTD,CS_375);//取消使能375 DDRB = 0X00; delay_nus(2); }

/* *功能 :模擬AD總線讀取CH375一個(gè)8位數(shù)據(jù)(狀態(tài)) */ Uint8 Rch375Dat( void ) { Uint8 temp; DDRB = 0X00; ClrBit(PORTD,CS_375); ClrBit(PORTD,A0); ClrBit(PORTD,RD); //讀使能 DDRB = 0X00; temp = PINB; SetBit(PORTD,RD); //取消讀使能 SetBit(PORTD,CS_375);//取消使能375 delay_nus(2); return temp; }

這些子函數(shù)的延時(shí)都改了N遍,從0.2us改到3us,4us都還是一樣會(huì)出現(xiàn)漏讀數(shù)據(jù)的現(xiàn)象。

按照下面的時(shí)序你測(cè)試下看可以不可以: void Wch375Cmd( Uint8 CMD ) { delay_nus(2); SetBit(PORTD,A0); //置命令方式 PORTB = CMD; //輸出命令字 DDRB = 0XFF; //置B口為輸出方式 ClrBit(PORTD,CS_375);//使能CH375 ClrBit(PORTD,WR); //寫使能 DDRB = 0XFF; //延時(shí) SetBit(PORTD,WR); SetBit(PORTD,CS_375);//取消使能375 ClrBit(PORTD,A0); DDRB = 0X00; delay_nus(2); }

/* *功能 : 模擬AD總線往CH375寫一個(gè)8位數(shù)據(jù) */ void Wch375Dat( Uint8 DATA ) { delay_nus(2); PORTB = DATA; DDRB = 0XFF; ClrBit(PORTD,A0); ClrBit(PORTD,CS_375); ClrBit(PORTD,WR); //寫使能 ClrBit(PORTD,WR); //寫使能 ClrBit(PORTD,WR); //寫使能 SetBit(PORTD,WR); //取消寫使能 SetBit(PORTD,CS_375);//取消使能375 DDRB = 0X00; }

/* *功能?。耗MAD總線讀取CH375一個(gè)8位數(shù)據(jù)(狀態(tài)) */ Uint8 Rch375Dat( void ) { Uint8 temp; delay_nus(2); DDRB = 0X00; ClrBit(PORTD,A0); ClrBit(PORTD,CS_375); ClrBit(PORTD,RD); //讀使能 ClrBit(PORTD,RD); //讀使能 ClrBit(PORTD,RD); //讀使能 ClrBit(PORTD,RD); //讀使能 temp = PINB; SetBit(PORTD,RD); //取消讀使能 SetBit(PORTD,CS_375);//取消使能375 ClrBit(PORTD,A0); return temp; }


試過了。。

還是一樣,延時(shí)全換成3US也還是一樣,,

而且這種漏讀不是說每次都會(huì)出現(xiàn),有的時(shí)候第一次讀取的是正確的,但第二次重新讀取時(shí)卻會(huì)漏掉一兩個(gè)字

節(jié)。


那你在把延時(shí)加大點(diǎn)試下看可以不可以


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

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