IO短路帶來(lái)的思考
按照常理來(lái)說(shuō),對于IO腳來(lái)說(shuō)VH遇到VL,那么一般人一定會(huì )想當然的以為結果是VL。事實(shí)是這樣的嗎?特權同學(xué)就遇上了這么個(gè)很讓人郁悶的問(wèn)題。
本文引用地址:http://dyxdggzs.com/article/270306.htm當時(shí)在調一個(gè)液晶控制板,板子是新做的,自己動(dòng)手焊接(水平有限,給后來(lái)的故事埋下了伏筆)。一切OK,就把早就寫(xiě)好仿真過(guò)的代碼燒進(jìn)去,然后接口部分是一個(gè)51的單片機,同樣燒進(jìn)備好的代碼。本來(lái)就是先做一個(gè)很簡(jiǎn)單的指令測試,控制板部分是一個(gè)CPLD,一方面做MCU接口,接收指令(各種傳送數據方式)和數據(緩存到RAM中);另一方面事實(shí)掃描LCD顯示驅動(dòng)。奇怪的是測試一條寫(xiě)數據指令,讓LCD現實(shí)上半屏幕全紅色下半屏幕全白色。指令控制方面MCU先是使用了內部的一個(gè)清屏指令,將LCD全清白色,然后使用一條寫(xiě)入一個(gè)數據后X坐標自增,如下做了一個(gè)簡(jiǎn)單的遍歷處理。
for(m=0;m<136;m++) //上半屏幕顯示紅色
{
WR_XLADDR = 0;
WR_XHADDR = 0;
WR_YLADDR = m%256;
WR_YHADDR = 0;
for(n=0;n<480;n++)
WR_DATA = 0xe0; //單點(diǎn)紅色}
}
而結果比較怪異,背景白色都沒(méi)有問(wèn)題,而上半屏幕的全紅色卻是第1行紅色,第2、3行白色、第4、5行紅色,第6、7行白色……如此下去。再測了一下Y自增方式,問(wèn)題也類(lèi)似,本來(lái)是要寫(xiě)左半屏幕綠色,右半屏幕黑色(也是先清屏黑色,再寫(xiě)綠色),出現了第1列紅色,第2、3列白色、第4、5列紅色,第6、7列白色……。他們都有共性,所以一直很納悶,開(kāi)始的時(shí)候總以為是出在CPLD代碼部分,因為這次的緩沖SDRAM的控制是新設計,可能是這個(gè)控制時(shí)序的問(wèn)題,再回頭仿真測試結果沒(méi)有改觀(guān)。最后靜下心來(lái)好好分析了下,而且特別在每次寫(xiě)入紅色數據時(shí)加了很大的延時(shí)進(jìn)行觀(guān)察,發(fā)現第1行顯示完紅色立即跳到第4行顯示紅色,然后停了大約2行的時(shí)間再進(jìn)行第3行的顯示,緊接著(zhù)是第6行的顯示。于是就想到是不是最低兩個(gè)地址線(xiàn)出現短路或者其中一個(gè)短路到GND或者VCC。而出現的地址是先2’b00,緊接著(zhù)2’b11,先得很乖,如果是其中一個(gè)接GND了,那么地址出現順序應該是00,00,10,10或者00,01,00,01;如果是一個(gè)接VCC了,那么地址順序應該是01,01,11,11或者10,11,10,11。所以排除了地址腳和VCC或者GND短路的可能。還有就是,即便是地址短路了,如果出現在SDRAM的地址腳上,那么讀寫(xiě)都一樣,即所謂的負負得正,也不會(huì )出現這樣的現象。
那么到底是出現了什么問(wèn)題了呢?冒失每次遍歷都會(huì )進(jìn)行一次Y地址的重新寫(xiě)入(通過(guò)MCU與CPLD的接口),而清屏指令只要發(fā)一條指令,CPLD內部處理地址的運算。所以問(wèn)題被定位到了MCU與CPLD得接口部分,它們之間接了4245進(jìn)行電平轉換,地址的低2位是不是短路了?那么如果是4245輸入端短路了會(huì )怎樣?是4245的輸出端短路了又會(huì )怎樣?
按照常理,IO口的VH和VL短路,在沒(méi)有動(dòng)手測試前,我覺(jué)得應該是輸出VL。所以這個(gè)認識也會(huì )否決了問(wèn)題發(fā)現的原因出在這兩個(gè)IO口上,因為地址線(xiàn)正常輸入00,01,10,11,那么短路后輸出也應該是00,00,00,11,而不會(huì )一下00,11的跳變。但是,事實(shí)證明我錯了。萬(wàn)用表一測,確實(shí)兩個(gè)IO口短路了(4245的輸出端短路),為了驗證我的判斷,先燒了一個(gè)把兩個(gè)地址線(xiàn)一個(gè)拉高一個(gè)拉低的代碼,再次上電測量,電平大約在1.65V,這個(gè)1.65V是要輸入CPLD的(3.3V LVTTL電平)。查看了芯片資料,發(fā)現>1.7V判斷為VIH,而這個(gè)基本屬于邊界值的1.65V都在輸入CPLD時(shí)被判定為VIH了。所以就出現了最后的現象。
感覺(jué)問(wèn)題一點(diǎn)點(diǎn)解開(kāi)了,于是扯開(kāi)兩條短路線(xiàn),重新上電測試,一切步入正軌??磥?lái)問(wèn)題果然如此,兩個(gè)IO短路的的確確不會(huì )只輸出一個(gè)簡(jiǎn)單的VL,這個(gè)4245就給了一個(gè)1.65V,而別的器件若出現這個(gè)情況會(huì )怎樣呢?我不知道,但是有一點(diǎn)現在是可以肯定的,兩個(gè)IO短路的輸出結果需要根據這兩個(gè)IO的電路本身進(jìn)行判斷。
任何問(wèn)題都不可以想當然。
評論