ISP的工作前提
1 芯片沒有物理損壞
2 芯片的SPIEN熔絲位=0 使能ISP功能
3 芯片的RSTDISBL熔絲位=1 RESET引腳有效 (假如芯片有這個熔絲位)
4 線路正常---------接錯線? 短路?
5 下載器正常-------特別要考慮 連線的接觸不良問題
6 電源
運行時鐘 ISP時鐘(必須低于運行時鐘的1/4)
4096Hz <1024Hz //很變態的用法,外接32.768KHz晶體+CKDIV8 ,不過AVRISP還是提供了603Hz這個速度了
//另一簡易解決辦法是 下載時在32.768KHz晶體并聯一個1MHz晶體,雙龍的下載線就配有一個8MHz的石英晶體
32768Hz <8192Hz
128KHz < 32KHz //內部RC128KHz
1.0MHz <250KHz //默認值(包括8MHz+CKDIV8),所以AVRISP的ISP速度多為230KHz
8.0MHz <2000KHz
16.0MHz <4000KHz
運行時鐘不等于震蕩器的頻率,因為部分AVR芯片有系統時鐘預分頻器,可以對震蕩器進行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
時鐘設定 ISP方案
內部RC 選擇合適的ISP速度
外部RC 接上合適的電阻和電容,選擇合適的ISP速度。------補救: 外部時鐘源接到XTAL1
外部RC 根本就沒有什么意義,頻率精度/穩定度不高,成本也沒有降低,所以新的AVR芯片已經沒有這個選項了。
各位網友要注意的是錯誤設定后補救方法
外部晶體 接上合適的晶體,選擇合適的ISP速度。 ------補救: 外部時鐘源接到XTAL1
外部時鐘 接上合適的時鐘源,選擇合適的ISP速度。 ------補救: 外部時鐘源接到XTAL1
外部時鐘源可以是外部(4MHz)有源晶體輸出,其他MCU的XTAL2腳,各種方波振蕩電路(NE555)輸出等
大部分AVR芯片的ISP端口是 SCK,MOSI,MISO,RESET
而M64/M128的ISP端口是 SCK, PDI, PDO,RESET
在ISP模式下永遠不能訪問(修改)SPIEN位,這是AVR芯片的硬件保護
有獨立RESET腳的M16/M32/M64/M128等,在ISP模式下根本就就不會令ISP無效,無論如何修改熔絲位,都能恢復正常。
M8/M48/M88/M168/Tiny系列有RSTDISBL熔絲位可以令導致RESET失效而令ISP無法工作外,其他情況都能恢復正常。
一般來說,只要滿足ISP的工作前提,再把XTAL1接到一個4MHz有源晶體的輸出,基本是萬試萬靈的。
不要忘記,并行高壓編程的時鐘信號也是從XTAL1導入方波信號的。
如果有源晶振的方法不行(除了ISPEN=0,RSTDISBL=0情況外),恐怕高壓編程也未必能奏效。