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