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