1.1 问: 为什么我需要 ICD 转接头?
答:对于MPLAB ICD 2 支持的低引脚数器件,如果在线调试引脚被保留,将不能有效地使用这些器件。试想一下,对于8 个引脚的器件, 6 个I/O 引脚失去其中3 个的情形。为此,生产了特殊的外合(bond-out) PICmicro 单片机,这种单片机能通过一个转接头来仿真这些低引脚数器件,这使得能在目标应用中使用所有引脚。外合(bond-out) PICmicro 单片机具有在线通讯引脚与MPLAB ICD 2 接口。这样做的优点是可以用MPLAB ICD 2 开发低引脚数器件。缺点是,对于这些器件,为进行在线调试,不能只在目标应用中采用一个ICD 2 连接插座,还要使用外合(bond-out) PICmicro 单片机。这些外合(bond-out) PICmicro 单片机类似于仿真器芯片,能支持多种器件。在ICD 转接头电路板上有跳线来配置芯片,以与开发使用的器件相匹配。这些低引脚数器件可通过通用编程适配器,或者在目标应用上放置一个ICD 2 连接插座来连接这些器件的VPP、PGC 和PGD,来采用MPLAB ICD 2 编程。
1.2 问: 无法连接到MPLAB ICD 2 。我现在该怎么做?
答:MPLAB ICD 2 的电源灯亮了吗?这个LED 应该是明亮的。如果它比较暗,可能只连接了USB,用户可能需要连接一个电源。PC 的RS-232 口不能为MPLAB ICD 2 提供电源,不过USB 口可以。注意有些USB 集线器不能提供电源。请针对当前的故障线索,查看在线帮助。USB 驱动安装正确吗?在Windows 设备管理器对话框(如图6-1 所示)中应该可以看到MPLAB ICD 2 的USB 驱动。一些USB 集线器不能给连接的USB 设备提供电源。使用这些集线器时,需要在MPLAB ICD 2 上接一个电源。
1.3 问: ICD 2 响应“Target not in debug mode error. ”这是什么意思?
答:通常这说明MPLAB ICD 2 不能和调试执行程序通讯。只能通过选择Debugger>Program 菜单,对用户应用中的目标PICmicro单片机编程,来下载调试执行程序。也可能是其它原因使得调试执行程序不能通讯,如目标时钟或电源问题。查看配置位,确保“Background Debug”使能。查看Config>Configuration Bits…,确保看门狗被禁止,代码保护被关闭,并且振荡器设置正确。
1.4 问: MPLAB ICD 2 能和一个低电压运行的目标器件一起工作吗?
答:是的。只要目标PICmicro 单片机支持低电压运行,它就能在VDD 低至约2V 的情况下运行。在MPLAB ICD 2 的输入/ 输出缓冲器中有电平转换器。这些输入/ 输出缓冲器通过目标器件的VDD 供电。另外, MPLAB ICD 2 会检测目标器件的工作电压,并正确地调整其功能来处理低电压操作,即使用正确的FLASH 擦除算法。在MPLAB ICD 2 的“Settings”对话框中, VDD 需选择为“From Target”,并且在目标板上要有一个电源用于低电压运行。
1.5 问: MPLAB ICD 2 支持低电压编程(LVP )吗?
答:不支持。但这并不表示当目标器件运行在低电压VDD 时,MPLAB ICD 2 不能正常工作。只是表示施加到VPP 上的编程电压应总是+12V。
1.6 问: 为什么我在配置锁相环(PLL )振荡器时有问题?MPLAB ICD 2 被挂起
答:这是PICmicro 单片机所要求的。在对PLL 振荡器的配置位编程后,电源需要断开然后再加到目标板上。如果没有这样做,目标PICmicro 单片机将没有时钟。没有时钟,调试模式将不能工作。同样,如果在切换到PLL 模式时,电源没有被断开再连接,器件可能会运行,但没有使用PLL。
1.7 问: 当我尝试安装时,为什么找不到驱动,即使当我能在驱动文件夹中看到它们,并且我在驱动向导中指向了正确的文件夹也不行?
答:这个问题可以这样解决:退出驱动安装向导,再到控制面板选择“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…”按钮时,进入驱动文件夹,并选择正确的驱动。
1.8 问: 我能使用MPLAB ICD 2 实现代码保护吗?
答:不能。代码保护,特别是程序存储器中任何区域的表读保护会妨碍MPLAB ICD 2 正常工作。当使用MPLAB ICD 2 调试时,不要使用任何代码保护或表读保护的配置设置。当烧写器件进行测试时,如果没有连接MPLAB ICD 2,可以使能代码保护。
1.9 问: 单步执行时,定时器为什么运行不正常?
答:这是使用在线调试器的缺点之一。由于代码实际上是在调试执行程序中运行,在调试执行程序运行期间,即使用户的应用程序被中止,定时器也会继续运行。
1.10 问:在使用PIC12F629/675 或PIC16F630/676 时,为什么会有警告和错误?
答:在使用MPLAB ICD 2 过程中,这些器件的GP1/RA1 引脚不能被拉高。参见MPLAB ICD 2 Header (DS51292)文档,获得更多关于对这些器件使用ICD 2 的信息。
1.11 问: 什么使电源和忙信号LED 闪烁?
答:这可能表示目标板上MPLAB ICD 2 连接插座的接线顺序反了(与接线图相反)。灯闪烁表示由于有大电流, MPLAB ICD 2 正在关闭。下面的测试表明目标板上接线顺序反了:
• 查找闪烁的Power 和Busy 信号LED (电源可能都关断了)。
• 执行一次“Self Test”,查找“MCLR=VPP”上的小错误
(所有其它测试可能都会通过)。
• 使用目标单片机的默认地址范围,执行一次编程。引脚1(VPP)上7-8V 的电平太低了。
注意,如果目标板接线顺序相反, MPLAB ICD 2 中的保护电路会防止对模块造成破坏。当目标板正确连线时,可以看到其正常运作。
1.12 问:MPLAB ICD 2 中的“Self Test ”起什么作用?
答:“Self Test”按钮有助于确定MPLAB ICD 2 模块或目标板连接的问题。目标VDD如果选择了“Power from ICD2”,则测试由MPLAB ICD 2 提供的VDD 〔仅5 V〕。如果选择了“Power from target”,则测试由目标板提供的VDD 〔2 至6V〕。Pass/Fail 码:错误表示在Advanced 对话框中“Power”设置不正确,或者目标板的VDD 高于/ 低于规定值。模块VPP测试在编程过程中由MPLAB ICD 2 提供给目标板VPP/MCLR 引脚的编程电压(VPP)。Pass/Fail 码:出现错误表明目标板VPP/MCLR 引脚接线不正确。MCLR=Gnd测试MPLAB ICD 2 为复位目标单片机,提供地电平给目标VPP/MCLR 引脚的能力。Pass/Fail 码:出现错误表明VPP/MCLR 引脚接线不正确。
00 = Pass VDD 在指定的范围内
01 = Min error VDD 低于指定的范围
80 = Max error VDD 高于指定的范围
00 = Pass VPP 在指定的范围内
01 = Min error VPP 低于指定的范围
80 = Max error VPP 高于指定的范围
00 = Pass 地电平可以提供给目标VPP/MCLR 引脚
80 = Max error 地电平对于目标VPP/MCLR 引脚太高
MCLR=VDD
测试正常工作〔如‘Run’〕期间, MPLAB ICD 2 提供VDD 给目标VPP/MCLR 引脚的能力。
Pass/Fail 码:
出现错误表明在Advanced 对话框中“Power”设置不正确,或者目标的VDD 高于/ 低于规定值。
MCLR=VPP
测试在编程过程中MPLAB ICD 2 提供VPP 给目标VPP/MCLR 引脚的能力。
Pass/Fail 码:
出现错误表明VPP/MCLR 引脚接线不正确。
1.13 问: 通过RETFIE 指令来使用高优先级中断时,为什么 W 、 STATUS 和BSR 寄存器的值会改变?
答:用于高优先级中断和CALL FAST 的影子寄存器被MPLABICD 2 使用了。这些是保留给MPLAB ICD 2 操作的资源。如果断点设置在CALL FAST 子程序内,或者在通过 RETURN FAST 或RETFIE 指令使用了影子寄存器的高优先级中断服务程序内,将会出现问题。
00 = Pass VDD 可提供给目标VPP/MCLR 引脚
01 = Min error VDD 对于目标VPP/MCLR 引脚太低
80 = Max error VDD 对于目标VPP/MCLR 引脚太高
00 = Pass VPP 可提供给目标VPP/MCLR 引脚
01 = Min error VPP 对于目标VPP/MCLR 引脚太低
80 = Max error VPP 对于目标VPP/MCLR 引脚太高
1.14 问: 当我在程序的起始位置设置一个断点时,为什么它停止在地址0001 ,而不是地址0000 ?
答:MPLAB ICD 2 在断点后的指令上暂停。这意味着设置了断点的地址0000 处的指令会被执行,接着当它发现断点时,程序计数器会指向地址0001。如果用户需要在其代码的第一条指令处暂停,他们必须在地址0000 处插入一条NOP 指令。
1.15 问: 为什么我的校准存储器显示已擦除的值?
答:MPLAB IDE 正在显示默认的存储器值。要显示器件上的实际值,必须使用MPLAB ICD 2 进行一次器件读操作。
1.16 问: 单步执行代码时,我的定时器超时了,但为什么我的定时器中断服务程序没有执行?
答:单步执行时,在线调试器不允许PICmicro 单片机响应中断。如果允许的话,当用户有外部中断时,那么单步执行将几乎总是在中断服务程序中结束。要调试中断,应在中断服务程序中设置断点并运行,这样在产生中断后执行到断点。
1.17 问:MCHP的工具串口属性都要做调整
答:右击我的电脑——属性——硬件——设备管理器——端口(COM)——COM1(如果用其他COM,则选择相应的COMx)——属性——端口设置,好现在开始两个步骤的设置。
1,流控制方式——选择硬件
2,点击“高级”按纽——FIFOxxxxx….前面那个钩去掉。
不管用PLUS,还是ICD2用串口调试/烧写时,都要做以上动作。设置完,可以考虑重新启动电脑,因为有的电脑需要重新启动后对串口的修改才能生效,有的是不需要。拨特率,细心的客户可能会发现MCHP做的东西要嘛是19200,要嘛是57600,但电脑默认是9600,那么电脑的COM属性要做匹配调整吗,答案是——不需要。
1.18:问:经常有人用MCHP的ICD2,PLUS烧写,然后校验的时候提示错误0161
答:这就表示烧写没烧成功,很多时候这是串口属性没设置引起的,修改后就OK了。还有的可能比如工具底层固件突然崩溃。PLUS的底层尤其脆弱。解决也很简单——重新DOWNLOAD一下底层固件,也就是工具的OPERATING SYSTEM。另外,如果由于电源比较异常,也可能引起0161的问题。
1.19:问:MCHP的PLUS烧16C57
答:MCHP的PLUS烧16C57,记得把芯片的26脚与烧写座脱离接触。可以翘起来,烧完翘回去,当然,还可以在加一个28PIN座,把座子的26脚废了,那芯片与PLUS的烧写座26脚就实际上脱离了接触。还有的人,打开了PLUS,断开了26脚,搞了个跳线,平时连通,需要烧57的时候把跳线拔掉,本质上也是做到脱离接触。
1.20:问:经常有这样的事情发生,仿真OK,烧写失败
其中一点,烧写方法有误导致的烧写失败。烧PIC的片子,除非你用的是MCHP设计的工具,比如ICD2,ICE2000/4000,用任何的第三方设计的仿真工具,请执行按以下动作烧写,以保证烧写OK。 1,在仿真器下调试通过的源代码,拿到MCHP的编译器MPLAB IDE下(现在最高版本V7.31),再次编译。这时候可能需要建立必要的项目,而且必须对芯片类型,CONFIG BITS,进行相应的设置。 2,此时生产的HEX文件才是必然包含config 信息的HEX文件,是值得信赖的烧写文件。可以从FILE——EXPORT——导出HEX文件,提交烧写的专人。 3,用FILE——IMPORT导入HEX文件,检查检查芯片设置和CONFIG,然后烧写。
我们公司的2004,2002软件环境下生成的HEX文件是不包含config信息,一个同事用过wave的某款仿真器,也发现可能有类似的问题,最后拿到MPLAB IDE下一编译再烧写,天下太平。
由于我们公司仅代理制造PLUS,ICD2,PIKIT2,遇到其他MCHP的烧写工具问题,请咨询相关的代理商或MCHP的FAE。
1.21:问:PIC MCU 中有A結尾和沒A結尾的兩中型號有什區別?
答:带A的便宜。不带A的行将停产,又贵。877到877A,内部资源增加,工艺改变。627到627A,内部资源不动,工艺改变。