一、單片機開發過程中硬件調試技巧
在單片機開發過程中,從硬件設計到軟件設計幾乎是開發者針對本系統特點親自完成的。這樣雖然可以降低系統成本,提高系統的適應性,但是每個系統的調試占去了總開發時間的2/3,可見調試的工作量比較大。單片機系統的硬件調試和軟件調試是不能分開的,許多硬件錯誤是在軟件調試中被發現和糾正的。但通常是先排除明顯的硬件故障以后,再和軟件結合起來調試以進一步排除故障。可見硬件的調試是基礎,如果硬件調試不通過,軟件設計則是無從做起。本文結合作者在單片機開發過程中體會,討論硬件調試的技巧。
當硬件設計從布線到焊接安裝完成之后,就開始進入硬件調試階段,調試大體分為以下幾步。
1 硬件靜態的調試
1.1排除邏輯故障
這類故障往往由于設計和加工制板過程中工藝性錯誤所造成的。主要包括錯線、開路、短路。排除的方法是首先將加工的印制板認真對照原理圖,看兩者是否一致。應特別注意電源系統檢查,以防止電源短路和極性錯誤,并重點檢查系統總線(地址總線、數據總線和控制總線)是否存在相互之間短路或與其它信號線路短路。必要時利用數字萬用表的短路測試功能,可以縮短排錯時間。
1.2排除元器件失效
造成這類錯誤的原因有兩個:一個是元器件買來時就已壞了;另一個是由于安裝錯誤,造成器件燒壞??梢圆扇z查元器件與設計要求的型號、規格和安裝是否一致。在保證安裝無誤后,用替換方法排除錯誤。
1.3排除電源故障
在通電前,一定要檢查電源電壓的幅值和極性,否則很容易造成集成塊損壞。加電后檢查各插件上引腳的電位,一般先檢查VCC與GND之間電位,若在5V~4.8V之間屬正常。若有高壓,聯機仿真器調試時,將會損壞仿真器等,有時會使應用系統中的集成塊發熱損壞。
2 聯機仿真調試
聯機仿真必須借助仿真開發裝置、示波器、萬用表等工具。這些工具是單片機開發的最基本工具。
信號線是聯絡8031和外部器件的紐帶,如果信號線連結錯誤或時序不對,那么都會造成對外圍電路讀寫錯誤。51系列單片機的信號線大體分為讀、寫信號線、片選信號線、時鐘信號線、外部程序存貯器讀選通信號(PSEN)、地址鎖存信號(ALE)、復位信號等幾大類。這些信號大多屬于脈沖信號,對于脈沖信號借助示波器(這里指通用示波器)用常規方法很難觀測到,必須采取一定措施才能觀測到。應該利用軟件編程的方法來實現。例如對片選信號,運行下面的小程序就可以檢測出譯碼片選信號是否正常。
MAIN:MOVDPTR,#DPTR
;將地址送入DPTR
MOVXA,@DPTR
NOP;適當延時
SJMPMAIN;循環
執行程序后,就可以利用示波器觀察芯片的片選信號引出腳(用示波器掃描時間為1μs/每格檔),這時應看到周期為數微秒的負脈沖波形,若看不到則說明譯碼信號有錯誤。
對于電平類信號,觀測起來就比較容易。例如對復位信號觀測就可以直接利用示波器,當按下復位鍵時,可以看到8031的復位引腳將變為高電平;一旦松開,電平將變低。
總而言之,對于脈沖觸發類的信號我們要用軟件來配合,并要把程序編為死循環,再利用示波器觀察;對于電平類觸發信號,可以直接用示波器觀察。
下面結合在自動配料控制系統中鍵盤、顯示部分的調試過程來加以說明。本系統中的鍵盤、顯示部分都是由并行口芯片8155擴展而成的。8155屬于可編程器件,因而很難劃分硬件和軟件,往往在調試中即使電路安裝正確沒有一定的指令去指揮它工作,也是無法發現硬件的故障。因此要使用一些簡單的調試程序來確定硬件的組裝是否正確、功能是否完整。在本系統中采取了先對顯示器調試,再對鍵盤調試。
(1)顯示器部分調試為了使調試順利進行,首先將8155與LED顯示分離,這樣就可以用靜態方法先測試LED顯示,分別用規定的電平加至控制數碼管段和位顯示的引腳,看數碼管顯示是否與理論上一致。不一致,一般為LED顯示器接觸不良所致,必須找出故障,排除后再檢測8155電路工作是否正常。對8155應進行編程調試時,分為兩個步驟:第一,對其進行初始化(即寫入命令控制字,最好定義為輸出方式)后,分別向PA、PB、PC三個口送入#0FFH,這時可以利用萬用表測試各口的位電壓為3.8 V左右,若送入#00H,這時各口的位電壓應為0.03 V;第二,將8155與LED結合起來,借助開發機,通過編制程序(最好采用“8”字循環程序)進行調試。若調試通過后,就可以編制應用程序了。
(2)鍵盤調試一般顯示器調試通過后,鍵盤調試就比較簡單,完全可以借助于顯示器,利用程序進行調試。利用開發裝置對程序進行設置斷點,通過斷點可以檢查程序在斷點前后的鍵值變化,這樣可知鍵盤工作是否正常。
以上討論了借助簡單工具對單片機硬件調試的方法,這些方法如果利用得好,就
可以大大縮短單片機的開發周期。
二、單片機破解的常用方法及應對策略
1 引言
單片機(Microcontroller)一般都有內部ROM/EEPROM/FLASH供用戶存放程序。為了防止未經授權訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密字節,以保護片內程序。如果在編程時加密鎖定位被使能(鎖定),就無法用普通編程器直接讀取單片機內的程序,這就是所謂拷貝保護或者說鎖定功能。事實上,這樣的保護措施很脆弱,很容易被破解。單片機攻擊者借助專用設備或者自制設備,利用單片機芯片設計上的漏洞或軟件缺陷,通過多種技術手段,就可以從芯片中提取關鍵信息,獲取單片機內程序。因此,作為電子產品的設計工程師非常有必要了解當前單片機攻擊的最新技術,做到知己知彼,心中有數,才能有效防止自己花費大量金錢和時間辛辛苦苦設計出來的產品被人家一夜之間仿冒的事情發生。
2 單片機攻擊技術
目前,攻擊單片機主要有四種技術,分別是:
?。ǎ保┸浖?/p>
該技術通常使用處理器通信接口并利用協議、加密算法或這些算法中的安全漏洞來進行攻擊。軟件攻擊取得成功的一個典型事例是對早期ATMEL AT89C 系列單片機的攻擊。攻擊者利用了該系列單片機擦除操作時序設計上的漏洞,使用自編程序在擦除加密鎖定位后,停止下一步擦除片內程序存儲器數據的操作,從而使加過密的單片機變成沒加密的單片機,然后利用編程器讀出片內程序。
?。ǎ玻?電子探測攻擊
該技術通常以高時間分辨率來監控處理器在正常操作時所有電源和接口連接的模擬特性,并通過監控它的電磁輻射特性來實施攻擊。因為單片機是一個活動的電子器件,當它執行不同的指令時,對應的電源功率消耗也相應變化。這樣通過使用特殊的電子測量儀器和數學統計方法分析和檢測這些變化,即可獲取單片機中的特定關鍵信息。
?。ǎ常┻^錯產生技術
該技術使用異常工作條件來使處理器出錯,然后提供額外的訪問來進行攻擊。使用最廣泛的過錯產生攻擊手段包括電壓沖擊和時鐘沖擊。低電壓和高電壓攻擊可用來禁止保護電路工作或強制處理器執行錯誤操作。時鐘瞬態跳變也許會復位保護電路而不會破壞受保護信息。電源和時鐘瞬態跳變可以在某些處理器中影響單條指令的解碼和執行。
(4)探針技術
該技術是直接暴露芯片內部連線,然后觀察、操控、干擾單片機以達到攻擊目的。
為了方便起見,人們將以上四種攻擊技術分成兩類,一類是侵入型攻擊(物理攻擊),這類攻擊需要破壞封裝,然后借助半導體測試設備、顯微鏡和微定位器,在專門的實驗室花上幾小時甚至幾周時間才能完成。所有的微探針技術都屬于侵入型攻擊。另外三種方法屬于非侵入型攻擊,被攻擊的單片機不會被物理損壞。在某些場合非侵入型攻擊是特別危險的,這是因為非侵入型攻擊所需設備通常可以自制和升級,因此非常廉價。
大部分非侵入型攻擊需要攻擊者具備良好的處理器知識和軟件知識。與之相反,侵入型的探針攻擊則不需要太多的初始知識,而且通常可用一整套相似的技術對付寬范圍的產品。因此,對單片機的攻擊往往從侵入型的反向工程開始,積累的經驗有助于開發更加廉價和快速的非侵入型攻擊技術。
3 侵入型攻擊的一般過程
侵入型攻擊的第一步是揭去芯片封裝。有兩種方法可以達到這一目的:第一種是完全溶解掉芯片封裝,暴露金屬連線。第二種是只移掉硅核上面的塑料封裝。第一種方法需要將芯片綁定到測試夾具上,借助綁定臺來操作。第二種方法除了需要具備攻擊者一定的知識和必要的技能外,還需要個人的智慧和耐心,但操作起來相對比較方便。
芯片上面的塑料可以用小刀揭開,芯片周圍的環氧樹脂可以用濃硝酸腐蝕掉。熱的濃硝酸會溶解掉芯片封裝而不會影響芯片及連線。該過程一般在非常干燥的條件下進行,因為水的存
在可能會侵蝕已暴露的鋁線連接。
接著在超聲池里先用丙酮清洗該芯片以除去殘余硝酸,然后用清水清洗以除去鹽分并干燥。沒有超聲池,一般就跳過這一步。這種情況下,芯片表面會有點臟,但是不太影響紫外光對芯片的操作效果。
最后一步是尋找保護熔絲的位置并將保護熔絲暴露在紫外光下。一般用一臺放大倍數至少100倍的顯微鏡,從編程電壓輸入腳的連線跟蹤進去,來尋找保護熔絲。若沒有顯微鏡,則采用將芯片的不同部分暴露到紫外光下并觀察結果的方式進行簡單的搜索。操作時應用不透明的紙片覆蓋芯片以保護程序存儲器不被紫外光擦除。將保護熔絲暴露在紫外光下5~10分鐘就能破壞掉保護位的保護作用,之后,使用簡單的編程器就可直接讀出程序存儲器的內容。
對于使用了防護層來保護EEPROM單元的單片機來說,使用紫外光復位保護電路是不可行的。對于這種類型的單片機,一般使用微探針技術來讀取存儲器內容。在芯片封裝打開后,將芯片置于顯微鏡下就能夠很容易的找到從存儲器連到電路其它部分的數據總線。由于某種原因,芯片鎖定位在編程模式下并不鎖定對存儲器的訪問。利用這一缺陷將探針放在數據線的上面就能讀到所有想要的數據。在編程模式下,重啟讀過程并連接探針到另外的數據線上就可以讀出程序和數據存儲器中的所有信息。
還有一種可能的攻擊手段是借助顯微鏡和激光切割機等設備來尋找保護熔絲,從而尋查和這部分電路相聯系的所有信號線。由于設計有缺陷,因此,只要切斷從保護熔絲到其它電路的某一根信號線,就能禁止整個保護功能。由于某種原因,這根線離其它的線非常遠,所以使用激光切割機完全可以切斷這根線而不影響臨近線。這樣,使用簡單的編程器就能直接讀出程序存儲器的內容。
雖然大多數普通單片機都具有熔絲燒斷保護單片機內代碼的功能,但由于通用低檔的單片機并非定位于制作安全類產品,因此,它們往往沒有提供有針對性的防范措施且安全級別較低。加上單片機應用場合廣泛,銷售量大,廠商間委托加工與技術轉讓頻繁,大量技術資料外瀉,使得利用該類芯片的設計漏洞和廠商的測試接口,并通過修改熔絲保護位等侵入型攻擊或非侵入型攻擊手段來讀取單片機的內部程序變得比較容易。
?。?應對單片機破解的幾點建議
任何一款單片機?從理論上講,攻擊者均可利用足夠的投資和時間使用以上方法來攻破。所以,在用單片機做加密認證或設計系統時,應盡量加大攻擊者的攻擊成本和所耗費的時間。這是系統設計者應該始終牢記的基本原則。除此之外,還應注意以下幾點:
?。ǎ保┰谶x定加密芯片前,要充分調研,了解單片機破解技術的新進展,包括哪些單片機是已經確認可以破解的。盡量不選用已可破解或同系列、同型號的芯片。
?。ǎ玻┍M量不要選用MCS51系列單片機,因為該單片機在國內的普及程度最高,被研究得也最透。
?。ǎ常┊a品的原創者,一般具有產量大的特點,所以可選用比較生僻、偏冷門的單片機來加大仿冒者采購的難度。
?。ǎ矗┻x擇采用新工藝、新結構、上市時間較短的單片機,如ATMEL AVR系列單片機等。
?。ǎ担┰谠O計成本許可的條件下,應選用具有硬件自毀功能的智能卡芯片,以有效對付物理攻擊。
?。ǎ叮┤绻麠l件許可,可采用兩片不同型號單片機互為備份,相互驗證,從而增加破解成本。
?。ǎ罚┐蚰サ粜酒吞柕刃畔⒒蛘咧匦掠∩掀渌男吞?,以假亂真。
當然,要想從根本上防止單片機被解密,程序被盜版等侵權行為發生,只能依靠法律手段來保障。
三、MCS-51單片機定時中斷不同應用情況
根據定時中斷的不同應用情況,應選擇不同的精確定時編程方法。MCS-51單片機的中斷響應延遲時間,取決于其它中斷服務程序是否在進行,或取決于正在執行的是什么樣的指令。單中斷系統中的中斷響應時間為3~8個機器周期.文中以定時器T1工作在定時方式1為例,晶振頻率為12MHz 。
1 方法1
在定時器溢出中斷得到響應時,停止定時器計數,讀出計數值(反映了中斷響應的延遲時間),根據此計數值算出到下一次中斷時,需多長時間,由此來重裝載和啟動定時器。例如定時周期為1ms,則通常定時器重裝載值為-1000(0FC18H)。下面的程序在計算每個定時周期的精確重裝載值時,考慮了由停止計數(CLR TR1)到重新啟動計數(SETB TR1)之間的7個機器周期時間。程序中#LOW(-1000+7)和#HIGH(-1000+7)是匯編符號,分別表示-1000+7=0FC1FH這個立即數的低位字節(1FH)和高位字節(0FCH)。
……
CLR EA ;禁止所有中斷
CLR TR1 ;停止定時器T1
MOV A,#LOW(-1000+7) ;期望數的低位字節
ADD A,TL1 ;進行修正
MOV TL1,A ;重裝載低位字節
MOV A,#HIGH(-1000+7) ;對高位字節處理
ADDC A,TH1
MOV TH1,A
SETB TR1 ;重啟動定時器
SETB EA ;重開中斷
……
此方法適用于各種原因造成的定時誤差的情況,為通用方法。
2 方法2
假如定時周期為10ms,通常定時器重裝載值為0D8F0H,中斷子程序如下[2]:
ORL TL1,#0F0H
MOV TH1,#0D8H
……
這里用ORL TL1,#0F0H代替MOV TL1,#0F0H 可提高定時精度。此方法只適用于重裝載值低位字節的低4位為零,且中斷響應的延遲時間小于16個機器周期的情況。類似的定時器重裝載值有0FFF0H,0FFE0H等。
3 方法3
假如定時周期為1ms,通常定時器重裝載值為0FC18H,中斷子程序如下:
MOV A,#LOW(-1000+4) ;期望數的低位字節
ADD A,TL1
MOV TL1,A
MOV A,#HIGH(-1000+4) ;對高位字節處理
ADDC A,TH1
MOV TH1,A
DEC TL1 ;恢復提前了的2個機器周期
……
?
方法4
假如定時周期不確定,只知道定時器重裝載值存放在寄存器R3、R2中,中斷子程序如下:
MOV A,#05H ;3個機器周期裝載TL1,2個周期提前
ADD A,TL1
ADD A,R2
MOV TL1,A
MOV A,R3 ;處理高位字節
ADDC A,TH1
MOV TH1,A
DEC TL1 ;恢復提前了的2個機器周期
……
此法適用于定時周期不確定的情況,其它同方法3。
5 方法5
當定時中斷發生的位置可預知時,通常出現在主程序的AJMP $ (或SJMP $)等待指令處,中斷延遲時間為3個或4個機器周期。取固定值4可簡化補償程序。以定時周期1ms為例,中斷子程序如下:
ORG 001BH
MOV TL1,#LOW(-1000+4)
MOV TH1,#HIGH(-1000+4)
……
此方法適用于定時中斷總發生在同一條指令位置,且無其它中斷源的情況。
四、單片機低功耗控制與設計的幾個要點
降低功耗不光能夠大大的節約電能還能簡化電源部分的設計,甚至可以用于手持設備上面使用,這些都已經越來越成為未來產品的設計方向了。
1 降低功耗從MCU選型開始。一開始選型的時候就應該考慮選擇低功耗的MCU比如MSP430一類的為低功耗設計的CPU。
強烈不建議使用51一方面是因為51速度慢,另外一方面是因為51的IO是有上拉電阻的,雖然當IO為高電平是上拉電阻不費電,但是下拉電流的時候卻也有不小的功耗產生。還有一點就是51的運算速度實在是太慢了~~~~~很多運算用51都需要很高的主頻而主頻高了就意味著高的功耗。
2 選擇器件用電電壓。很明顯降低器件的用電電壓能夠明顯的降低器件的耗電比如說ATmega8和ATmega88雖然芯片大致內部結構一致但是后者可以工作在1.8V的超低電壓下而前者就不行,綜合考慮下當然還是選擇后者。
3 盡量降低器件的工作頻率。大家都知道CMOS電路的工作電流主要來此于開關轉換時對后一級輸入端的電容充放電,如果能夠降低MCU的工作頻率自然耗電也就下來了,要知道當AVR工作在32.768Hz時和工作在20Mhz時的工作電流差異可不是一般的小啊。
4 盡量使用中斷讓處理器進入更深的睡眠。眾所周知睡眠模式和掉電模式能夠大大的降低MCU的工作電流,聰明的單片機設計師能夠充分的利用MCU的中斷功能讓MCU周期性的工作和睡眠從而大大的降低MCU的工作電流。
5 盡量關閉MCU內部不用的資源。這個嗎地球人都知道的好處,我說這個有點像廢話一樣,不用的東西你干嗎開著呢?比如ATmega8內部的模擬比較器,默認是開著的還有ATmega88內部的大多數資源都可以在不用的時候用軟件關閉。
6 盡量使用VMOS做為外部功率擴展器件。道理很簡單VMOS驅動的時候是電壓行器件驅動是幾乎不產生功耗,要比普通的晶體管省電多了,而且由于VMOS的導通內阻低通常只有幾十個毫歐,在小電流的時候器件自身發熱也小,尤其是小電流是效率遠比傳統晶體管要高的多的多。這里還是建議使用高速VMOS,因為高速VMOS在開關速度相當高的PWM時效率會更高。
7 片外IC的電源最好都能由MCU的IO控制比如說我們常用的24C02。由于它是掉電記憶的,所以我們完全可以在它不工作的時候對它關電源,以節約電流。還有比如說我們常用的6116的SRAM,我們完全可以用單片機來控制它的片選端口來控制它的工作與休眠從而節約電流。
8 這招也是最毒辣的一招。通常我們驅動一些LED器件,完全可以通過PWM來控制從而省略限流電阻,要知道當器件選定后它的內阻也就已經確定,而當電源電壓也確定的時候,就可以通過占空比來確定器件上的電壓,從而節約了限流電阻同時也就節約了限流電阻上面的功耗,如果用戶使用的是電池,我們完全還可以不定期的對電池電壓進行檢測然后改變占空比,從而恒定負載上面的電壓,達到電源的最大利用率。
五、提高單片機設計硬件可靠性的一般方法
1、電路設計
影響單片機測控系統可靠性的因素,有45%來自系統設計。為了保證測控系統的可靠性,在對電路設計時,應進行最壞情況的設計。
各種電子元件的特性不可能是一個恒定值,總是在其標注值的上下有一個變化的范圍。同時,電源電壓也有一個波動范圍,最壞的設計(指工作環境最壞情況下)方法是考慮所有元件的公差,并取其最不利的數值。核算電路的每一個規定的特性。如果這一組參數值都能保證正常工作,那么在公差范圍內的其它所有元件值都能使電路可靠地工作。在設計應用系統電路時,還要根據元件的失效率特征及其使用場所采取相應措施:
在元件級,對那些容易產生短路的部件,以串聯方式復制;對那些容易產生斷路的部件,以并聯方式復制,并在這些部分設置報警和保護裝置。
2、元器件選擇
(1)型號與公差 在確定元件參數之后,還要確定元器件的型號,這主要取決于電路所允許的公差范圍。對于電容器,如果用于常溫環境中,一般的電解電容就可以滿足要求,對于電容公差要求較高的電路系統,則電解電容就不宜選用。
(2)降額使用 元件的失效率隨工作電壓成倍的增加。因此,系統供電電源的容量就大于負載的最大值,元器件的額定工作條件是多方面的,如電流電壓頻率、功率、機械強度以及環境溫度等。所說的降額使用,就是要降低以上這些參數,在電路設計中,首先考慮的是降低它的功效。選用電容器時要降低它的工作電壓,使用電壓一般小于額定電壓的60%。選用二級管以及可控硅時,應使其工作電流低于額定電流,對于晶體管、穩壓管等應考慮工作時的耗散功率。
集成電路的降額使用同樣是從電氣參數及環境因素上來考慮。在電氣上要降低功耗,對CMOS芯片和線性集成電路在滿足輸出要求的前提下,應降低電源電壓或減少下級負載。而TTL電路對電源電壓要求比較嚴,這時應注意它們的帶負載能力,民用元器件的溫度使用范圍較窄,如果用于工業控制中,在整體設計時應降額使用。
3、結構設計
結構可靠性設計是硬件可靠性設計的最后階段,結構設計時首先應注意元器件及設備的安裝方式;其次是控制系統工作的環境條件,如通風、除濕、防塵等。
4、噪聲抑制
噪聲對模擬電路會影響系統的精度,對數字電路會造成誤動作,因此在工程設計中,必須采用抑制措施。干擾信號可分為串模干擾和共模干擾兩大類。針對這兩類干擾成熟的電路以及專題著作也不少,下面將常用的方法介紹如下:
4.1 抗串模干擾的措施
(1)光電隔離,在輸入和輸出通道上采用光耦合器件來進行信息傳輸,以免上一級干擾竄到下一級。
(2)硬件濾波電路,常用RC低通道濾波器接在一些低頻信號傳送電路中(如熱電偶輸入線路等),它可大大削弱各類高頻干擾信號(如各類“毛刺”干擾)。
(3)過壓保護電路,在輸入輸出通道上應采用一定的過壓保護電路,以防止引入高電壓傷害單片機系統。
(4)采用抗干擾穩壓電源,微機系統的供電線路是干擾的主要入侵途徑。通常采用以下幾種措施:
?、賳纹瑱C系統的供電線路和產生干擾的用電設備分開供電;
?、谕ㄟ^低通濾波器和隔離變壓器接入電網;
?、壅髟喜⒔訛V波電容,如圖1所示,選用高質量的穩壓電路。
4.2 抗共模干擾措施
共模干擾通常是針對平衡輸入信號而言的,抗共模干擾的方法有以下幾種:
(1)平衡對稱輸入,在設計信號源時,通常是各類信號盡可能做到平衡對稱。
(2)選用高質量的差動放大器。
(3)要有良好的接地系統。
(4)系統接地點要正確連接;系統中的大功率的元件地線與小功率的信號地線也要分開布線或加粗地線,數字地與模擬地必須分開,最后只在一點相連。如果系統中的數字地與模擬地不分,則數字信號電流在模擬系統的地線中形成干擾(地電位改變),使模擬信號失真,這一點請初學者特別注意。
(5)屏蔽,用金屬外殼或金屬匣將整機或部分元器件包圍起來,再將金屬外殼或金屬匣接地,就能起到屏蔽作用。對于各種通過電磁感應引起的干擾,特別注意的是屏蔽外殼的接地點,一定與信號的參考點相接。
以上介紹的幾項是十分必要的硬件抗干擾措施,它給單片機系統創造了一個基本上“干凈”的工作環境。
??????? 相關熱點精華內容推薦
??????? 單片機設計經驗技巧精華集錦
??????? 單片機典型案例開發(五)
?
??????? 單片機經典實驗實例精華詳解(附源程序)
?
?
?
評論
查看更多