<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > IO短路帶來的思考

          IO短路帶來的思考

          作者: 時間:2015-03-02 來源:網(wǎng)絡(luò) 收藏
          編者按: IO腳短路,不能憑借自己的臆想判斷出結(jié)果,要根據(jù)這個IO電路本身進行判斷,否則只能把問題變得更加復(fù)雜。

            按照常理來說,對于IO腳來說VH遇到VL,那么一般人一定會想當然的以為結(jié)果是VL。事實是這樣的嗎?特權(quán)同學就遇上了這么個很讓人郁悶的問題。

          本文引用地址:http://www.ex-cimer.com/article/270306.htm

            當時在調(diào)一個液晶控制板,板子是新做的,自己動手焊接(水平有限,給后來的故事埋下了伏筆)。一切OK,就把早就寫好仿真過的代碼燒進去,然后接口部分是一個51的單片機,同樣燒進備好的代碼。本來就是先做一個很簡單的指令測試,控制板部分是一個CPLD,一方面做MCU接口,接收指令(各種傳送數(shù)據(jù)方式)和數(shù)據(jù)(緩存到RAM中);另一方面事實掃描LCD顯示驅(qū)動。奇怪的是測試一條寫數(shù)據(jù)指令,讓LCD現(xiàn)實上半屏幕全紅色下半屏幕全白色。指令控制方面MCU先是使用了內(nèi)部的一個清屏指令,將LCD全清白色,然后使用一條寫入一個數(shù)據(jù)后X坐標自增,如下做了一個簡單的遍歷處理。

            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; //單點紅色}

            }

            而結(jié)果比較怪異,背景白色都沒有問題,而上半屏幕的全紅色卻是第1行紅色,第2、3行白色、第4、5行紅色,第6、7行白色……如此下去。再測了一下Y自增方式,問題也類似,本來是要寫左半屏幕綠色,右半屏幕黑色(也是先清屏黑色,再寫綠色),出現(xiàn)了第1列紅色,第2、3列白色、第4、5列紅色,第6、7列白色……。他們都有共性,所以一直很納悶,開始的時候總以為是出在CPLD代碼部分,因為這次的緩沖SDRAM的控制是新設(shè)計,可能是這個控制時序的問題,再回頭仿真測試結(jié)果沒有改觀。最后靜下心來好好分析了下,而且特別在每次寫入紅色數(shù)據(jù)時加了很大的延時進行觀察,發(fā)現(xiàn)第1行顯示完紅色立即跳到第4行顯示紅色,然后停了大約2行的時間再進行第3行的顯示,緊接著是第6行的顯示。于是就想到是不是最低兩個地址線出現(xiàn)短路或者其中一個短路到GND或者VCC。而出現(xiàn)的地址是先2’b00,緊接著2’b11,先得很乖,如果是其中一個接GND了,那么地址出現(xiàn)順序應(yīng)該是00,00,10,10或者00,01,00,01;如果是一個接VCC了,那么地址順序應(yīng)該是01,01,11,11或者10,11,10,11。所以排除了地址腳和VCC或者GND短路的可能。還有就是,即便是地址短路了,如果出現(xiàn)在SDRAM的地址腳上,那么讀寫都一樣,即所謂的負負得正,也不會出現(xiàn)這樣的現(xiàn)象。

            那么到底是出現(xiàn)了什么問題了呢?冒失每次遍歷都會進行一次Y地址的重新寫入(通過MCU與CPLD的接口),而清屏指令只要發(fā)一條指令,CPLD內(nèi)部處理地址的運算。所以問題被定位到了MCU與CPLD得接口部分,它們之間接了4245進行電平轉(zhuǎn)換,地址的低2位是不是短路了?那么如果是4245輸入端短路了會怎樣?是4245的輸出端短路了又會怎樣?

            按照常理,IO口的VH和VL短路,在沒有動手測試前,我覺得應(yīng)該是輸出VL。所以這個認識也會否決了問題發(fā)現(xiàn)的原因出在這兩個IO口上,因為地址線正常輸入00,01,10,11,那么短路后輸出也應(yīng)該是00,00,00,11,而不會一下00,11的跳變。但是,事實證明我錯了。萬用表一測,確實兩個IO口短路了(4245的輸出端短路),為了驗證我的判斷,先燒了一個把兩個地址線一個拉高一個拉低的代碼,再次上電測量,電平大約在1.65V,這個1.65V是要輸入CPLD的(3.3V LVTTL電平)。查看了芯片資料,發(fā)現(xiàn)>1.7V判斷為VIH,而這個基本屬于邊界值的1.65V都在輸入CPLD時被判定為VIH了。所以就出現(xiàn)了最后的現(xiàn)象。

            感覺問題一點點解開了,于是扯開兩條短路線,重新上電測試,一切步入正軌??磥韱栴}果然如此,兩個的的確確不會只輸出一個簡單的VL,這個4245就給了一個1.65V,而別的器件若出現(xiàn)這個情況會怎樣呢?我不知道,但是有一點現(xiàn)在是可以肯定的,兩個的輸出結(jié)果需要根據(jù)這兩個IO的電路本身進行判斷。

            任何問題都不可以想當然。



          關(guān)鍵詞: IO短路

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();