常见的调试错误.docx
《常见的调试错误.docx》由会员分享,可在线阅读,更多相关《常见的调试错误.docx(6页珍藏版)》请在冰豆网上搜索。
常见的调试错误
MPLABICD2调试问题的处理
1、ICD2调试时出现“ICD0083:
Debug:
Unabletoenterdebugmode.Pleasedoubleclickthismessageformoreinformation.”
答:
通常这说明ICD2不能和调试执行程序通讯,这有可能是目标时钟或电源问题使得ICD2不能和调试执行程序通讯,保证晶振的管脚和OSCKI/OSCKO充分接近,4MHz以上晶振推荐使用HS模式,如果是外部32K低频晶振,重新“connect”一下可执行调试指令,也有可能内部或外部晶振使能了PLL功能而进不了Debug模式的,关掉PLL即可;再还有可能是配置位设置不当引起的,查看Config>ConfigurationBits,确保看门狗被禁止,代码保护、掉电检测等被关闭。
也有可能是复位引脚接了电容或二极管之类引起的。
2、连接ICD2时显示“ICD0021:
UnabletoconnectwithMPLABICD2”
答:
请检查一下ICD2与电脑连接的通讯口是否设置正确(USBorCOM)。
3、连接ICD2时显示“ICD0286:
UnabletocommunicatewithICD。
ICD0082:
FailedMPLABICD2operation”
答:
这可能是操作系统有误,此时手动下载操作系统即可。
4、连接ICD2时显示“ICD0019:
Communications:
Failedtoopenport:
(Windows:
:
GetLastError()=0x2,'系统找不到指定的文件。
')ICD0021:
UnabletoconnectwithMCU.”
答:
通常是ICD2驱动找不到,需重装。
也可能是由于PC的USB口供电不足导致驱动无法正确加载。
5、ICD2自检不通过提示“...FailedSelfTest.SeeICD2Settings(statustab)fordetails”
答:
ICD2自检主要是对TargetVdd、TargetVpp、MCLRGND、MCLRVdd、MCLRVpp五个管脚电压进行检测,任何的一项不正常都会通不过。
出错具体情况可在ICD2的status栏进行查看,找出出错的项,再检查该项的相关硬件连接。
若是PIC18J、PIC24、dsPIC30、dsPIC33系列的器件,是无法从ICD2供电给它们的,要求目标板外接电源,且要注意它们的电压范围。
注:
可能有些芯片会提示VppHigh从而导致自检通不过,这是ICD2的固件中检测Vpp电压时所设的上限阈值偏小所致,通常可忽略,ICD2还是能正常编程和调试的。
6、ICD2自检通过,但提示没找到目标ID,读到的ID是‘0’,显示“ICDWarn0020:
Invalidtargetdeviceid(expected=0x89,read=0)”
答:
此时首要任务是检查硬件连接,PGC/PGD有无接错,或PGD/PGC上有容性负载或感性负载。
若是PIC18J器件,请确认vddcore是使能且该脚接了0.1-10uF的低ESR电容。
注:
ICD2到目标板的连接线如果是一端水晶头,一端插针的,要注意蓝色才是第一根,白色一般是不用的。
7、ICD2自检通过,但提示没找到目标ID,读到的ID不是‘0’,但和期望的不符合,显示“ICDWarn0020:
Invalidtargetdeviceid(expected=0x89,read=0x71)”
答:
首先检查芯片型号选择是否正确;如果是Debug模式下出现该提示,要先确认所选的MCU是否需要header才可通过ICD2调试。
如果用了header出现该提示,那么检查header上用来设置ADC的enable/disable的跳线,这个跳线也会影响目标device的ID。
8、ICD2编程时提示编程成功但校验失败
答:
首先检查PGC/PGD有无外电路干扰,再看看Vdd有没有达到4.5V以上(PIC18J/PIC24/dsPIC33F系列除外),ICD2对芯片编程时首先要全擦,对大部分PIC来说执行“BulkErase”时Vdd最小电压是4.5V。
这就要求即使是LF版的PIC在用ICD2编程时Vdd至少是4.5V,当然编完程后还是可以在低电压下(3V)使用ICD2调试的。
如果芯片有AVdd和AVss脚,请在ICSP编程时分别接到Vdd和Vss,否则也会出现这样的错误。
其次,也有可能是由于从ICD2向目标板供电,使烧写电流不足导致的,此时建议从目标板供电。
9、用ICD2调试或烧写PIC16F630/676,PIC12F629/675等带内部RC的器件,连接ICD2时警告“ICDwarn0044:
Targethasaninvalidcalibrationmemoryvalue(Value).Continue?
”
答:
这是这些器件的程序存储器最后一个单元上的内部RC校准值(retlwxx)被修改了,可用PICkit1重新生成一个值;也可在MPLABIDE的Programmer--settings--calibrationmemory选项卡里把AllowICD2toprogramcalibrationmemory前的勾打上再填一个新的值,烧写后再次连接就没问题了。
10、为什么在配置锁相环(PLL)振荡器时有问题,ICD2被挂起?
答:
这是PICmicro单片机所要求的。
在对PLL振荡器的配置位编程后,电源需要断开然后再加到目标板上。
如果没有这样做,目标PICmicro单片机将没有时钟。
没有时钟,调试模式将不能工作。
同样,如果在切换到PLL模式时,电源没有被断开再连接,器件可能会运行,但没有使用PLL。
11、在调试PIC12F629/675/PIC16F627A/628A/PIC16F630/676/PIC16F648A时,为什么会有Invalidtargetdeviceid警告?
答:
在使用MPLABICD2和ICD2仿真头调试这些器件过程中,这些器件的GP1/RA1引脚不能被拉高,否则会警告Invalidtargetdeviceid。
参见MPLABICD2Header文档。
12、单步执行时,定时器为什么运行不正常?
答:
这是使用在线调试器的缺点之一。
由于代码实际上是在调试执行程序中运行,在调试执行程序运行期间,即使用户的应用程序被中止,定时器也会继续运行。
13、通过RETFIE指令来使用高优先级中断时,为什么W、STATUS和BSR寄存器的值会改变?
答:
用于高优先级中断和CALLFAST的影子寄存器被MPLABICD2使用了。
这些是保留给MPLABICD2操作的资源。
如果断点设置在CALLFAST子程序内,或者在通过RETURNFAST或RETFIE指令使用了影子寄存器的高优先级中断服务程序内,将会出现问题。
14、dsPIC使用ICD2在线调试的接口选择
答:
在某些情况下,dsPIC默认的编程和调试引脚功能PGC/EMUC和PGD/EMUD,可能与其他外设(如I2CTM、SPI或UART模块等)引脚复用。
在这种情况下,应用能将这些引脚用于编程,但不能用于在线调试。
此时在线调试应该使用备用调试通道,EMUC/EMUD1、EMUC2/EMUD2或EMUC3/EMUD3,具体的电路设计请参考152816.pdf文档。
15、当在程序的起始位置设置一个断点时,为什么它停止在位置0001,而不是位置0000?
答:
MPLABICD2在断点后的指令上暂停。
这意味着设置了断点的位置0000处的指令会被执行,接着当它发现断点时,程序计数器会指向位置0001。
如果用户需要在其代码的第一条指令处暂停,他们必须在位置0000处插入一条NOP指令。
16、调试时出现ICDWarn0015:
Programmemoryhaschangedsincelastprogramoperation?
答:
程序修改之后没有再重新编译、烧写到芯片里。
17、连接时出现ICD0152:
Failedtoreadallofrequestedbytes(0x0of0x8)
答:
首先,ICD2是用USB还是串口跟电脑连接的?
如果是串口连接的,改一下串口属性,具体步骤如下:
右击我的电脑--属性--硬件--设备管理器--端口(COM)--COM1(如果用其他COM,则选择相应的COMx)--属性--端口设置,在这里要做两个设置:
1,流控制方式--选择硬件
2,点击“高级”按纽--使用FIFO缓冲区。
。
。
前面那个钩去掉。
设置完后可能还需要重启电脑。
其次,升级一下IDE版本。
18、安装USB接口时,选择的是从指定位置安装,第一次提供的是ICD2W2K1.INF,安装完后又重复让安装,提供的是ICD2W2KL.INF,这是怎么回事?
答:
这是正常的,它需要安装两次。
19、为什么软件上无法选择由ICD2向目标板供电?
答:
对于PIC18FXXJXX、PIC24、dsPIC30F、dsPIC33F系列的器件,MCHP为了保护开发工具,禁止了该项操作,调试或烧写的时候目标器件需要独立供电。
20、在内存中看见70h为RR,在watch窗口中显示“reservedmemory”,且不能手动修改,这是为什么?
答:
这个位置的寄存器可能被ICD2占用了,ICD2在线调试的时候会占用芯片的部分资源,具体的可以参考下面文档:
Microchip\MPLABIDE\ICD2\hlpMPLABICD2.chm\Operation\MPLABICD2Overview\ResourcesUsedByMPLABICD2
21、为什么ICD2在调试的时候中断不正常?
答:
这是因为ICD2在调试的时候占用了一些内部资源,导致不能调试芯片的定时器中断和PIC18系列器件的高优先级中断
22、在用PIC12F629/675/16F630/676/627A/628A/648A仿真头时,需要注意哪些地方?
答:
必须使用内部振荡或外部有源振荡;MCLR脚必须高电平;当GP1/RA1为高电平时将无法进行调试;不能在对GPIO操作的指令上设置断点。
23、ICD2USB驱动程序在哪里?
答:
在MPLABIDE的安装目录下:
ProgramFiles\Microchip\MPLABIDE\ICD2\Drivers\icdw2k.inf(icd2w2kl.inf)
24、ICD2调试的时候ERROR灯突然亮,但调试其它MCU又正常
答:
这可能是ICD2占用了芯片内部资源,程序到一定规模如果发生RAM或ROM资源冲突,就会飞掉,ERROR灯就亮。
25、有些芯片使用时用到了内部晶振和内部复位,如PIC16F630/690等,用ICD2编程时一旦使能内部晶振和内部复位会有警告信息:
ICDWarn0033:
YouhaveselectedInternalMCLRandInternalOscillatorinyourconfigurationsettings.IfyourcodemakesuseofportpinsthatcorrespondtoClockandDatapinsinprogrammingmode,youmaynotbeabletoreprogramyourdevice.Seeon-linehelpforthiswarningformoreinformation.(OK/Cancel)
答:
忽略该信息,初次ICD2可以成功编程该芯片。
但如果芯片中已有配置字是内部晶振和内部复位的程序,且程序中有对ICSPCLK和ICSPDAT管脚的操作,再次编程就会有校验失败的错误提示。
这是因为当使用内部晶振和内部复位时,ICD2一旦和目标板相连,目标芯片即已工作,ICD2对ICSPCLK和ICSPDAT的控制被目标芯片对这两脚的操作打乱,故而进不了编程模式。
这时该考虑其他编程工具,或者在程序开头加2ms以上延时,保证芯片在真正执行程序前进入编程模式
[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!
]