1.通讯连接不上, 连接时显示:
ICD0019: Communications: Failed to open port: (Windows::GetLastError() = 0x2, '系统找不到指定的文件。') ICD0021: Unable to connect with MCU
问题解决:通常时ICD2驱动找不到,需重装。重装步骤参考C:\Program Files\Microchip\MPLAB IDE\ICD2\Drivers 下的帮助文件,这里不想啰嗦。需提醒如果MPLAB IDE V7.0以上版本,重装前要先运行C:\Program Files\Microchip\MPLAB IDE\Utilities\MPUsbClean下的MPUsbClean.exe 彻底删除
2.ICD2 自检通不过.
ICD2的自检主要是对Target Vdd、Target Vpp、MCLR GND、MCLR Vdd MCLR Vpp六个管脚电压进行检测,任何的一项不正常都会通不过。
出错具体情况可在ICD2 的status栏进行查看。找出出错的项,再检查该项的相关硬件连接。
注:可能有些芯片会提示Vpp High 从而导致自检通不过,这是ICD2的固件中检测Vpp电压时所设的上限阈值偏小所致,通常可忽略,ICD2还是能正常编程和调试的。如果有用 PIC16F91X的就请升级到最新版的IDE吧; 如果是dsPIC30F且IDE版本是V7.40, 那么到www.microchip.com/下载ICD2固件补丁吧。
3. ICD2自检通过,但连接时提示目标MCU ID与期望ID不符。提示:
ICDWarn0020: Invalid target device id (expected=0x89, read=0)
ICD2在connect时会自动检查目标MCU的ID与Device里设定的MCU型号是否一致。出现该提示一般有几种情况:
a) 读到的ID是 “0”。 此时首要任务是检查硬件连接,自检有没有通过,PGC/PGD有无接错。 若是PIC18J器件, 请确认Vddcore 是使能且该脚接了1-10uF的低ESR电容
当然有时候也有芯片或ICD2坏出现该提示的可能。
b) 读到的目标MCU ID不是 “0”,但和期望的不符合
如果是Debug模式下出现该提示,要先确认所选的MCU是否需要header才可通过ICD2调试。如果用了header出现该提示,那么检查header上用来设置ADC的 enable/disable的跳线。这个跳线也会影响目标Device的ID。请务必按实际的情况来设置该跳线。
4.ICD2编程时提示编程成功但校验失败
先检查PGC/PGD 有无外电路干扰吧!
再看看Vdd有没有达到4.5V以上(PIC18J/dsPIC33F/PIC24系列除外),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以上延时, 保证芯片在真正执行程序前进入编程模式。
5.ICD2进不了Debug模式
这问题大部分和晶振有关啦, 晶振都没工作怎么能调试?
首先保证晶振的管脚和OSCKI/OSCKO充分接近, 4Mhz以上晶振推荐使用HS模式。
如果是外部32K低频晶振,, 重新“connect”一下可执行调试指令
也有碰到内部或外部晶振使能了PLL功能而进不了Debug模式的,关掉PLL即可。