插入優(yōu)盤(pán)后,ACT燈亮,但是如果讀多個(gè)數(shù)據(jù)就可能會(huì)失控.CHECK_EXIST就沒(méi)有問(wèn)題,但是讀扇區(qū)數(shù)據(jù)或磁盤(pán)大小都會(huì)導(dǎo)致ACT燈熄滅,CH375幾乎完全失控.除了復(fù)位,幾乎沒(méi)有辦法. 因?yàn)槲椰F(xiàn)在測(cè)試是畫(huà)了一塊小板,所有的線(xiàn)全部是手工連接到主板上的.剛才我試了一下,把片選腳經(jīng)過(guò)兩級(jí)反相后接到CH375,發(fā)現(xiàn)根本無(wú)法工作(也是CHECK_EXIST無(wú)問(wèn)題,這次是一次數(shù)據(jù)都沒(méi)有辦法讀了).因?yàn)榇爽F(xiàn)象出現(xiàn)是隨機(jī)的,所以我認(rèn)為是硬件時(shí)序上問(wèn)題比較大,請(qǐng)幫忙分析一下原因,我應(yīng)該如何來(lái)解決. 另加說(shuō)明,我這個(gè)CPU自帶有四個(gè)片選腳(內(nèi)部自帶地址譯碼),所有制的WR/RD是共用的,只可以用片選腳來(lái)區(qū)別芯片.
剛才我燒片子試了一下,根本不能工作,倒是仿真器可以用,以前用Philips D12時(shí)遇到過(guò)反的情況,就是用片子沒(méi)有問(wèn)題,用仿真器不行,后來(lái)是在CS腳上加了兩級(jí)反相就OK了.那就是說(shuō),這個(gè)片子我得把除CS外的其它腳延遲?郁悶.
你如果用總線(xiàn)方式的話(huà),那么不需要考慮時(shí)序問(wèn)題,你要考慮的是延時(shí)的問(wèn)題,也就是說(shuō)命令與命令,命令與數(shù)據(jù)需要2US的延時(shí),數(shù)據(jù)與數(shù)據(jù)之間需要1US的延時(shí),你只要修改那三個(gè)讀寫(xiě)子函數(shù)就應(yīng)該可以了(實(shí)際上真正仿真器和燒到單片機(jī)里面去的區(qū)別也就是操作的時(shí)間上面的差異而已),你說(shuō)了讀物理扇區(qū)就不能讀了,那可能是因?yàn)槟悴逑耈盤(pán)之后,U盤(pán)的電壓降的太低了,有可能U盤(pán)都不工作了,你看下你插下U盤(pán)的供電電壓是多少?(插上U盤(pán)之后)
電壓?jiǎn)栴}我在畫(huà)板時(shí)考慮過(guò)的,所以我優(yōu)盤(pán)與CH375是分開(kāi)供電的,插上優(yōu)盤(pán)后電壓沒(méi)有明顯降低,大概4.6V左右,我串了一個(gè)4.7的限流電阻和一個(gè)10uH的電感(公司沒(méi)有更小的電阻和更大的電感......) 至所謂認(rèn)為是時(shí)序問(wèn)題,因?yàn)槲疫@個(gè)片子時(shí)序與51不太一樣,再加上曾經(jīng)遇到過(guò)類(lèi)似的問(wèn)題所以認(rèn)為時(shí)序上有不對(duì).至于軟件延時(shí)間,我已經(jīng)加得夠長(zhǎng)了. 每次CH375失控是出現(xiàn)在中斷0x1D的處理中.讀了幾個(gè)數(shù)據(jù)后,讀出的數(shù)據(jù)就全為0x80,然后就失控了. 我現(xiàn)在才做到文件系統(tǒng)判斷,第一個(gè)優(yōu)盤(pán)沒(méi)有MBR,所以出錯(cuò)機(jī)率小,現(xiàn)在這個(gè)有MBR,要讀兩個(gè)扇區(qū),機(jī)率就大了多.
下面為讀出錯(cuò)后RAM中的數(shù)據(jù).此時(shí)我認(rèn)為應(yīng)該是連讀數(shù)據(jù)錯(cuò)了. Page:5 Addr:D000 0 1 2 3 4 5 6 7 EB 58 90 2A 5E 2B 27 7E 49 48 43 00 02 08 24 00 8 9 A B C D E F 02 00 00 00 00 F8 00 00 3F 00 FF 00 80 80 80 80 -----------這兒4個(gè)字節(jié)就開(kāi)始錯(cuò)了,下面也全錯(cuò) 10 11 12 13 14 15 16 17 80 80 00 80 80 80 00 80 80 80 80 80 80 00 80 80 18 19 1A 1B 1C 1D 1E 1F 80 80 80 80 00 80 80 80 00 80 80 80 80 80 80 00
那你可以不可以這樣,讀出一個(gè)數(shù)據(jù)出來(lái)就將這個(gè)數(shù)據(jù)通過(guò)串口輸出來(lái)看下。
我現(xiàn)在是讀一個(gè)字節(jié)就保存在RAM里,上面的數(shù)據(jù)都是從375中讀出來(lái)的.我想問(wèn)的問(wèn)題是在什么情況下CH375會(huì)失控.如果我命令錯(cuò)誤,空讀,也不至于會(huì)讓CH375完全不受程序控制,只有復(fù)位才能使其工作.如果我命令數(shù)據(jù)間的延時(shí)不夠,會(huì)導(dǎo)致CH375失控嗎?! 我又試了一下,如果使用Flash片子,每次只能從CH375讀出一個(gè)字節(jié),然后CH375就失控了. 我現(xiàn)在把WR/RD加了兩級(jí)反相后,用仿真器會(huì)好很多.
另外,我在用仿真器可以用的情況下,把片選用了反相延時(shí)后就讀不出數(shù)據(jù)來(lái)了.是不是這個(gè)片子的片選低到能取數(shù)據(jù)是有要求的?如果那樣的話(huà),我可以用接245的方法來(lái)解決.
晚上做了修改,把CH375的片選常接低,然后用片選腳控制245的Enable,用WR控制245的DIR,同時(shí)WR/RD也接到CH375,理論上講挺好的,結(jié)果卻是,完全不受控了,連CHECK_EXIST都過(guò)不了了。 天啊,我向老大建議了N久才同意我試試的片子這么不給我面子??非要我去用Philips的片子??!!
這個(gè)問(wèn)題很特殊但應(yīng)該比較好解決,可能要先檢查一下硬件連接,總線(xiàn)上是否有其它器件,還要檢查一下接口子程序源代碼,需要你提供單片機(jī)型號(hào)和速度以及讀寫(xiě)脈沖寬度,可將相關(guān)資料發(fā)到tech@wch.cn
信件已經(jīng)發(fā)出,請(qǐng)查收。 附件為兩個(gè)PDF,一個(gè)為CPU時(shí)序,一個(gè)為現(xiàn)在的連線(xiàn)示意圖。
今天用示波器看了RD信號(hào),在圖中的連接方式下,HC245出來(lái)連接到CH375的RD會(huì)在正常的信號(hào)后又產(chǎn)生一次低脈沖,是緊跟在正常之后的。如果與CH375斷開(kāi),則正常,把如果把該腳與數(shù)據(jù)口使用的HC245 EN腳斷開(kāi),則也正常。特別奇怪。 另外,把單片機(jī)過(guò)來(lái)的RD用兩路HC245分別過(guò)來(lái),一個(gè)接數(shù)據(jù)口使用的245EN,一個(gè)接CH375的RD,居然也不對(duì)。也即是說(shuō),CH375的數(shù)據(jù)口似乎不能與HC245共存。 太累了,睡會(huì)兒。
實(shí)測(cè)了RD寬度和WR寬度,WR是足夠的,大概110ns左右,RD總在90不到的樣子,與CH375的要求相比差點(diǎn)意思.看來(lái)我沒(méi)福氣用CH375了......
E-MAIL沒(méi)有收到,可以不可以在發(fā)一遍
我把晶振降到6M(原來(lái)為9.6M),穩(wěn)定性好了很多,但也沒(méi)有達(dá)到完全OK。郁悶。再說(shuō),我也不能用6M晶振。 郵件我重發(fā)了一次。
今天離開(kāi)公司前做了最后一次努力,把WR/RD直接用口線(xiàn)控制,在讀/寫(xiě)前把RD/WR拉低,然后再正常讀/寫(xiě),這樣在整個(gè)片選為低的時(shí)間內(nèi),CH375都處于讀/寫(xiě)狀態(tài),因?yàn)槠x時(shí)間是大于120ns的。所以能讀出數(shù)據(jù),而且連讀1M也沒(méi)有出錯(cuò)了。只是連續(xù)數(shù)據(jù)讀的程序需要進(jìn)行優(yōu)化。 這個(gè)CPU CS/RD不規(guī)范,每次讀數(shù)據(jù)時(shí)RD后降到低電平,也是后升上去,所以看起來(lái)RD寬度大概有90ns,但是除掉片選后,幾乎只有70-80ns了。 總之先這樣了。