<var id="ffjzv"><video id="ffjzv"></video></var>

    <var id="ffjzv"><strike id="ffjzv"><sub id="ffjzv"></sub></strike></var>

      <mark id="ffjzv"></mark>
      <delect id="ffjzv"></delect>

        <var id="ffjzv"><strike id="ffjzv"><listing id="ffjzv"></listing></strike></var>

        <var id="ffjzv"></var>
          <font id="ffjzv"><strike id="ffjzv"></strike></font>
          網(wǎng)站首頁(yè) 公司簡(jiǎn)介 產(chǎn)品展示 新聞中心 技術(shù)文章 在線(xiàn)留言 聯(lián)系我們

          點(diǎn)擊量多的產(chǎn)品
          技術(shù)文章

          靜電放電固件和軟件設計原則
          點(diǎn)擊次數:6957 更新時(shí)間:2010-08-26

          雖然固件設計不能防止系統中器件的損壞,,但是能夠有效地避免一些非*性的損壞。通過(guò)適當寫(xiě)入的固件,不可恢復的設備故障(死鎖)通??梢员苊?,可恢復的故障也可以減少10倍。
          如同硬件上的靜電放電措施一樣,抗靜電放電的固件也是有代價(jià)的。通常,程序會(huì )更大一些,這意味著(zhù)需要更長(cháng)的編程時(shí)間和存儲單元。權衡得失時(shí),要將這種代價(jià)與單純依靠硬件解決靜電放電問(wèn)題時(shí)的成本做對比。在許多微處理器的應用中,固件措施的成本要比硬件低。
          在編寫(xiě)靜電放電抗擾性強的固件時(shí)一定要樹(shù)立的的一個(gè)觀(guān)念是“不確定性”。也就是,一定不能認為端口、寄存器等的狀態(tài)是一定的。例如,當使用一個(gè)索引寄存器時(shí),應該問(wèn)一下,如果這個(gè)索引發(fā)生錯誤時(shí),會(huì )發(fā)生什么問(wèn)題。如果僅是僅發(fā)生一些暫時(shí)的或無(wú)關(guān)緊要的問(wèn)題,如發(fā)光二極管閃爍,則不需要什么特殊的處理。如果會(huì )發(fā)生很?chē)乐氐膯?wèn)題,例如系統發(fā)生死鎖,則必須采取措施來(lái)避免問(wèn)題的發(fā)生。
            固件(軟件)靜電放電措施可以分為兩類(lèi):
              * 刷新
              * 檢驗和重新寫(xiě)入
            下面從概念上討論每種措施,并給出一些例子。由于不可能預見(jiàn)到所有的特殊情況,要使固件能夠抵抗靜電放電,設計人員必須對整個(gè)系統有一個(gè)全面的了解。雖然下面的討論主要針對固件,但是其中的許多概念對于軟件設計也是適用的。
            刷新:
            進(jìn)行刷新時(shí),程序員不關(guān)心過(guò)去的情況,而僅是用確定的數據來(lái)保證今后的狀態(tài)。例如,在從8409的端口讀取數據時(shí),一定要先向端口寫(xiě)入數據。即使這個(gè)端口從上次更新以后一直沒(méi)有改寫(xiě),也要進(jìn)行這個(gè)步驟。絕不要認為端口上還保留著(zhù)上次寫(xiě)入的數據。刷新時(shí)需要考慮的其它因素包括:
            A) 按照一定的時(shí)間間隔打開(kāi)中斷使能端(在8049中是RETR,在8051中是RETI)
            B) 當端口用于串行數據輸出時(shí),刷新停止位的電平。
            C) 刷新鎖存器和端口輸出狀態(tài)。
            D) 定期讀取控制和選擇輸入,保證系統工作在適當狀態(tài)。
            E) 對于8049和8051處理器,每個(gè)程序環(huán)路中至少有一條寄存器選擇指令。

            在進(jìn)行刷新時(shí),另一個(gè)需要考慮的因素是刷新的順序。有時(shí),刷新的順序十分重要。例如,在同步輸入/輸出中,數據線(xiàn)一定要在時(shí)鐘線(xiàn)之前刷新。否則,經(jīng)過(guò)刷新的時(shí)鐘會(huì )使數據位丟失。如前所述,一定要考慮在錯誤條件下每條指令的順序。
            檢驗和復位:
            有時(shí),單純刷新還是不夠的。在有些情況下,刷新甚至會(huì )掩蓋一些嚴重的問(wèn)題。在這些情況下,寄存器、端口等需要通過(guò)檢驗來(lái)確認其狀態(tài)。如果狀態(tài)不對,程序應該試圖對其進(jìn)行更正。
            進(jìn)行復位(或初始化)時(shí)一定要非常謹慎。雖然系統的狀態(tài)可能有疑問(wèn),但是將系統*初始化并不是一個(gè)好方法。這會(huì )丟失所有過(guò)去的數據。應該遵守的原則是,使系統處于zui可能的狀態(tài),而這個(gè)狀態(tài)應該使問(wèn)題的危害zui小。如果有些關(guān)鍵的項目沒(méi)有zui可能的狀態(tài),則應該將其狀態(tài)保留起來(lái)。這便于以后采用投票的方式來(lái)確定當前狀態(tài)。通常,“3取2”的投票方式就可以了。
            檢驗函數通??梢苑譃?類(lèi)。特別要做以下檢驗,如果發(fā)現錯誤,需要初始化。
            A) 檢驗程序流是否正確:
             1) 在主程序中,在子程序返回前,要定期檢驗子程序堆棧指針,以確認子程序在預定的范圍內運行。
             2) 如果不檢查堆棧指針(或在檢查堆棧指針的基礎上),可以使用“標牌”來(lái)幫助發(fā)現程序運行中的問(wèn)題。當進(jìn)入一個(gè)子程序時(shí),保存標牌,當離開(kāi)子程序時(shí),檢查這個(gè)標牌。
             3) 在禁用區域中安排“陷阱”碼,例如編碼表或無(wú)用的中斷矢量。當程序要執行這些碼時(shí),就被抓?。ɡ缭谖词褂玫谋砀裰邪才欧祷刂噶睿?。
          為了檢查程序流是否正常,在程序中還應該包含以下兩個(gè)子程序:
             4) 為了確認主程序運行正常,應該有一個(gè)永遠不會(huì )停止和失效的計時(shí)程序。
             5) 主程序應定時(shí)檢查上面的定時(shí)程序,確認其是否運行正常(如果微處理器沒(méi)有內置的計時(shí)器,可以使用外置的硬件“看門(mén)狗”電路。當處理器沒(méi)有按時(shí)將計時(shí)器復位時(shí),外置電路會(huì )將處理器復位)。

            B) 檢驗存儲的數據和信息是否正確
             1) 定期對保留的項目進(jìn)行表決,如果沒(méi)有一致性,進(jìn)行初始化。特別,狀態(tài)標志(特別是使能標志)要保留有備份。除了備份以外,還可以使用糾錯碼。
             2) 對于索引和其它一些十分重要的寄存器,在使用其所存儲的數據之前,要對其數值或范圍先進(jìn)行檢查。
             3) 如果關(guān)鍵數據很多而不適合備份,或者無(wú)法檢驗所有信息時(shí),可以用檢驗和或周期性冗余檢驗(CRC)來(lái)對數據塊檢驗。

            C) 對輸入和輸出進(jìn)行檢驗
             1) 利用各種方法,如奇偶校驗、檢驗和等,對輸入進(jìn)行檢驗
             2) 確認輸入數據的合理性,有些數據可能有明顯的錯誤。 
             3) 對所有輸入級電平至少取樣兩次以實(shí)現對噪聲的“軟件濾波”
             4) 通過(guò)使接收機響應輸出級來(lái)進(jìn)行校驗輸出端
             5) 接收裝置應能識別所有有效的輸入信號,如果接收裝置不能識別,那么發(fā)送裝置應具有再傳輸能力。
            如果以上措施均不能正確檢查,則要求能自動(dòng)恢復。當然,這種恢復能力通常不能與加電(或硬件)復位過(guò)程中的初始化程序不同,RAM不應清除掉。實(shí)際上,由于靜電放電(ESD)而使錯誤程序反向復位時(shí),執行硬件初始化程序不應妨礙處理器的工作。這通??梢酝ㄟ^(guò)檢查執行硬件復位程序的標志寄存器的優(yōu)先級來(lái)完成。如果已經(jīng)設定標志,則應避免*復位。當主程序執行時(shí),此標將被重新設定,一般僅被處理器的實(shí)際硬件復位所清除。特別地,通常應按以下步驟來(lái)完成復位:
            1、復位子程序堆棧指針。
            2、復位FIFO指針。
            3、復位計數器。
            4、阻止可疑碼的傳輸。
            5、在復位完成時(shí)才允許中斷,然后再重新啟動(dòng)計數器。
            6、復位中斷不確定的標志
            7、刷新輸出。
            8、如果主機系統接受復位,使其發(fā)磅一代碼以通知復位已完成。那么,主機就可以采取措施來(lái)確保系統的
                  所有部分都諧調一致地工作。
            9、當然,復位程序必須清除引起復位動(dòng)作的具體問(wèn)題。
              
            上述大部分討論假定系統正處于執行程序的狀態(tài)中(盡管不一定正確),`如果程序包括表格,處理器可能會(huì )盡力去執行這些單元值并將其作為指令。從理論上講,內存單元值可能會(huì )引起看門(mén)狗計數器停止計數,從而使處理器進(jìn)入死循環(huán)。對于這種情況,可將邏輯分析儀接到地址總線(xiàn),這樣有可能找到問(wèn)題的癥結所在。循環(huán)期間的一個(gè)內存單元值應由一個(gè)返回指令來(lái)代替。這一般會(huì )使處理器跳出循環(huán),于是程序可能會(huì )發(fā)生變化,因此,被替換的單元值便經(jīng)過(guò)特殊方式進(jìn)行了處理。(如果有可能的話(huà),空閑的內存單元地址應用于控制這個(gè)返回操作碼。實(shí)際上,如前處述,將返回碼填滿(mǎn)所有空閑地址是極有可能的。)當然,這個(gè)邏輯分析儀也能夠發(fā)現程序其他部分的死循環(huán)。然而,如利用帶有偽程序的單片微處理器來(lái)進(jìn)行設計,那么地址總線(xiàn)將變得無(wú)效。這種情況下,在調試后,程序可以在仿真系統中具有“靜電放電加固”的性質(zhì)。一旦程序被調試好且運行正常的話(huà),它就可隨意改變寄存器的值以模擬靜電放電效果。
            程序計數器是很關(guān)鍵的,應被設置成隨意值。而且,子程序堆棧指針應設置成變量值。通過(guò)在仿真過(guò)程中作這些變化且不影響結果,許多潛在的問(wèn)題都可以得以發(fā)現。這種方法并不總是有效的,但帶有特殊問(wèn)題的系統是不允許的。應用這些原理,與固件相關(guān)的靜電放電問(wèn)題相對來(lái)說(shuō)會(huì )很少的。

           
          上一篇:電子鎮流器的CE電磁兼容設計 下一篇:電磁兼容(EMC)設計的元器件選型

          推薦產(chǎn)品

          最新產(chǎn)品
          較早新聞
          較早技術(shù)文章
          上海普銳馬電子有限公司 2008版權所有 總訪(fǎng)問(wèn)量:402385 地址:上海市松江區久富開(kāi)發(fā)區盛龍路77號 郵編:201615 聯(lián)系人:黃張朋
          電話(huà):021-51877625-8628 傳真:021-33522759 郵箱:1987440091@qq.com ICP備:滬ICP備06036363號-6 管理登陸 技術(shù)支持:智能制造網(wǎng) GoogleSitemap
          上海普銳馬電子有限公司(www.whfhxn.com)主營(yíng)產(chǎn)品:汽車(chē)電子干擾模擬器,脈沖群發(fā)生器,群脈沖發(fā)生器

          智能制造網(wǎng)

          推薦收藏該企業(yè)網(wǎng)站
          俺去啦先锋最新丝袜足交,纯肉黄辣放荡高H无码视频,后进白嫩少妇大屁股仙踪林,亚洲综合另类丝袜久久久