技术热线: 4007-888-234

常见问题解释

更新时间: 2019-01-05
阅读量:2403

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,确保看门狗被禁止,代码保护、掉电检测等被关闭。

复位引脚和芯片的接口线路中有没有连接电感或电容特性的电路。

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 文件。可用File→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 编译器路径,应该根据实际安装情况来设置。

如果只使用汇编语言进行编程,那么他们可以不设置这项,直接使用默认设置。