1、 ICDWarn0020: Invalid target device id (expected=0x70, read=0x0)出現這項提示時,是ICD2 主機與目標芯片之間通信不正常,可檢查:
目標板上的芯片是否正確,電源“Power”設置是否正確。
芯片的調試引腳線路連接是否錯誤,引腳上是否有電容或電感等元件。
如果讀回的ID 不是00,但與期望的ID 不符合,則為軟件選擇的芯片型號與實際的目標芯片型號不符合。
如果讀回的ID 為00,則為ICD2 主機與芯片之間通信有問題,檢查六芯線與芯片的連接是否可靠。由于水晶頭與卡座之間經常需要插拔比較容易松動而導致接觸不良,大部分的0020 警告都是由于這個原因產生的。
另外電源地線未連接好,包括目標板電源供電不足,也可導致此提示。常見為只連接了一組的電源地到六芯線,請把所有電源地均連接好,包括AVDD,AVSS。
2、ICD0019: Communications: Failed to open port: (Windows::GetLastError() = 0x2, ‘系統找不到指定的文件?!?ICD0021: Unable to connect with MPLAB ICD 2出現這二項提示時,是PC 與ICD2 之間通信不正常,可檢查:
ICD2 是否已連接到PC,用232 串口連接的,檢查供電和“Power”設置是否正確。
驅動是否正確安裝,或者由于PC 的USB 口供電不足導致驅動無法正確加載。
如果熱插拔ICD2 的USB 線,很容易出現以上提示,關掉MPLAB IDE,過一會再重新啟動IDE 軟件并聯接即可。
3、 ICD0161: Verify failed (MemType = Program, Address = 0x40, Expected Val = 0x0, Val Read = 0x3FFF)出現該提示時,是由于目標板芯片燒寫不正確導致檢驗失敗,可檢查:
目標芯片的MCLR/VPP 引腳上沒有除ICD2 接口外的其他電路,常見復位電路請采用跳線進行隔離。
ICD2 與芯片的接口線路中有沒有連接電感或電容特性的電路。
如果選擇由ICD2 向目標板供電,則有可能由于ICD2 不能向目標板提供足夠的工作電流,導致燒寫不穩定出現燒寫失敗。此時應該采取目標板獨立供電。并在軟件上不要選擇從ICD2 向目標板供電。
注意:某些特殊的芯片(例如PIC16F627A),在同時使用了內部振蕩和內部復位的情況下,燒寫成功后也將會提示CONFIG 區校驗失敗的信息。這是正常的表現,由于同時使用了內部振蕩和內部復位,一旦燒寫成功,芯片將直接運行 目標程序,此時由于無法進入燒寫模式,校驗必然是不正確的。
4、 ICD0083: Debug: Unable to enter debug mode. Please double click this message formore information.
無法進入調試模式,出現該錯誤時,一般為振蕩不正常。確認MPLAB IDE軟件上設置的振蕩類型與實際的目標板是否符合,或者目標板振蕩是否起振。
4MHz 以上晶振推薦使用HS 模式,如果是外部32K 低頻晶振,重新“connect”一下可執行調試指令。
內部或外部晶振使能了PLL 功能而進不了Debug 模式的,關掉PLL 即可。
配置位設置不當引起的,查看Configure→Configuration Bits,確??撮T狗被禁止,代碼保護、掉電檢測等被關閉。
復位引腳和芯片的接口線路中有沒有連接電感或電容特性的電路。
5、 ICDWarn0015: Program memory has changed since last program operation? Continue with Debug operation?
調試時出現該提示,是程序修改之后沒有再重新編譯、燒寫到芯片里。
6、 … 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 還是能正常編程和調試的。
7、 ICDwarn0044:Target has an invalid calibration memory value (Value). Continue?
用ICD2 調試或燒寫PIC16F630/676..等帶內部RC 的器件時,這些器件的程序存儲器最后一個單元上的內部RC 校準值已被修改,可用PICkit 1 重新生成一個值,也可用MPLAB IDE 的菜單命令Programmer→settings,在打開的窗口里,選“calibration memory”頁,在“Allow ICD2to program calibration memory ”前打勾,再填一個新的值,燒寫后再次連接就沒問題了。
8、 當在程序的XX 位置設置一個斷點時,為什么它停止在地址XX+1 處,而不是地址XX 處?
ICD2 在斷點后的指令上暫停。這意味著設置了斷點地址XX 處的指令會被執行,接著當它發現斷點時,程序計數器會指向地址XX+1。如果需要在其代碼的XX 指令處暫停,必須在地址XX處插入一條NOP 指令。
9、 單步運行時,定時器為什么運行不正常?
這是使用在線調試器的缺點之一。由于代碼實際上是在調試執行程序中運行,在調試執行程序運行期間,即使用戶的應用程序被中止,定時器也會繼續運行。
10、為什么ICD2 在調試的時候中斷不正常?
這是因為ICD2 在調試的時候占用了一些內部資源,導致不能調試芯片的定時器中斷和PIC18系列器件的高優先級中斷。
11、在內存中看見70h 為RR,且不能手動修改,這是為什么?
說明這個地址的寄存器已被ICD2 占用,ICD2 在線調試的時候會占用芯片的部分資源,具體的可以參考下面文檔:Microchip\MPLAB IDE\ICD2\hlpMPLABICD2.chm\Operation\MPLAB ICD2 Overview\Resources Used By MPLAB ICD2 幫助文件中查看,在內存中查看標為RR 時不可用。
12、通過RETFIE 指令來使用高優先級中斷時,為什么W、STATUS 和BSR 寄存器的值會改變?
用于高優先級中斷和CALL FAST 的影子寄存器被ICD2 使用了。這些是保留給ICD2 操作的資源。如果斷點設置在CALL FAST 子程序內,或者在使用RETURN FAST 或RETFIE 指令時使用了影子寄存器的高優先級中斷服務程序,將會出現問題。
13、為什么有時軟件上無法選擇由ICD2 向目標板供電?
對于PIC18FXXJXX、PIC24、dsPIC30F、dsPIC33F 系列的器件,MCHP 為了保護開發工具,禁止了該項操作,調試或燒寫的時候目標器件需要獨立供電。
14、在用PIC12F629/675/16F630/676/627A/628A/648A 仿真頭時,需要注意哪些地方?
必須使用內部振蕩或外部有源振蕩;MCLR 引腳必須為高電平。當GP1/RA1 為高電平時將無法進行調試,不能在對GPIO 操作的指令上設置斷點。
15、在調試PIC12F629/675/PIC16F627A/628A/PIC16F630/676/PIC16F648A 時,為什么會有Invalid target device id 警告?
在使用ICD2 仿真頭調試這些器件的過程中,器件的GP1/RA1 引腳不能被拉高,否則會有警告Invalid target device id。參見MPLAB ICD2(DS51292)文檔,獲得更多關于對這些器件使用ICD2 的信息。
16、有些芯片使用時用到了內部晶振和內部復位,如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 以上延時,保證芯片在真正執行程序前進入編程模式。
17、連接時出現ICD0152: Failed to read all of requested bytes (0x0 of 0x8)
如果ICD2 是串口連接的,需修改串口屬性,具體步驟如下:
右擊我的電腦→屬性→硬件→設備管理器,在端口(COM)→COM1(如果用其他COM 口,則選擇相應的COMx)→屬性→端口設置,在這里要做兩個設置:
1 流控制方式:選擇為硬件
2 點“高級”按紐,在“使用FIFO 緩沖區..”把前面的勾去掉。設置完后重啟電腦。
18、為什么需要ICD 轉接仿真頭?
對于ICD2 支持的低引腳器件,如果在線調試引腳被保留,將不能有效地使用這些器件。試想一下,對于8 個引腳的器件,6 個I/O 引腳失去其中3 個的情形。為此,生產了特殊的轉接頭來仿真這些低引腳器件,轉接仿真頭是單片機加上與ICD2 的在線通訊接口引腳,這使得能在目標應用中使用所有的引腳。
這樣做的優點是可以用ICD2 開發低引腳器件。缺點是對于這些器件,在進行在線調試時,不能在目標應用中采用ICD2 的ICSP 連接口,而要使用仿真頭來開發使用。
19、dsPIC 使用ICD2 在線調試的接口選擇。
在某些情況下,dsPIC 默認的編程和調試引腳功能PGC/EMUC 和PGD/EMUD,可能與其他外設(如IIC、SPI 或UART 模塊等)引腳復用。在這種情況下,應用中可將這些引腳用于編程,但不能用于在線調試。此時在線調試應該使用備用調試通道,EMUC/EMUD1、EMUC2/EMUD2 或EMUC3/EMUD3,具體的電路設計請參考152816.pdf 文檔。
20、為什么在配置鎖相環(PLL)振蕩器時ICD2 被掛起?
這是PICmicro 單片機所要求的。在對PLL 振蕩器的配置位編程后,電源需斷開后再加到目標板上。如果不這樣做,目標PICmicro 單片機將沒有時鐘,調試模式將不能工作。同樣,如果在切換到PLL 模式時,電源沒有被斷開再連接,器件可能會運行,但沒有使用PLL。
21、ICD2 調試時ERROR 燈突然點亮,但調試其它MCU 又正常。
這可能是ICD2 占用了芯片內部資源,程序到一定規模如果發生RAM 或ROM 資源沖突,就會引起錯誤,ERROR 燈就亮。
22、在PICMATE2004/2002 下編譯通過的程序,通過MPLAB IDE 編譯失敗。
這種情況大多是由于符號的大小寫敏感選項未正確設置造成的。按如下步驟進行設置:建立一個項目,添加源文件,到Project→Build Option→Project 打開窗口,在MPASM Assembler頁的Disable case sensitivity 選項, 默認為不打勾,區分大小寫,打勾則不區分大小寫。
23、在第三方設計的仿真工具上調試仿真正常的代碼文件,寫入芯片后不能運行。
這種情況是第三方工具軟件編譯保存的格式不同,或是不包含CONFIG 配置字信息所至。
使用File→Import 導入第三方工具軟件編譯的hex 文件,檢查芯片設置和CONFIG 配置字正確后,然后再燒寫。
或使用MPLAB IDE 編譯器,對在第三方仿真器下調試通過的源代碼再次編譯。這時候需要建立必要的項目,而且必須對芯片類型,CONFIG 配置字進行相應的設置。此時產生的hex 文件是包含配置字信息的hex 文件??捎肍ile→Export 命令導出保存,用于對芯片的燒寫。
24、安裝USB 接口時,選擇的是從指定位置安裝,第一次提供的是ICD2W2K1.INF,安裝完后又重復安裝,提供的是ICD2W2KL.INF,這是怎么回事?
這是正常的,它需要安裝兩次。
25、ICD2 的USB 驅動程序在哪里?
在MPLAB IDE 的安裝目錄下: Program Files\Microchip\MPLAB IDE\ICD2\Drivers\icdw2k.inf(icd2w2kl.inf) 。
26、當安裝時,為什么找不到驅動,即使能在驅動文件夾中看到它們,并且在驅動向導中指向了正確的文件夾也不行?
這個問題可以這樣解決:退出驅動安裝向導,再到控制面板選擇“Add New Hardware (添加新硬件)”。在系統搜索新硬件后,選擇“No, the device isn’t in the list.”,然后選擇”No, I want to select the hardware from a list.”,再選擇“Universal Serial Bus Controller,”。當出現“Have Disk…”按鈕時,進入驅動文件夾,并選擇正確的驅動。
27、網上有人說無論是自搭電路或是使用適配器,只要接入相應的晶體即可同時構成燒寫和仿真雙功能,Vpp 接腳無須任何處理,會自動在二者間切換(此功能世上獨此一家),不像其他的ICD2需要更改Vpp 電路(通常是在仿真時將芯片的MCLR 端和ICD 的Vpp 連接斷開,再通過一個4.7k電阻接到VDD).這是怎么回事?
誤導初學者。用戶通過MPLAB IDE 的下拉菜單,均可方便地讓ICD2 在燒寫和仿真功能之間任意切換,根本無需更改Vpp 電路?。?!
如果需要使用C 語言來編程,那么還需要設置語言工具的路徑。
點擊主菜單的Project→Set Language Tool Locations 來設置語言工具路徑。在系統彈出的“Set Language Tool Locations”(設置語言工具位置)對話框里選擇相應的語言工具,本例中選擇的是HITECH PICC 編譯器。在相應的語言選項的子樹“Executables”(可執行文件)樹下點擊相應的選項,使用“Browse”(瀏覽)來設置對應的可執行文件。
在本例中,將“HI-TECH Assembler”、“HI-TECH Complier”和“HI-TECH Linker”都設置指向為D:\HT-PIC\bin\picc.exe,這是PC 上的HITECH PICC 編譯器路徑,應該根據實際安裝情況來設置。
如果只使用匯編語言進行編程,那么他們可以不設置這項,直接使用默認設置。