ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PICkit4烧录PIC16F15355开发板接线与排查实战指南

PICkit4烧录PIC16F15355开发板接线与排查实战指南 上周有个同事拿着刚焊好的PIC16F15355最小系统板来找我说芯片换了好几片程序就是烧不进去。我拿万用表量了两分钟发现问题不在芯片也不在代码而是PICkit4跟目标板之间的接线完全接反了。这情况在Microchip的入门圈里并不少见。PIC16F15355是Microchip近几年主推的增强型中档8位单片机片上外设齐全价格也不高很多传感器板、电机驱动板上都爱用这颗料。但不少从Arduino、STM32转过来的朋友第一次接触PIC平台就被“烧录”这一步劝退。这篇就围绕PICkit4给PIC16F15355开发板烧录程序这件事把接线图、软件配置、实际操作和常见坑全部过一遍。适合刚拿到开发板的小白也适合准备自己画板子的硬件工程师参考。1. 项目概述PIC16F15355加PICkit4烧录前必须搞清楚的三件事1.1 芯片选型PIC16F15355的主要参数和定位PIC16F15355属于Microchip的PIC16F153xx系列采用增强型中档内核指令集比早期PIC16F系更高效大部分单周期指令适合做中等复杂度的控制类项目。这颗芯片常见封装是20引脚带有一路10位ADC、两路PWM、一个EUSART、SPI/I2C通信模块还有可配置逻辑单元和数控振荡器这类比较灵活的模块Flash、RAM的容量在同类8位机里属于够用的水平具体数值以你手头这颗芯片丝印和官方数据手册为准。选这颗料做开发板主要看重三点一是价格不高做样品和小批量试产压力小二是外围电路简单供电范围宽甚至可以只用内部振荡器不挂外部晶振就能跑三是MPLAB X IDE和XC8编译器对这颗芯片支持得很完整不像某些老型号需要在工程设置里反复折腾。对新手来说PIC16F15355的寄存器命名规律、库函数风格都比较统一踩坑之后积累的经验还能迁移到同系列其他型号上。不过要提醒一句PIC16F15355虽然叫“增强型中档”但它还是8位机处理复杂算法、浮点运算、跑RTOS这些事不要指望它。它的定位就是低成本、低功耗、稳定可靠地做信号采集和逻辑控制烧录时用PICkit4也只是把程序写进Flash别期待调试体验能跟桌面级IDE一样流畅。1.2 编程工具为什么优先选PICkit4而不是PICkit3Microchip官方的调试烧录工具从PICkit3到PICkit4升级了不少东西。PICkit4的USB通信速度更快对目标芯片的电压支持范围更宽官方标称可以支持最低1.2V的目标电压这个对低功耗项目很重要。PICkit4还内置了过流保护目标板电源短路时不容易把工具烧坏我身边就有朋友的PICkit3因为接到错误供电上直接冒烟的案例。很多入门者会纠结要不要省几十块钱买PICkit3或者杂牌编程器。我的建议是如果你手头已经有PICkit3能用就用如果还没买直接上PICkit4别省这个钱。PICkit4在MPLAB X IDE里的识别速度、烧录稳定性和后续固件更新支持都更好而且很多新出的芯片在PICkit3上需要手动升级维护包PICkit4基本插上就能认。还有一个隐藏优势是PICkit4不只支持PIC系列也支持Microchip旗下的AVR系列和部分其他MCU以后你换平台这个工具还能继续用。作为开发阶段的调试器PICkit4的性价比很高。当然如果只是纯粹量产烧录有更快的专用编程器这个后面章节再展开。1.3 烧录原理ICSP五根线的分工与信号时序PIC系列单片机最常用的在线烧录方式叫ICSPIn-Circuit Serial Programming也就是不需要把芯片拆下来只要在目标板上留一个编程接口就能直接对板载芯片烧写程序。PICkit4和开发板之间本质上只用了五根信号线VPP也就是MCLR、VDD、GND、PGD、PGC。有些场景还会用到PGM但多数开发板都直接用高压编程模式不依赖PGM。这几根线的分工很清楚VDD和GND给目标芯片供电同时给编程器一个电压参考MCLR/VPP这根线用来切换芯片的运行状态编程器会把它拉高到特定电压让芯片进入编程模式PGC是编程时钟线编程器按这个时钟节奏发送指令PGD是编程数据线指令和数据都从这根线上一位一位地传。可以把它理解成给芯片“上课”PGC是老师打拍子的节拍器PGD是学生写字的作业本MCLR是上课铃。理解了这个原理后面的接线就不会靠死记硬背。只要保证供电稳定、时钟数据不接反、MCLR没有被意外拉低烧录大概率能成功。很多“找不到设备”的问题本质上都是这五根线里有一根断了或者接错了。2. 一步一步接线PICkit4接PIC16F15355开发板完整接线图2.1 硬件物料清单开始操作前先把东西备齐。不要觉得这些细节无所谓我见过有人用劣质杜邦线烧了一上午都连连不上最后换了一组短线就好了。清单如下PICkit4编程器一个最好是正品或者可靠渠道的版本驱动和固件更新都会省心很多。PIC16F15355开发板或自制的PIC16F15355最小系统板一块。USB线一根注意PICkit4的USB接口通常是Micro-USB或Type-C看具体版本线要同时支持数据传输不能是纯充电线。杜邦线若干建议用母对母的短杜邦线长度控制在10cm以内线太长容易引入干扰。万用表一个用来确认开发板的供电电压和引脚通断。安装了MPLAB X IDE的电脑一台系统不限Windows、Linux、macOS都行但驱动安装步骤略有差异。PIC16F15355开发板如果是从淘宝买的现成板子多半已经引出ICSP接口甚至直接做了PICkit4兼容的排针你只需要核对接口顺序。如果是自己用洞洞板搭的最小系统板那就要仔细对照芯片引脚图和PICkit4接口定义来飞线。2.2 PICkit4接口引脚定义对照表PICkit4为开发板提供的接口通常是一个8针排针最常见的引脚定义如下注意不同版本可能存在细微差异动手前先看一眼PICkit4外壳上的丝印或者去Microchip官网下载对应版本的用户指南核对。引脚号信号名作用说明1MCLR/VPP编程电压控制信号也是芯片复位脚2VDD目标板电源正极PICkit4可对外供电3GND公共地4PGD编程数据线接芯片ICSPDAT5PGC编程时钟线接芯片ICSPCLK6PGM低压编程模式选择线可留空7NC未连接8NC未连接很多开发板上印的ICSP接口顺序是另外一套标准例如第1脚是MCLR、第2脚是VDD、第3脚是GND、第4脚是PGD、第5脚是PGC这个跟PICkit4的直插排针顺序正好一一对应。但有些板子为了排版方便把PGD和PGC放在旁边还有的把GND放在第6脚这时候就千万不能直接拿排线一插了事。对于PIC16F15355这颗芯片ICSPDAT就是PGDICSPCLK就是PGC具体对应芯片的哪个物理引脚不同封装也有差异。20脚封装的PIC16F15355通常PGD在RB6/RB7附近实际要看封装图。开发板原理图会明确标注一定要以原理图为准。千万别想当然地认为所有芯片的ICSP引脚位置都一样。2.3 接线示意图与正反接判断技巧下面这张是我在给PIC16F15355开发板烧录时用的标准接线图用文字画出来方便你直接对照。PICkit4 8针排针 PIC16F15355开发板 ICSP口 ┌─────────┐ ┌──────────────┐ │ 1 MCLR ├────────────────────┤ 1 MCLR/VPP │ │ 2 VDD ├────────────────────┤ 2 VDD │ │ 3 GND ├────────────────────┤ 3 GND │ │ 4 PGD ├────────────────────┤ 4 PGD/ICSPDAT│ │ 5 PGC ├────────────────────┤ 5 PGC/ICSPCLK│ │ 6 PGM ├────────────────────┤ 6 PGM(如需) │ │ 7 NC │ │ 7 NC │ │ 8 NC │ │ 8 NC │ └─────────┘ └──────────────┘如果开发板没有标准的ICSP排针而是只有一组散落的焊盘那就直接把PICkit4的对应信号飞线到PIC16F15355的引脚上。唯一要确定的引脚是MCLR/VPP这个通常在28脚或20脚封装的某个固定脚位数据手册里会标注。接线时有个特别重要的判断技巧千万不要以为开发板上的ICSP口上标了VDD就一定是PICkit4该给板子供电。很多开发板上面有一个电源选择跳线可以选“USB供电”或“PICkit4供电”。如果你同时接上USB线给开发板供电又把PICkit4的VDD也接上去两个电源就会打架轻则电压不稳重则烧坏板子或编程器。所以接线之前先把开发板的供电来源搞清楚。正确的接法逻辑是PICkit4的VDD要么接目标板VDD并允许PICkit4供电要么就不要接只用GND和信号线目标板靠自己的电源工作。两种方式我用下来都能烧录成功但最稳妥的是让开发板自己供电PICkit4只负责编程信号这样两边电源互不干扰目标板上的LED和传感器也不会因为编程器供电能力不足而出现异常。3. 软件实操用MPLAB X IDE给PIC16F15355烧入第一个程序3.1 环境安装与新建工程芯片型号、工具链选择硬件接好之后剩下的就是软件。PIC16F15355的开发环境推荐使用Microchip官方的MPLAB X IDE配合XC8编译器。官网下载MPLAB X IDE和XC8安装的时候组件选默认就行。如果你是Linux环境安装完记得把USB设备权限配好不然PICkit4会提示无权限访问Windows和macOS一般插上就能识别。打开MPLAB X IDE在工具栏选择File - New Project。向导里选择Microchip Embedded - Standalone Project点Next。第一步就是选芯片型号在搜索框输入PIC16F15355选中后继续。下一步选择硬件工具在列表里找到PICkit4勾选它。再下一步选择编译器如果正确安装了XC8这里会列出XC8编译器选它。最后给工程起个名字保存路径不要带中文和空格完成。工程建好后先别急着写代码右键工程名选择Properties在Categories里找到Conf - PICkit4确认Programmer to Go等选项不需要启用再确认Power标签下是否要由PICkit4给目标板供电。这里要注意如果你在硬件接线上已经让开发板自己供电就把供电选项设为目标板外部供电如果开发板是裸板、没有独立电源可以让PICkit4提供3.3V或5V但电流有限别指望它给一堆传感器供电。3.2 编写LED闪烁测试代码我习惯用最经典的LED闪烁程序来验证烧录链路因为它能同时验证芯片时钟、GPIO、Flash写入和复位行为。下面这段代码适用于PIC16F15355LED接在RB0引脚另一端串一个220Ω或330Ω电阻到GND。实际板子上的LED引脚可能不同你看一眼原理图改掉端口号就行。#include xc.h // 配置位使用内部振荡器关闭看门狗使能MCLR #pragma config FEXTOSC OFF #pragma config RSTOSC HFINT1 #pragma config WDTE OFF #pragma config PWRTE OFF #pragma config MCLRE ON #define _XTAL_FREQ 4000000 void main(void) { // 设置RB0为输出方向 TRISBbits.TRISB0 0; // 初始输出低电平 LATBbits.LATB0 0; while (1) { LATBbits.LATB0 1; // LED亮 __delay_ms(500); LATBbits.LATB0 0; // LED灭 __delay_ms(500); } }这段代码里我通过配置位把系统时钟设置为内部高频振荡器频率大概在4MHz左右所以_XTAL_FREQ定义为4000000延时函数才能算准。如果你用的板子已经带了外部晶振也可以把时钟配置改成外部晶振具体配置位要看芯片数据手册的Configuration Bits章节。PIC16F15355输出端口有LATCH寄存器和PORT寄存器之分。写输出时用LATx读输入时用PORTx这是个非常重要的习惯。直接写PORT可能在读改写指令里碰到问题而用LAT就不会。很多老手都喜欢强调这一点因为这颗芯片的中档内核在读改写时序上比老PIC16F更严格。3.3 编译、烧录与结果验证代码写好后在MPLAB X IDE顶部工具栏点击Clean and Build Project按钮或者按ShiftF11。编译器会在输出窗口打印编译信息最后出现“BUILD SUCCESSFUL”就说明代码编译通过生成了hex文件。如果出现“BUILD FAILED”双击红色报错信息基本能跳到具体行把语法错误或配置位写错的地方改掉。编译通过后确认PICkit4已经连接开发板然后点击Make and Program Device按钮或者按F6。MPLAB X会先尝试连接PICkit4然后检测目标芯片。这个过程会在输出窗口打印类似“Connecting to PICkit4...”、“Found device: PIC16F15355”、“Programming...”的信息。烧录完成后会看到“Programming completed”和完成状态同时开发板上的LED应该开始闪烁。第一次烧录如果看到的是“Device not found”或“Target device not found”不要慌回到硬件接线部分用万用表量一下VDD、GND是否通畅PGD/PGC是否接反。大概有八成的“找不到芯片”都是硬件问题代码和IDE反而排在后头。3.4 烧录成功之后如何确认不是“假成功”很多人看到“Programming completed”就走了其实还可以再花十秒钟确认程序真的跑起来了。开发板LED闪烁是最直观的。另外可以在MPLAB X IDE里点击菜单Window - Target Memory View - Program Memory把烧进去的hex内容读出来看一眼确认Flash里不是空白或者重复烧写的老程序。还有一种确认方式是使用PICkit4的读校验功能。在Project Properties里找到PICkit4的Memories页勾选Verify之后的芯片内容每次烧录都会自动做一次读回校验。开启后烧录时间会长一点点但能保证数据确实写进去了。对做产品验证的工程师来说这个校验功能建议一直开着。我自己遇到过一种情况程序烧录显示成功但芯片没跑起来最后发现是配置位里把MCLR引脚设成了普通IO而且这根引脚被外部电路拉低芯片一直处于复位状态。所以“烧录成功”只代表Flash写入没问题不代表应用电路和配置位没问题验证时必须结合LED、串口这类可观察的外设来判断。4. 烧录失败别慌常见问题排查与避坑指南4.1 找不到目标设备时按顺序检查这些点“Target Device Not Found”是PICkit4烧录最常遇到的错误没有之一。遇到这个提示我建议按下面的顺序排查不要随机乱试。第一量一下PICkit4的VDD和GND之间是不是有目标芯片的电压。很多开发板的ICSP口本身没有引出VDD只是把信号线引出来了如果PICkit4检测不到目标电压它会直接拒绝继续工作。你用万用表直流档量PICkit4第2脚和第3脚正常应该量到3.3V或5V。量不到就检查VDD线是否断了或者开发板的电源开关有没有打开。第二检查PGD和PGC是否交叉。PICkit4的第4脚是数据第5脚是时钟但板子上标的数据和时钟有可能刚好相反。你不确定的时候把这两根线互换再试不会损坏设备很多“找不到芯片”就是这里接反。第三看MCLR/VPP这根线上有没有外接的大电容。有些开发板为了让复位更稳定会在MCLR脚上放一个1uF以上的电容。这个电容在编程时会把VPP电压拉低导致芯片无法进入编程模式。遇到这种情况要么把电容临时去掉要么在PICkit4与MCLR之间串一个几百欧到1kΩ的电阻再试。第四确认芯片供电电压在PICkit4支持范围内。PIC16F15355工作电压范围比较宽但如果你把板子供电调到了1.8VPICkit4某些版本可能认不出或者通信不稳定。建议先把电压调到3.3V或5V这一档烧录成功后再慢慢降电压调程序。4.2 供电冲突导致的烧录异常前面提到过PICkit4本身能对外供电但电流不大。如果你用的是带LED、模块、数码管的开发板这些负载全加起来可能超过200mAPICkit4就会因为电流不够而电压跌落烧录过程中会反复断开重连。更常见的情况是开发板既接了USB供电又把PICkit4的VDD接到了板上两个电源一起给板子供电压会互相顶。不同电源的稳压纹波不同可能会在PICkit4检测目标电压时产生误判报“Target Voltage out of range”之类的错误。解决思路很简单烧录时只保留一个供电来源。如果你用USB线给开发板供电PICkit4的VDD就不要接只接GND、MCLR、PGD、PGC四根线如果想让PICkit4给板子供电拔掉开发板的USB线和外部电源再让PICkit4的VDD接上。这是个二选一的操作别让它两边都连。4.3 烧录中途失败与校验错误处理如果烧录进行到一半突然报“Program failed”或者“Verify failed”通常不是芯片坏了而是通信环境不稳定。最常见的原因是杜邦线太长或接触不良。我用10cm以内的母对母杜邦线基本没出过问题一旦换成20cm以上的飞线失败率明显上升。解决方法是先把线剪短或者用杜邦线尽量把PICkit4的排针和开发板ICSP口靠近。另一个因素是目标板电源纹波太大。电源纹波大芯片的编程电压和信号电平都会抖动导致烧录时序错位。可以在开发板的VDD和GND之间加一颗100nF电容靠近ICSP口放置效果立竿见影。还有一种情况是芯片之前被设置过特殊配置位比如禁用了MCLR或者把ICSP引脚复用为普通IO导致PICkit4无法拉起编程模式。这时可以试一下在工程属性里勾选“Erase all memory before programming”先把整片Flash擦干净再重新烧录。如果连擦除都做不到就需要用高压编程模式强制恢复通常PICkit4会自动处理但前提是MCLR引脚没有被彻底断开。4.4 错误提示速查表把几个常见错误提示和对应处理方式整理成表格方便你定位问题。错误提示常见原因处理方法Target Device Not Found供电缺失或PGD/PGC接反量VDD电压互换PGD/PGC检查MCLR电路Target Voltage out of range供电冲突或目标电压过低只保留一个电源确认电压在1.2V-5V之间Program failed at address ...通信干扰或接线过长缩短杜邦线加100nF去耦电容降低烧录速度Verify failed芯片Flash异常或配置位锁死先擦除全部Flash再重新烧录Unable to find tool驱动未装或USB线不能传数据重装驱动换一根确定能传数据的USB线The target device is not supportedPICkit4固件过旧打开MPLAB X升级PICkit4固件后再试4.5 几条真实经验与避坑清单关于烧录PIC系列我踩过不少坑这里分享几条真实经验。第一条烧录前先接地。PICkit4的USB线插到电脑上再连接目标板最后再上电这个顺序能减少静电和热插拔对芯片的损伤。第二条不要把芯片长期放在编程电压下调试完及时拔掉PICkit4不然MCLR一直保持高电压对某些低功耗应用来说是个隐患。第三条开发板上MCLR脚不要空着。很多自制板子为了让上电稳定会在MCLR上接一个10kΩ电阻到VDD这个是好习惯。如果MCLR悬空芯片在强电磁环境下可能意外复位也会给烧录带来奇怪问题。第四条尽量少用“一键备份烧录器”这类软件工具实际上PIC官方生态里最可靠的就是MPLAB X IDE别的第三方工具通常跟不上芯片支持的速度。避坑清单还可以加一条K型热电偶实验、高电压电机驱动这类大功率板子烧录时必须断电不能图省事在电机或者加热器工作的时候插上编程器。信号线会受到强烈干扰也容易损坏芯片引脚。5. 烧录之外PICkit4的调试功能与自制板设计建议5.1 在线调试单步执行和观察变量PICkit4不只是烧录器它同时也是调试器。在实际开发中如果你写了一个串口收发程序结果完全没反应与其不断烧录加打印不如直接用调试器打断点。在MPLAB X IDE里编译后点击Debug - Debug Main ProjectIDE会再次编译并进入调试模式你会看到代码行号旁边出现断点标记。在调试模式下F5继续运行F8单步跳过F7单步进入。窗口里的Variables面板能实时看变量的值Locals面板看当前函数局部变量Watch可以自己添加想看的外部变量和寄存器。PIC16F15355内部的寄存器比如LATB、TRISB都可以直接添加监视。用过调试功能后你会觉得很多以前靠猜的问题其实单步走一遍就知道卡在哪。不过要注意调试模式需要占用芯片的调试资源部分引脚会被保留给调试器使用如果目标代码里正好用了这些引脚可能会出现奇怪现象。具体预留引脚型号不同查一下MPLAB X的调试帮助文档即可。5.2 为量产做准备脱机烧录与工装思路做样品阶段每个板子都用PICkit4连接电脑烧录没问题。但如果是几十块、几百块的小批量生产每次打开MPLAB X、点击烧录、等校验效率太低了。PICkit4其实支持“Programmer To Go”功能可以在没有电脑的情况下脱机烧录前提是先把烧录镜像存到PICkit4内部存储空间。用这个功能时先在工程属性里选择PICkit4工具然后点击“Programmer To Go”页面里的“Enable Programmer To Go”之类的选项IDE会把当前工程的hex文件下载到PICkit4。之后把PICkit4从电脑拔下来接到目标板上按下PICkit4上的按钮就能自动烧录。这样在产线上可以快速给一块块板子烧程序不用来回折腾电脑。不过“Programmer To Go”只适合镜像固定的场景而且每次改代码都要重新接电脑更新镜像。如果你的产品要支持不同固件版本、多板卡自动识别建议还是用Microchip的专用量产编程器或者自己做一套烧录工装用PICkit4配合继电器控制目标板供电也能省下不少时间。5.3 自制扩展板时ICSP接口电路怎么布局最后聊聊自己画板子时ICSP接口怎么设计才不容易出问题。首先是接口形态建议直接用4针或6针排针预留出MCLR、VDD、GND、PGD、PGC这五个信号PGM可用可不用。在PCB上把这几个引脚连到PIC16F15355的对应引脚时尽量不要让走线绕太远特别是PGD和PGC它们是编程高频信号走线太长会引入寄生电容。MCLR/VPP脚的做法是从芯片MCLR到ICSP接口第1脚之间接一个10kΩ上拉电阻到VDD同时并联一个100nF到470nF的电容到地但电容不能太大太大烧录时会拉低编程高电平。如果你实在不想要复位电容可以留着焊盘位不贴元件遇到烧录问题再补上。VDD和GND在ICSP接口旁边放一个100nF去耦电容非常有必要。如果板子上的数字IC、继电器瞬间电流比较大建议再放一个10uF电解电容或钽电容给烧录和调试提供一个稳定的电源。还有如果板子上有很多LED烧录时最好能把LED供电断开或者把LED的限流电阻做大一点避免编程器供电不足。最后再说一个实际经验自制板时在ICSP接口的第1脚旁边标注好“MCLR”第4脚边上标注“PGD”第5脚标“PGC”中文和英文都行但一定要有。很多人拿到板子第一件事就是对着丝印接线你多花十秒钟标清楚会给自己省下几十分钟排查时间。这一点说大不大但在你烧录了十块板子之后会深有体会。我刚接触PIC平台那会儿也经历过连续两天烧不进程序、最后发现只是杜邦线接触不良的崩溃时刻。后来养成一个习惯每次接线先用手轻轻扯一扯每一根杜邦线确认插到底了再插USB。就这个习惯让我的烧录成功率接近百分之百。如果你现在正好卡在“烧录失败”上不妨先放下电脑把线重新整理一遍很多时候问题就是这么简单。
返回列表