自制K150 PIC烧写器:从ICSP协议到硬件调试全解析
1. 项目概述:为什么选择自制K150烧写器?
如果你玩过Microchip(现在叫Microchip Technology,但老玩家还是习惯叫PIC)的8位单片机,尤其是那些经典的PIC16F、PIC18F系列,那么“K150”这个名字你一定不陌生。它是一款非常经典、廉价的USB转串口PIC编程器,以其极低的成本、广泛的芯片支持列表和简单的电路结构,在电子爱好者、学生甚至小批量生产的工程师群体中流行了十几年。市面上你能买到的几十块钱的PIC烧写器,十有八九就是K150或其变种。
但直接买一个成品,和自己从头到尾做出来,体验是完全不同的。自己做K150,远不止是“省钱”那么简单。首先,你能彻底吃透PIC单片机编程的底层通信协议——ICSP(In-Circuit Serial Programming),明白电脑上的软件是如何通过USB虚拟串口,再经过几个简单的三极管和电阻,把那一串串0和1“灌”进芯片里的。其次,面对一个长达上百款芯片的支持列表,你会去研究它们的编程算法差异,理解VPP(编程电压)、VDD(供电电压)时序的重要性,这比单纯点击“烧录”按钮学到的多得多。最后,当你的自制烧写器成功点亮第一颗芯片时,那种成就感和对硬件底层的掌控感,是无可替代的。
这个项目非常适合有一定焊接基础、想深入理解单片机编程原理的嵌入式爱好者。它不需要复杂的FPGA或高速MCU,核心就是一片廉价的USB转串口芯片(如CH340G、PL2303)加上一些分立元件,电路图清晰,软件成熟。通过完成它,你不仅能得到一个实用的工具,更能打通从PC端软件到芯片内部Flash的整个数据链路,为日后调试更复杂的嵌入式系统打下坚实基础。
2. 核心硬件设计与元件选型解析
自制K150的核心,在于理解其“桥梁”作用:它将PC的USB接口转换为TTL串口信号,再通过硬件电路将串口信号转换为符合PIC ICSP协议特定时序的编程信号。整个硬件设计可以分为三个部分:USB转串口模块、电平转换与驱动电路、目标板接口与供电管理。
2.1 USB转串口芯片:CH340G vs PL2303
这是整个烧写器的“大脑”。早期K150多采用PL2303HX,但现在CH340G因其更低的成本、更好的兼容性和更稳定的驱动(尤其是在Windows 10/11系统上)而成为更主流的选择。
- CH340G:我强烈推荐使用这个型号。它是南京沁恒的产品,驱动安装简单,市面上模块价格极低(通常两三块钱)。它提供标准的TTL电平串口(TXD, RXD, DTR, RTS等引脚),完全满足我们的需求。需要注意的是,CH340G有3.3V和5V供电的版本,我们选择5V版本,以便直接为后续电路和部分目标芯片供电。
- PL2303:老牌芯片,但近年来假货、翻新货较多,且其官方驱动对新版Windows系统的支持有时会出问题(如著名的“代码10”错误)。除非手头已有,否则不建议新项目选用。
注意:无论选用哪种,务必确保从可靠渠道购买芯片或模块。劣质芯片可能导致通信不稳定、无法识别或烧录失败。
2.2 电平转换与驱动电路:用三极管搭建关键时序
这是K150设计的精髓所在,也是理解ICSP协议的关键。PIC的ICSP主要需要三根信号线:PGC(时钟)、PGD(数据)、MCLR/VPP(主复位/编程电压)。其中,MCLR/VPP线最为关键,它需要在编程期间被拉高至一个特定的电压(通常为13V左右的VPP),以实现对Flash存储器的擦写。
K150的巧妙之处在于,它并没有使用专门的电压泵芯片来产生13V的VPP,而是利用了目标芯片(MCU)自身的特性。对于大部分支持ICSP的PIC单片机,当MCLR引脚被施加一个高于VDD的电压(但仍在芯片允许范围内)时,芯片会进入编程/校验模式。K150电路通过三极管和电阻网络,利用串口控制信号(如DTR、RTS)来切换MCLR引脚上的电压。
典型的电路会使用一个NPN三极管(如S8050)和一个PNP三极管(如S8550)组成一个简单的电平切换电路。当来自CH340G的某个控制信号为低电平时,电路将MCLR拉高至一个由外部电源(或经过稳压的电压)提供的电压(例如5V或通过二极管抬压后的更高电压);当信号为高电平时,则将MCLR拉低至GND。PGC和PGD则通常通过简单的电阻限流直接与CH340G的TXD/RXD相连,或也经过三极管进行缓冲,以提供更强的驱动能力和信号隔离。
为什么这么设计?成本是首要因素。省去专用的编程电压生成电路,极大地降低了BOM成本。其次,对于大部分5V供电的PIC单片机,5V的MCLR电压足以使其进入编程模式(具体需查阅芯片数据手册的“DC Programming Characteristics”章节)。这种设计体现了“够用就好”的工程哲学。
2.3 目标板接口与供电管理
K150通常提供一个6针的ICSP接口(符合Microchip标准):VPP/MCLR、VDD、GND、PGD、PGC,以及一个可选的PGD/PGC(用于低压编程等高级功能,K150通常未使用)。接口顺序必须严格按照标准,否则可能损坏目标板或烧写器。
供电方面,K150可以有两种模式:
- 自供电模式:烧写器通过USB口取电(5V),并通过一个低压差稳压器(如AMS1117-3.3或5.0)为自身逻辑电路供电,同时这个电压也可以选择性地通过一个跳线或开关提供给目标板(VDD引脚)。这是最常用的模式。
- 目标板供电模式:烧写器不从VDD引脚输出电源,而是由已上电的目标板向烧写器的VDD引脚供电。这种模式用于烧录已集成在复杂系统中的芯片。
在电路中,VDD路径上通常会串联一个自恢复保险丝(如500mA)和一个反向肖特基二极管(如1N5819),以防止目标板电源反接或短路时损坏USB端口或CH340G芯片。这是一个非常重要的保护措施,自制时强烈建议加上。
3. 软件环境搭建与固件/驱动要点
硬件焊好只是成功了一半,软件配置同样关键,且往往是新手最容易“卡壳”的地方。
3.1 驱动安装与端口识别
首先,将焊接好的烧写器通过USB线连接到电脑。如果是CH340G芯片,Windows 10/11系统大概率会自动识别并安装驱动。如果没有,需要手动安装。你可以从沁恒官网下载最新的CH340驱动。安装后,在“设备管理器”的“端口(COM和LPT)”下,应该能看到一个“USB-SERIAL CH340 (COMx)”的设备,记住这个COMx号码(如COM3)。
如果使用的是PL2303,请务必寻找其原厂(Prolific)发布的官方驱动,并注意驱动版本与芯片型号(如HX、HXA)的匹配,否则极易出现无法识别的问题。
3.2 烧录软件的选择与配置
K150对应的PC端烧录软件通常就叫“K150 Programmer”或类似名称。网络上流传的版本很多,建议寻找一个较新、界面清晰的版本。软件界面一般包含以下关键区域:
- 芯片选择(Device):一个庞大的下拉列表,对应着你项目正文里那长长的支持列表。这是K150软件的核心数据库。
- 操作按钮:Read(读取)、Write(烧写)、Erase(擦除)、Verify(校验)、Blank Check(空检查)。
- 文件操作:Load HEX(加载程序文件)、Save HEX(保存读取的文件)。
- 配置位(Configuration Bits):用于设置振荡器模式、看门狗、代码保护等芯片选项。这里极易出错!必须根据你的目标板硬件(如晶振类型)和程序要求正确设置,否则芯片可能无法运行。
- 连接设置:选择正确的COM端口和波特率(通常固定为9600或19200)。
首次使用配置流程:
- 打开K150软件。
- 在软件设置中选择正确的COM端口号。
- 在“Device”列表中找到你所要烧录的芯片型号,例如“PIC16F877A”。
- 点击“Blank Check”确认芯片是空的(如果是新芯片)。
- 点击“Load”按钮,载入你的
.hex或.bin文件。 - 仔细检查并设置好配置位。
- 点击“Write”开始烧录,进度条走完后,再点击“Verify”进行校验。
3.3 “支持列表”的奥秘与局限性
你提供的那个超长的芯片列表,是K150软件内部的一个数据库文件(通常是一个.ini或.dat文件)。它定义了每种芯片的存储容量、编程算法、配置字地址、擦除命令等关键参数。K150之所以能支持这么多芯片,正是因为这个数据库。
然而,必须清醒认识到这个“支持”的局限性:
- 并非官方支持:Microchip官方从未认可K150。其支持列表源于社区逆向工程和测试,可能存在错误或遗漏。
- 对新芯片支持滞后:对于PIC16F1xxx, PIC18FxxKxx等新一代增强型中档内核芯片,K150基本不支持。这些芯片的编程协议更复杂,需要更高级的编程器(如PICKit 3/4)。
- 功能有限:K150通常只支持最基本的编程、擦除、校验和读取(如果代码未保护)。它不支持调试、单步执行、电压测量等高级功能。
- 电压精度:如前所述,其VPP电压可能不精确,对于某些对编程电压有严格要求的芯片(如部分低电压型号),可能存在风险。
因此,自制K150是一个学习经典PIC编程原理和制作实用工具的绝佳项目,但对于严肃的产品开发或使用新型号芯片,投资一个官方或第三方认证的编程器(如PICKit 4, ICD 4,或者国产的“MINI PRO”系列)是更稳妥的选择。
4. 焊接、组装与调试全流程实录
现在,让我们进入动手环节。假设你已经根据找到的K150电路图(很容易在网上搜到“K150 schematic”)准备好了所有元件和一块万用板(或自己绘制的PCB)。
4.1 物料清单与焊接顺序
一个典型的K150烧写器需要以下元件:
- 核心IC:CH340G(或PL2303) * 1
- 三极管:S8050(NPN) * 2, S8550(PNP) * 1 (具体数量依电路图而定)
- 二极管:1N4148 * 3-4, 1N5819(防反接) * 1
- 电阻:470Ω, 1kΩ, 2.2kΩ, 4.7kΩ, 10kΩ等若干(阻值需严格按电路图)
- 电容:104 (0.1uF)瓷片电容 * 2-3, 10uF/16V电解电容 * 1
- 稳压芯片:AMS1117-5.0 * 1 (如果电路需要5V稳压)
- USB接口:Micro-USB或USB-B型母座 * 1
- ICSP接口:6针单排针 * 1
- 跳线帽:用于选择供电模式 * 1
- LED:电源指示灯(红色)和状态指示灯(绿色)各一,配限流电阻(如1kΩ)
- 自恢复保险丝:500mA * 1 (强烈建议)
焊接顺序建议:遵循“先矮后高,先里后外”的原则。
- 焊接所有电阻、二极管(注意方向!1N4148有黑色环的一端为阴极)。
- 焊接瓷片电容、IC插座(如果使用)。
- 焊接三极管、电解电容(注意正负极)、稳压芯片。
- 焊接USB座和排针。
- 最后插入CH340G芯片(如果使用插座)。
焊接时务必保持烙铁头清洁,每个焊点应光亮、圆润,避免虚焊和连锡。特别是CH340G和USB座的引脚较密,需要耐心。
4.2 上电前关键检查
焊接完成后,千万不要直接插USB!先进行以下检查:
- 目视检查:对照电路图,检查所有元件型号、位置、方向是否正确。重点检查二极管、电解电容、三极管、芯片的方向。
- 连通性测试:使用万用表二极管档或蜂鸣档,检查电源(VCC)和地(GND)之间是否短路。这是最重要的安全测试!如果短路,插上USB可能立刻损坏电脑端口或芯片。
- 静态电阻检查:在未上电时,测量VCC对GND的电阻(用万用表电阻档)。正常情况下,应该有一个较大的阻值(几千欧姆以上),如果电阻很小(如几欧姆),说明存在严重短路。
4.3 上电调试与故障排查
确认无短路后,可以连接USB线。此时,电源指示灯(如果接了)应该亮起。马上用手触摸主要芯片(CH340G, AMS1117),如果发现有芯片异常发烫,立即拔掉USB线,重新检查短路问题。
如果芯片不烫,打开电脑设备管理器,查看是否识别出新串口。如果没有识别,按以下步骤排查:
故障1:电脑完全无反应,设备管理器无新端口
- 可能原因:USB线仅供电无数据、USB座虚焊、CH340G损坏或焊接不良、VCC/GND未接通。
- 排查:换一根已知好的USB数据线。用万用表测量CH340G的VCC引脚(通常为20脚和21脚)是否有5V电压?测量GND引脚电压是否为0?检查CH340G的XI和XO引脚(接晶振或外部时钟)是否正常(如果有晶振)。重新补焊CH340G所有引脚。
故障2:电脑识别到未知设备或带叹号的设备
- 可能原因:驱动未安装或安装错误。
- 排查:根据芯片型号(CH340或PL2303)下载并安装正确驱动。有时需要卸载旧驱动后重新安装。
故障3:识别到COM口,但软件连接失败
- 可能原因:COM口号选错、波特率不匹配、目标板未接或接线错误、烧写器核心电路故障。
- 排查:
- 确认软件中选择的COM口号与设备管理器里的一致。
- 不接目标板,用万用表测量烧写器ICSP接口的VDD引脚电压。如果跳线设置为供电模式,这里应该有5V(或3.3V)输出。测量MCLR引脚电压,在软件未执行操作时,它可能是一个中间电平(如2-3V),这是正常的,因为三极管处于不确定状态。
- 接上一个已知好的、支持的空芯片(如PIC16F877A),确保接线顺序完全正确(VPP, VDD, GND, PGD, PGC)。注意,有些板子的ICSP接口顺序可能是反的!
- 在软件中执行“Read”或“Blank Check”。同时,用万用表或示波器(如果有)监测MCLR引脚电压。在编程命令发出的瞬间,你应该能看到MCLR引脚电压有一个明显的跳变(例如从某个电平跳变到5V左右)。如果电压没有变化,说明控制MCLR的三极管电路可能有问题,重点检查连接DTR/RTS信号的三极管、电阻网络。
一个实用的快速诊断法:许多K150软件在连接时会尝试让编程器上的LED闪烁。如果这个LED能随软件操作闪烁,说明USB通信基本正常,问题可能出在后续的驱动电路或与目标板的连接上。
5. 进阶技巧、注意事项与项目扩展
当你成功烧录第一颗芯片后,这个自制工具的价值才真正开始体现。以下是一些能让你用得更顺手、更安全的经验。
5.1 必须牢记的安全操作准则
- 热插拔禁忌:绝对不要在烧写器或目标板通电的情况下,插拔ICSP接口!这极易因电势差产生瞬间大电流,损坏烧写器或目标芯片。正确的顺序是:连接好所有线缆 -> 给目标板上电(或由烧写器供电)-> 进行烧录操作 -> 操作完成后 -> 断开电源 -> 最后拔线。
- 静电防护:尤其是在干燥季节,操作芯片前最好触摸一下接地的金属物体释放静电,或者使用防静电腕带。PIC芯片的CMOS工艺对静电比较敏感。
- 核对配置位:我至少有三块板子因为配置位中振荡器模式设错(比如程序用内部RC,配置位设成了HS),导致芯片“锁死”无法通信,最后只能靠高压并行编程器救回。烧录前花10秒核对配置位,能省去后面数小时的麻烦。
- 供电匹配:确保烧写器给目标板提供的电压(VDD)符合目标芯片的要求。有些3.3V的芯片(如PIC18LF系列)用5V供电会损坏。
5.2 提升稳定性的小改造
- 增加去耦电容:在CH340G的VCC引脚附近,增加一个0.1uF的瓷片电容和一个10uF的电解电容,可以显著改善USB通信的稳定性,防止因电源纹波导致的随机通信失败。
- 信号线串联电阻:在PGC和PGD信号线上,串联一个22Ω到100Ω的小电阻,可以抑制信号反射,特别是在使用较长的杜邦线连接目标板时,能提高通信可靠性。
- 优化VPP电路:如果你主要烧录5V芯片,可以尝试在MCLR/VPP的输出端增加一个简单的稳压二极管(如5.1V)到地,用于钳位电压,防止意外过冲。但要注意这会增加负载,需要评估驱动能力。
5.3 项目扩展思路
自制K150本身是一个完整的项目,但它也可以成为更大项目的起点:
- 集成到开发板:将K150的电路直接设计到你的PIC学习板或项目板上,做成一个“自举编程”接口,方便调试。
- 支持更多芯片:深入研究K150软件的数据文件格式,理论上你可以通过修改或添加参数来支持更多芯片(前提是这些芯片的编程协议与现有支持的芯片兼容)。这是一个高级玩法,需要对PIC编程规范有很深的理解。
- 开源软件重写:网上有一些开源项目试图用Arduino或STM32来模拟K150的功能,甚至编写更友好的图形界面。如果你对嵌入式软件感兴趣,可以尝试用你熟悉的MCU来重新实现这个编程器,这会让你对ICSP协议的理解达到一个新的层次。
自制K150烧写器的过程,就像一次微型的硬件逆向工程与系统集成。它带给你的不仅仅是一个几十块钱的工具,更是一套关于通信协议、电平转换、电源管理和调试排错的第一手经验。当你不再把编程器看作一个神秘的黑盒子,而是清楚地知道每一次点击“烧录”按钮背后,电流和信号是如何在导线和硅片间流动时,你对嵌入式系统的掌控力就已经上了一个台阶。最后,记得妥善保管你的电路图和元件清单,说不定哪天就能帮到另一个在坑里摸索的朋友。
