并行編程,,最早的編程方法,,功能最強大,但需要連接較多的引腳,,通常需要12V~24V的高壓,,以示區(qū)別,下面稱為 高壓并行編程,。
ISP(In System Programmability) 在系統(tǒng)編程,,簡稱為 串行下載
IAP(In Application Programing) 在應用編程,BootLoader也是類似的意思
1 ISP雖然利用了SPI接口(例外:M64/M128為UASRT0接口,,Tiny13等沒有SPI接口)的引腳,,但只在復位時起作用,而且下載完成后合格的下載器會自動斷開端口的連接,,對正常工作時沒有影響的( 在產(chǎn)品應用中,,下載器一定是不會一直粘在上面的),。
2 雖然高壓并行下載能修復任何熔絲位,但對于貼片封裝來說是很不現(xiàn)實的,,所以ISP接口是最常用的下載方式了
3 雖然IAP是一種新的升級方法,,但IAP程序本身也是要先用高壓并行下載或ISP來燒進芯片里面才行
4 Tiny13等少管腳AVR芯片因為管腳實在太少了,有ISP,但沒有[高壓并行編程]而特制了[高壓串行編程]
所以,,產(chǎn)品上一般都留有ISP接口插座,,或更省位置的----留6個焊盤就行了
ISP的工作前提
1 芯片沒有物理損壞
2 芯片的SPIEN熔絲位=0 使能ISP功能
3 芯片的RSTDISBL熔絲位=1 RESET引腳有效 (假如芯片有這個熔絲位)
4 線路正常---------接錯線? 短路,?
5 下載器正常-------特別要考慮 連線的接觸不良問題
6 電源
運行時鐘 ISP時鐘(必須低于運行時鐘的1/4)
4096Hz <1024Hz //很變態(tài)的用法,,外接32.768KHz晶體+CKDIV8 ,不過AVRISP還是提供了603Hz這個速度了
//另一簡易解決辦法是 下載時在32.768KHz晶體并聯(lián)一個1MHz晶體,雙龍的下載線就配有一個8MHz的石英晶體
32768Hz <8192Hz
128KHz < 32KHz //內(nèi)部RC128KHz
1.0MHz <250KHz //默認值(包括8MHz+CKDIV8),,所以AVRISP的ISP速度多為230KHz
8.0MHz <2000KHz
16.0MHz <4000KHz
運行時鐘不等于震蕩器的頻率,,因為部分AVR芯片有系統(tǒng)時鐘預分頻器,可以對震蕩器進行1~256分頻
CKDIV8熔絲位決定CLKPS位的初始值,。
若CKDIV8未編程,,CLKPS位復位為“0000”;若CKDIV8 已編程,,CLKPS 位復位為“0011”,,給出啟動時分頻因子為8
AVRISP可提供的ISP時鐘 921.6KHz,230.4KHz,, 57.6KHz,,28.8KHz,4.0KHz,, 603Hz
STK500可提供的ISP時鐘 1.845MHz,,460.8KHz,115.2KHz,,57.6KHz,,4.0KHz,1206Hz
時鐘設(shè)定 ISP方案
內(nèi)部RC 選擇合適的ISP速度
外部RC 接上合適的電阻和電容,,選擇合適的ISP速度,。------補救: 外部時鐘源接到XTAL1
外部RC 根本就沒有什么意義,頻率精度/穩(wěn)定度不高,,成本也沒有降低,,所以新的AVR芯片已經(jīng)沒有這個選項了。
各位網(wǎng)友要注意的是錯誤設(shè)定后補救方法
外部晶體 接上合適的晶體,,選擇合適的ISP速度,。 ------補救: 外部時鐘源接到XTAL1
外部時鐘 接上合適的時鐘源,選擇合適的ISP速度,。 ------補救: 外部時鐘源接到XTAL1
外部時鐘源可以是 外部(4MHz)有源晶體輸出,,其他MCU的XTAL2腳,,各種方波振蕩電路(NE555)輸出等
大部分AVR芯片的ISP端口是 SCK,MOSI,MISO,RESET
而M64/M128的ISP端口是 SCK, PDI, PDO,RESET
而且M64/M128出廠默認兼容M103----熔絲位M103C=0,很多新特性不能使用,,程序也可能不能正常運行
----因為C編譯器通常默認自動把SP指向SRAM的末端,,M103=0x0FFFH, M64/M128=0x10FFH,必然出錯,!
AVR的所有熔絲位均是:
1 未編程,多為不起作用的意思,。
0 編程,,多為 起作用的意思。
基于可編程工藝的都是這樣:
PROM/EEPROM/FLASH都是出廠時和擦除后變?yōu)槿?(0xFF)的,要編程才能變成0,。
反過來就是了,,跟CE/OE/INT都是[低電平有效]一樣,都是很常見,。
在ISP模式下永遠不能訪問(修改)SPIEN位,,這是AVR芯片的硬件保護
有獨立RESET腳的M16/M32/M64/M128等,在ISP模式下根本就就不會令I(lǐng)SP無效,,無論如何修改熔絲位,,都能恢復正常。
M8/M48/M88/M168/Tiny系列有RSTDISBL熔絲位可以令導致RESET失效而令I(lǐng)SP無法工作外,,其他情況都能恢復正常,。
一般來說,只要滿足ISP的工作前提,,再把XTAL1接到一個4MHz有源晶體的輸出,,基本是萬試萬靈的。
不要忘記,,并行高壓編程的時鐘信號也是從XTAL1導入方波信號的,。
如果有源晶振的方法不行(除了ISPEN=0,RSTDISBL=0情況外),恐怕高壓編程也未必能奏效,。
JTAG的影響(M16,M32,M128等):
JTAG能訪問 SPIEN 和 JTAGEN,要是不小心同時改成SPIEN=1,,JTAGEN=1,將會導致MCU鎖死,,需要高壓并行編程才能恢復,。
DebugWIRE的影響:(M48,M88,M168,T2313等,數(shù)據(jù)手冊里面的資料不是很詳細)
由于DebugWIRE使用RESET腳來通訊,所以跟ISP有所沖突
可以通過ISP或并行高壓編程來使能DebugWIRE功能[即DWEN=0],,使能DebugWIRE功能后,ISP功能失效,。
可以通過DebugWIRE來關(guān)閉DebugWIRE功能[即DWEN=1],關(guān)閉DebugWIRE功能后,如果RSTDISBL=1,,SPIEN=0,,ISP功能有效,。
比較特殊的是 DebugWIRE調(diào)試中,斷點的使用會降低Flash 數(shù)據(jù)記憶時間 DebugWIRE調(diào)試用的器件不能發(fā)給最終客戶,。
JTAG MKII同時具備JTAG/DeubgWIRE/ISP三種功能,,可以輕松實現(xiàn)DebugWIRE/ISP的切換。
(軟件需要升級到1.09版以后 即對應AVRstudio 4.12以后版本)
最新版本 JTAG MK2使用說明中文pdf(20051125)
設(shè)計使用debugWIRE 的系統(tǒng)時,,必須進行下面的檢查:
• dW/(RESET) 的上拉電阻不得小于10kΩ,。debugWIRE 并不需要上拉電阻
• 將 RESET 引腳與 VCC 直接連接將無法工作
• 使用debugWIRE 時必須斷開與RESET 引腳連接的電容
• 必須斷開所有的外部復位源