ICD2調試器常見問題
ICD2 調試時出現“ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information.”
通常這說明ICD2不能和調試執行程序通訊,這有可能是目標時鐘或電源問題使得ICD2不能和調試執行程序通訊,保證晶振的管腳和OSCKI/OSCKO充分接近,4MHz以上晶振推薦使用HS模式,如果是外部32K低頻晶振,重新“connect”一下可執行調試指令,也有可能內部或外部晶振使能了PLL功能而進不了Debug模式的,關掉PLL即可;再還有可能是配置位設置不當引起的,查看Config>Configuration Bits,確保看門狗被禁止,代碼保護、掉電檢測等被關閉
--------------------------------------------------------------------------------
連接ICD2時顯示“ICD0021: Unable to connect with MPLAB ICD 2”?
請檢查一下ICD2與電腦連接的通訊口是否設置正確(USB or COM)。
--------------------------------------------------------------------------------
連接ICD2時顯示“ICD0286: Unable to communicate with ICD
ICD0082: Failed MPLAB ICD 2 operation”
--------------------------------------------------------------------------------
連接ICD2時顯示“ICD0019: Communications: Failed to open port: (Windows::GetLastError() = 0x2, '系統找不到指定的文件。') ICD0021: Unable to connect with MCU.”
通常是ICD2驅動找不到,需重裝。如果MPLAB IDE V7.0以上版本,重裝前要先運行C:\Program Files\Microchip\MPLAB IDE\Utilities\MPUsbClean下的MPUsbClean.exe 徹底刪除
--------------------------------------------------------------------------------
ICD2自檢不通過提示“... Failed Self Test. See ICD2 Settings (status tab) for details”
ICD2自檢主要是對Target Vdd、Target Vpp、MCLR GND、MCLR Vdd MCLR Vpp六個管腳電壓進行檢測,任何的一項不正常都會通不過。出錯具體情況可在ICD2 的status欄進行查看,找出出錯的項,再檢查該項的相關硬件連接。若是PIC18J、PIC24、dsPIC30、dsPIC33系列的器件,是無法從ICD2供電給它們的,要求目標板外接電源,且要注意它們的電壓范圍。
注:可能有些芯片會提示Vpp High 從而導致自檢通不過,這是ICD2的固件中檢測Vpp電壓時所設的上限閾值偏小所致,通常可忽略,ICD2還是能正常編程和調試的
--------------------------------------------------------------------------------
ICD2自檢通過,但提示沒找到目標ID,讀到的ID是‘0’,顯示“ICDWarn0020: Invalid target device id (expected=0x89, read=0)”
此時首要任務是檢查硬件連接,PGC/PGD有無接錯,或PGD/PGC上有容性負載或感性負載。若是PIC18J器件,請確認vddcore是使能且該腳接了0.1-10uF的低ESR電容。注:ICD2到目標板的連接線如果是一端水晶頭,一端插針的,要注意白色才是第一根,藍色一般是不用的。(有些代理商作的icd2正好相反)
--------------------------------------------------------------------------------
ICD2自檢通過,但提示沒找到目標ID,讀到的ID不是‘0’,但和期望的不符合,顯示“ICDWarn0020: Invalid target device id (expected=0x89, read=0x71)”
首先檢查芯片型號選擇是否正確;如果是Debug模式下出現該提示,要先確認所選的MCU是否需要header才可通過ICD2調試。如果用了header出現該提示,那么檢查header上用來設置ADC的enable/disable的跳線,這個跳線也會影響目標device的ID。
--------------------------------------------------------------------------------
ICD2編程時提示編程成功但校驗失敗
首先檢查PGC/PGD有無外電路干擾,再看看Vdd有沒有達到4.5V以上(PIC18J/PIC24/dsPIC33F系列除外),ICD2對芯片編程時首先要全擦,對大部分PIC來說執行“Bulk Erase”時Vdd最小電壓是4.5V。這就要求即使是LF版的PIC在用ICD2編程時Vdd至少是4.5V,當然編完程后還是可以在低電壓下(3V)使用ICD2調試的。
如果芯片有AVdd和AVss腳, 請在ICSP編程時分別接到Vdd和Vss, 否則也會出現這樣的錯誤。
有些芯片使用時用到了內部晶振和內部復位,如PIC16F630/690等,用ICD2編程時一旦使能內部晶振和內部復位會有警告信息:
ICDWarn0033: You have selected Internal MCLR and Internal Oscillator in your configuration settings. If your code makes use of port pins that correspond to Clock and Data pins in programming mode, you may not be able to reprogram your device. See on-line help for this warning for more information. (OK/Cancel)
忽略該信息,初次ICD2可以成功編程該芯片。但如果芯片中已有配置字是內部晶振和內部復位的程序,且程序中有對ICSPCLK和ICSPDAT管腳的操作,再次編程就會有校驗失敗的錯誤提示。這是因為當使用內部晶振和內部復位時, ICD2一旦和目標板相連,目標芯片即已工作,ICD2對ICSPCLK和ICSPDAT的控制被目標芯片對這兩腳的操作打亂,故而進不了編程模式。這時該考慮其他編程工具,或者在程序開頭加2ms以上延時,保證芯片在真正執行程序前進入編程模式。 也有可能是ICD2占用了部分資源引起的。
--------------------------------------------------------------------------------
用ICD2調試或燒寫PIC16F630/676,PIC12F629/675等帶內部RC的器件,連接ICD2時警告“ICDwarn0044:Target has an invalid calibration memory value (Value). Continue?”
這是這些器件的程序存儲器最后一個單元上的內部RC校準值(retlw xx)被修改了,可用PICkit 1重新生成一個值;也可在MPLAB IDE的Programmer--settings--calibration memory選項卡里把Allow ICD2 to program calibration memory 前的勾打上再填一個新的值,燒寫后再次連接就沒問題了。
--------------------------------------------------------------------------------
為什么在配置鎖相環(PLL)振蕩器時有問題,ICD2被掛起?
這是PICmicro單片機所要求的。在對PLL振蕩器的配置位編程后,電源需要斷開然后再加到目標板上。如果沒有這樣做,目標PICmicro單片機將沒有時鐘。沒有時鐘,調試模式將不能工作。同樣,如果在切換到PLL模式時,電源沒有被斷開再連接,器件可能會運行,但沒有使用PLL。
--------------------------------------------------------------------------------
ICD2在調試PIC12F629/675或PIC16F630/676時,為什么會有Invalid target device id警告?
在使用MPLAB ICD2和ICD2 仿真頭調試這些器件過程中,這些器件的GP1/RA1 引腳不能被拉高,否則會警告Invalid target device id。參見MPLAB ICD 2 Header文檔。
--------------------------------------------------------------------------------
ICD2單步執行時,定時器為什么運行不正常?
這是使用在線調試器的缺點之一。由于代碼實際上是在調試執行程序中運行,在調試執行程序運行期間,即使用戶的應用程序被中止,定時器也會繼續運行。
--------------------------------------------------------------------------------
ICD2通過RETFIE 指令來使用高優先級中斷時,為什么 W 、 STATUS 和BSR寄存器的值會改變?
用于高優先級中斷和CALL FAST 的影子寄存器被MPLAB ICD 2 使用了。這些是保留給MPLAB ICD 2 操作的資源。如果斷點設置在CALL FAST 子程序內,或者在通過RETURN FAST 或RETFIE 指令使用了影子寄存器的高優先級中斷服務程序內,將會出現問題。
--------------------------------------------------------------------------------
dsPIC 使用ICD2在線調試的接口選擇
在某些情況下,dsPIC默認的編程和調試引腳功能PGC/EMUC和PGD/EMUD,可能與其他外設(如I2CTM?、SPI或UART模塊等)引腳復用。在這種情況下,應用能將這些引腳用于編程,但不能用于在線調試。此時在線調試應該使用備用調試通道,EMUC/EMUD1、EMUC2/EMUD2或EMUC3/EMUD3,具體的電路設計請參考152816.pdf文檔。
--------------------------------------------------------------------------------
ICD2當在程序的起始位置設置一個斷點時,為什么它停止在地址0x0001 ,而不是地址0x0000 ?
MPLAB ICD 2 在斷點后的指令上暫停。這意味著設置了斷點的地址0000 處的指令會被執行,接著當它發現斷點時,程序計數器會指向地址0001。如果用戶需要在其代碼的第一條指令處暫停,他們必須在地址0000 處插入一條NOP 指令。
--------------------------------------------------------------------------------
ICD2通信不上
有可能操作系統有誤,此時需要寄到原廠重新下載;也有可能是升級模塊跟主板沒有接觸好。
--------------------------------------------------------------------------------
ICD2調試時出現ICDWarn0015: Program memory has changed since last program operation?
程序修改之后沒有再重新編譯、燒寫到芯片里
--------------------------------------------------------------------------------
ICD2連接時出現ICD0152: Failed to read all of requested bytes (0x0 of 0x8)?
首先,ICD2是用USB還是串口跟電腦連接的?如果是串口連接的,改一下串口屬性,具體步驟如下:
右擊我的電腦--屬性--硬件--設備管理器--端口(COM)--COM1(如果用其他COM,則選擇相應的COMx)--屬性--端口設置,在這里要做兩個設置:
1,流控制方式--選擇硬件
2,點擊“高級”按紐--使用FIFO緩沖區。。。前面那個鉤去掉。 設置完后可能還需要重啟電腦。其次,升級一下IDE版本。
--------------------------------------------------------------------------------
PICKit2燒寫完程序時出現Warning - No configuration word found in hex file?
那是因為燒寫的程序里沒有包含Config信息,需要在MPLAB IDE里對configbits進行設置,具體步驟:
1、打開MPLAB IDE;
2、通過file->import,打開要燒寫的HEX文件;
3、對configbits進行設置;
4、通過file->export,導出HEX文件。
此時的HEX文件才是包含了config 信息的HEX文件,這樣再用PICKIT2燒寫的話應該就不會提示那個錯誤了。
評論
查看更多