1. 项目概述为什么我们需要关注M68HC08的低成本编程方案在嵌入式开发领域尤其是面对一些经典或仍在服役的8位微控制器MCU时一个现实而棘手的问题常常摆在工程师面前如何以最低的成本对已经焊接在电路板上的芯片进行程序烧录和调试对于Motorola后为Freescale现为NXP的M68HC08系列MCU而言这个问题尤为突出。这个系列以其高可靠性、丰富的外设和极具竞争力的成本在过去几十年里被广泛应用于汽车电子、工业控制、家电以及各种消费类产品中。即便在今天仍有大量的存量产品和基于其设计的低成本新项目在运行和开发。然而官方的开发工具如早期的在线仿真器ICS或第三方如PE Microcomputer Systems的MON08-Cyclone/Multilink编程器虽然功能强大、稳定可靠但其采购成本对于个人开发者、小团队或大批量生产中的每个工位而言可能是一笔不小的开销。更关键的是在产品生命周期的维护阶段或者在对现场设备进行固件升级时你手边不一定总有这些专用工具。这时理解并实现一套“低成本编程与调试方案”就从一个技术话题变成了实实在在的降本增效和保障运维能力的工程需求。这套方案的核心就是充分利用M68HC08芯片内部固化的“监控模式”Monitor Mode。这并非什么神秘的黑科技而是芯片设计时预留的一个后门。通过特定的引脚电平组合尤其是给IRQ引脚施加一个高于VDD的VTST电压和时序可以让MCU在上电复位后不执行用户Flash中的程序而是跳转到内部ROM中一段预先烧写好的监控程序。这段程序实现了一个精简的调试器内核能够通过单一的串行通信引脚通常是PTA0接收来自主机通常是PC的命令执行内存读写、寄存器修改等操作从而实现对Flash的编程和基本的调试功能。简单来说监控模式就是把一个复杂的硬件仿真器/编程器的部分功能用芯片自身ROM里的软件和简单的外部电路来实现。你的成本主要就花在搭建那个“简单的外部电路”上。本文将彻底拆解这个过程的每一个环节从监控模式的原理信号到各种低成本“转换盒”Pod的电路设计再到目标板Target Board上接口的简化技巧。我的目标不是让你照搬某个电路图而是理解其背后的“为什么”这样你才能根据自己手头的芯片型号、应用场景和成本约束设计出最适合自己的方案。2. 监控模式深度解析不仅仅是“后门”在开始动手焊接之前我们必须先吃透监控模式的工作原理。这决定了我们硬件电路的设计边界和软件工具的选型。很多初次接触的朋友容易把监控模式想象成一个简单的“编程模式”但实际上它是一个功能完整的、基于命令响应的微型调试环境。2.1 核心信号与进入条件要让一颗M68HC08 MCU进入监控模式需要在复位释放的瞬间满足一组特定的引脚电平条件。这些信号可以分为必需信号和配置信号两大类。必需信号缺一不可VTST/IRQ这是进入监控模式的“钥匙”。需要在IRQ引脚上施加一个7V至9V具体范围取决于VDD电压的高电压VTST。这个电压必须高于芯片的VDD用于触发内部特殊的电平检测电路。关键点这个电压必须在芯片上电且复位引脚释放从低到高时就已经稳定存在。一旦监控模式成功进入IRQ引脚可以恢复其正常的中断输入功能在某些调试场景下需要。COM/PTA0这是与主机通信的“生命线”。监控模式固件会利用这个引脚通过软件模拟串行通信协议通常为9600波特率8N1与PC进行全双工通信。注意这是一个双向、单线的串口发送和接收都通过这一根线完成依靠固件快速切换引脚方向来实现。因此外部电路必须能妥善处理这种双向数据传输不能造成总线冲突。OSC/OSC1这是监控模式的“心跳”。芯片需要外部提供一个稳定的时钟信号通常推荐9.8304MHz。这个频率经过内部总线分频后恰好能产生精确的9600波特率。这个外部时钟信号需要足够强以“压倒”Override目标板上可能已经存在的晶体或RC振荡电路。重要提示不同家族的M68HC08芯片要求的监控模式时钟频率可能不同务必查阅具体型号的数据手册。配置信号决定工作状态这些信号在复位上升沿被锁存用于配置监控模式的一些选项之后这些引脚即可恢复为普通I/O功能。MOD1, MOD0模式选择引脚。它们的状态组合决定了芯片进入何种特殊模式如监控模式、测试模式等。对于正常的用户监控模式其电平有固定要求通常为特定组合具体需查数据手册。DIV4时钟分频选择。如果该引脚存在拉高通常表示总线时钟输入时钟/4这是配合9.8304MHz时钟产生标准波特率的常见设置。SSEL安全字节选择。用于选择安全代码的写入方式是串行还是并行。对于用户开发永远使用串行模式即该引脚应处于特定电平通常为低。电源与地VDD/VSS显然需要为目标板和可能的接口电路供电。RST复位引脚。虽然通过循环上电Power-On Reset, POR也能实现复位进入监控模式但连接RST引脚可以实现更灵活的调试控制如单步执行后的复位。对于某些引脚复用的型号如HC908KX/QTRST引脚可能同时是I/O需要特别注意外部上拉。实操心得信号时序是关键很多自制接口失败的原因不是电路错了而是时序没对上。最关键的一点VTST电压必须在芯片供电稳定、且复位引脚释放之前就建立好。一个常见的错误做法是先给MCU上电然后再接通VTST这样是绝对无法进入监控模式的。稳妥的做法是确保VTST电源如9V电池已开启然后才给目标板供电。或者使用带有电源控制功能的接口电路确保上电顺序正确。2.2 监控模式的能与不能理解监控模式的能力边界可以帮你判断它是否适合你的项目。它能做的读写内存包括Flash、RAM、寄存器。这是编程和查看变量状态的基础。编程Flash逐字节或按块擦除和写入用户程序存储器。执行程序可以让PC从某个地址开始执行实现简单的运行和调试。设置断点通常支持数量有限的硬件断点利用芯片内部的断点资源。它的局限非实时全速仿真监控模式本身需要占用CPU资源来处理串口命令因此在进行单步、断点等调试操作时程序并非全速运行而是被监控程序中断。这对于严格时序相关的调试可能不够理想。资源占用监控模式固件会占用少量的RAM空间作为通信缓冲区并且会禁用某些功能如COP看门狗。在调试时需要注意。功能有限相比动辄数千美元的完整仿真器ICE它缺乏实时跟踪、复杂断点、性能分析等高级功能。对于大多数应用开发特别是Flash编程和基础调试监控模式已经完全够用。它的最大优势就是低成本和可集成性——你可以把编程接口电路直接做到产品板上方便生产烧录和后期升级。3. 硬件方案实战从标准到简化的接口电路设计了解了原理我们就可以着手设计硬件了。硬件部分的核心是一个“电平转换与信号调理电路”我习惯称之为“编程Pod”或“调试盒”。它的作用是在PC的RS-232串口或USB转串口和MCU脆弱的I/O引脚之间建立一个安全、可靠的桥梁。3.1 标准方案基于MAX232和缓冲器的Pod这是最经典、最可靠的方案常见于早期官方文档和评估板。我们以图4原文档的电路为蓝本进行拆解。电路构成与原理RS-232电平转换MAX232PC串口使用±12V左右的电平而MCU是0/5V的TTL电平。MAX232及其兼容芯片如SP3232负责完成这个双向转换。它需要4个外部电容通常为1µF或0.1µF具体看型号来产生内部的正负电荷泵电压。VTST电压生成MAX232的V引脚在内部电荷泵作用下能产生一个大约9V的电压略高于VCC。这个电压经过一个稳压二极管如9.1V齐纳管和限流电阻如1kΩ后就可以作为VTST供给IRQ引脚。这是非常巧妙的设计无需额外的升压电路。双向通信缓冲74HC125这是处理PTA0双向通信的关键。PTA0在监控模式下既是输入也是输出。74HC125是三态缓冲器。电路连接使得当PTA0输出高电平时缓冲器使能将高电平送至MAX232的输入端T2IN。当PTA0输出低电平时缓冲器使能将低电平送至T2IN。当PTA0配置为输入时其内部为上拉或高阻。此时来自PC通过MAX232R2OUT引脚发送的数据经过电平转换的TTL信号可以通过另一个缓冲器通道送到PTA0。两个缓冲器的使能端由巧妙的逻辑控制通常利用R2OUT信号确保同一时刻只有一条通路是导通的避免冲突。时钟电路提供一个9.8304MHz的有源晶振Canned Oscillator其输出直接连接到MCU的OSC1引脚并串联一个小的电阻如22-100Ω以限制驱动电流保护MCU引脚。模式选择信号上/下拉通过电阻网络将MOD0, MOD1, DIV4, SSEL等引脚拉到所需的高低电平。优缺点分析优点电路成熟稳定抗干扰能力强通信可靠。是商用编程器的设计基础。缺点元件较多MAX232、74HC125、晶振、若干电阻电容成本相对较高PCB面积大。3.2 简化方案用二极管和电阻替代缓冲器为了进一步降低成本我们可以简化双向通信电路。图5原文档展示了一种经典简化方案。简化核心去掉了74HC125改用一只二极管如1N4148和一个上拉电阻来实现双向电平隔离。MCU发送PTA0为输出输出高电平5V二极管D1反向截止。PTA0通过上拉电阻R?图中未标号通常接VDD维持高电平同时这个高电平通过电阻R3图中为10k需核对使得MAX232的T2IN也为高。注意这里存在一个潜在问题如果R3阻值过大可能无法在MAX232输入端形成稳定的高电平。需要计算确认。输出低电平0V二极管D1正向导通不此时PTA0为低它会将MAX232的T2IN引脚通过外部电路拉低。关键在于当PTA0主动输出低时它能“压倒”来自PC侧的任何信号。MCU接收PTA0为输入此时PTA0引脚由固件配置为高阻输入模式依靠内部或外部上拉电阻维持在逻辑高。当PC发送逻辑‘1’TTL高电平时MAX232的R2OUT输出高二极管D1反向截止对PTA0无影响PTA0保持高收到‘1’。当PC发送逻辑‘0’TTL低电平时R2OUT输出低二极管D1正向导通将PTA0引脚电压拉低收到‘0’。关键计算与选型这个电路能否工作的关键在于电阻值的选取。我们需要确保MCU输出低电平时能产生足够低的电压低于MAX232的输入低电平阈值VIL通常为0.8V。这要求从VDD通过上拉电阻到PTA0的电流与从MAX232输出端通过二极管、电阻到PTA0的电流在PTA0为低时达到平衡且最终电压足够低。PC发送低电平时通过二极管拉低PTA0的电流必须能克服PTA0内部上拉如果存在和外部上拉电阻的影响将电压拉至VIL以下。通常经过实践验证的取值是上拉电阻PTA0到VDD选用4.7kΩ - 10kΩ与MAX232连接的电阻如图中R3选用1kΩ - 4.7kΩ。二极管选用开关速度快的1N4148。优缺点分析优点元件数量大幅减少成本极低电路非常简单。缺点对电阻值匹配要求较高抗干扰能力弱于缓冲器方案在长线或噪声环境下可能不稳定。实测建议在面包板上先搭建测试用示波器观察PTA0引脚波形确保高低电平清晰、无毛刺。3.3 极简方案分立元件搭建的完整Pod如果你连MAX232都不想用或者想挑战更极致的成本控制图7原文档的方案值得研究。它用几个三极管、电阻、电容和二极管完全从零搭建了一个RS-232电平转换和VTST开关电路。电路模块分解RS-232收发电路Q1, Q2, D1, C1, R1-R5这是一个经典的“无源”RS-232收发电路。Q1和Q2构成了一个推挽式的电平转换器。C1用于产生负电压。PC串口的TxD信号驱动这个电路将其转换为TTL电平送到PTA0同时PTA0的输出通过Q1等控制PC串口的RxD信号电平。VTST开关电路Q3, Q4, R6-R9, 9V电池这是一个受目标板VDD控制的电子开关。只有当目标板供电VDD存在时Q4导通进而使Q3导通将9V电池的电压作为VTST加到IRQ引脚。当目标板断电VTST也被切断。这自动保证了正确的上电顺序先有VTST后释放复位通过上电实现。开关S1用于在PTA0被用作普通I/O时断开编程接口。模式选择与时钟提供了连接有源晶振的插座以及用于连接模式选择信号MOD0, MOD1等的排针这些信号可以通过跳线帽连接到VDD或GND进行配置。设计要点与调试三极管选型Q1PNP和Q2NPN可以选择最通用的2N3906和2N3904或者S8050/S8550。确保其耐压和电流足够。负电压生成电容C11µF和电阻R3的取值会影响负电压的幅度。可能需要调整R3原图3.9kΩ用示波器测量DB9引脚2TxD对地的电压确保其负电压能达到-5V以下以满足RS-232标准。VTST开关确保Q3PNP的发射极接9V电池正极集电极输出VTST。Q4NPN作为驱动基极通过电阻由目标板VDD控制。这个电路的精妙之处在于实现了“与目标板共电源”的自动控制。优缺点分析优点成本最低所有元件都非常廉价且易得适合DIY和极小批量生产。缺点电路复杂调试难度大稳定性最差对元件参数和PCB布局敏感。仅推荐给有经验的爱好者或作为后备应急方案。避坑指南自制Pod的常见故障无法连接首先用万用表检查所有电源VDD, VTST, 9V电池是否正常。然后用示波器检查OSC1引脚是否有稳定、幅值足够的9.83MHz方波。最后检查PTA0引脚在连接时是否有数据波形。80%的问题出在电源、时钟或VTST时序上。通信不稳定误码率高重点检查PTA0的双向电平转换电路。对于简化方案尝试减小上拉电阻如改为2.2kΩ以增强驱动能力。检查PCB上信号线是否过长有无靠近干扰源。在PTA0和GND之间加一个20-50pF的小电容有时可以滤除毛刺。能连接但无法擦除/编程Flash检查MCU的供电电压是否在允许的编程电压范围内通常要求4.5V-5.5V。检查Flash保护字节是否被意外编程导致锁定。尝试降低通信波特率如果软件支持。4. 目标板设计技巧最小化接口占用与生产考量设计一个需要在线编程的产品不能只考虑调试阶段更要考虑量产编程和后期维护的便利性。理想的情况是产品板上预留的编程接口占用空间最小、成本最低且不影响产品正常功能。4.1 信号的必要性分级与简化策略不是所有监控模式信号都需要从外部Pod引到产品板上。我们可以根据信号特性进行分级处理信号是否必须从Pod引入简化处理方案VTST/IRQ是必须由外部Pod提供。板上IRQ线路如需接其他器件如按键务必串联一个电阻如1kΩ以隔离高压VTST防止损坏。COM/PTA0是必须由外部Pod提供。建议在板上预留一个测试点或焊盘。如果PTA0在应用中用作输出强烈建议通过一个0Ω电阻或跳线连接Pod接口编程时焊接或短接生产后移除。OSC/OSC1通常是除非你的产品板上本身就有合适频率如9.8304MHz的有源时钟源且可以切换给OSC1否则需要Pod提供。GND是必须连接提供公共参考地。VDD视情况如果Pod需要从目标板取电即目标板供电型Pod则需要连接。如果Pod自带电源如电池供电则不需要。RST否对于简单编程对于仅编程不调试的场景可以通过循环目标板电源来实现复位POR。这省去了一根线和一个连接点。MOD0, MOD1, DIV4, SSEL否这是简化的关键这些信号仅在复位上升沿瞬间采样。我们完全可以在产品板上通过电阻上拉或下拉将它们固定在需要的电平上。这样Pod就完全不需要连接这些引脚了。4.2 “预偏置”模式选择信号的实战技巧如何实现“预偏置”关键在于巧妙利用MCU引脚在应用中的默认状态。场景一引脚配置为输入需要上拉逻辑高如果该引脚在应用中作为低有效输入如按键检测它外部本来就需要一个上拉电阻如10kΩ。这个电阻在复位期间就提供了所需的高电平。完美利用无需额外成本。需要下拉逻辑低如果该引脚在应用中作为高有效输入它外部可能需要一个下拉电阻如10kΩ。同样这个电阻在复位期间提供了低电平。场景二引脚配置为输出需要高电平如果该引脚驱动一个LED的阴极LED阳极接VDD那么复位期间引脚处于高阻输入状态LED不亮。但通过LED和限流电阻的路径该引脚被弱上拉到了VDD。这通常足以满足监控模式对高电平的要求。注意需要计算LED的等效电阻确保上拉足够“强”即电阻足够小通常LED导通时正向压降约1.8V限流电阻330Ω等效上拉电阻约(5V-1.8V)/(5V/10kΩ) ≈ 6.4kΩ这通常是可接受的。如果不确定可以并联一个更大的电阻如100kΩ以确保电平。需要低电平如果该引脚驱动一个NPN三极管的基极控制继电器等并且基极通过一个电阻下拉到地那么在复位期间该引脚同样被拉低。设计实例 假设你的MCU是MC68HC908GP32需要MOD0高MOD1低DIV4高SSEL低。MOD0引脚在应用中接一个按键到地低有效输入。设计在MOD0引脚上加一个10kΩ上拉电阻到VDD。这样平时按键未按下时为高复位时也为高满足要求。MOD1引脚在应用中驱动一个LED阴极驱动。设计LED阳极接VDD阴极通过330Ω电阻接MOD1引脚。复位时引脚通过LED通路被弱上拉到高等等我们需要MOD1低。冲突了此时必须修改设计要么将LED改为阳极驱动MCU引脚输出高点亮并在引脚加一个10kΩ下拉电阻要么放弃用此引脚驱动LED另选一个普通I/O口而MOD1引脚则专门用一个10kΩ电阻下拉到地。DIV4引脚在应用中未使用悬空。设计直接用一个10kΩ电阻上拉到VDD。SSEL引脚在应用中未使用悬空。设计直接用一个10kΩ电阻下拉到GND。通过这样的设计你的产品板上最终可能只需要引出4根线VTST(IRQ)、COM(PTA0)、OSC(OSC1)、GND再加上可选的VDD如果Pod需取电。这可以简化到一个4针或5针的简易连接器大大节省了空间和连接器成本。4.3 生产与维护接口设计连接器选型对于量产环境可以考虑使用弹簧针Pogo Pin测试床Bed-of-Nails这样板上只需要留出对应的测试焊盘无需焊接连接器。对于维修站可以使用小型化的排针如1.27mm间距或板对板连接器。防错设计接口旁边应清晰标注引脚定义。如果使用VTST高压务必在旁边标注“CAUTION: 9V”等警示防止误接损坏其他设备。软件配合与你的编程软件如PE的编程软件、或者开源的hc08sprg等工具配合确保其支持你简化后的接口定义即不检测RST和模式选择信号。5. 软件工具链与实操流程硬件准备就绪后就需要软件来驱动它。虽然原厂和第三方提供了商业软件但我们聚焦低成本主要讨论免费或开源方案。5.1 主机端软件选择PE Microcomputer Systems 的 Cyclone/ Multilink 配套软件即使你使用自制的PodPE提供的编程调试软件如PE USB Multilink Interface驱动及配套编程软件通常也能识别并工作只要你自制的Pod硬件信号与其兼容。这是最接近商用体验的方案。开源工具hc08sprg这是一个基于命令行的开源编程工具支持通过串口和监控模式对多种M68HC08芯片进行编程。它不依赖特定硬件Pod只要你的硬件电路能建立通信即可。你需要从源码编译Linux环境下较方便或者寻找他人编译好的Windows版本。它的优势是透明、可定制适合集成到自动化脚本中。集成开发环境IDE插件一些老的IDE如CodeWarrior for HC08其调试器本身就支持通过MON08接口进行调试。配置好串口号和芯片型号即可。5.2 完整编程调试流程假设我们使用自制的简化Pod图5方案和hc08sprg工具流程如下硬件连接将Pod的串口端DB9通过USB转串口线连接到电脑。将Pod的VTST、COM、OSC、GND和VDD如果需要线连接到目标板对应测试点。确保目标板断电。软件配置与检测在设备管理器中确认USB转串口的COM口号例如COM3。打开终端软件如Putty、Tera Term设置对应COM口波特率96008数据位1停止位无校验。给目标板上电。此时如果硬件和时序正确MCU进入监控模式会在串口上发送一个提示符通常是一个特定的字符如或$。你在终端里应该能看到这个字符。这是最关键的一步证明你的硬件接口和监控模式进入是成功的。如果没收到返回检查硬件尤其是VTST电压和时钟。使用编程工具对于hc08sprg基本命令格式可能是hc08sprg -p com3 -t gp32 erase(擦除) 或hc08sprg -p com3 -t gp32 write my_firmware.s19(写入)。你需要根据你的芯片型号如gp32,jy,qt4等指定-t参数并准备好Motorola S-record格式.s19或.s28的烧录文件。工具会通过串口发送监控命令完成擦除、编程、校验等操作。调试如果使用CodeWarrior等IDE在工程设置中选择调试器为“MON08 Interface”或“PE Multilink/Cyclone”并指定串口号。连接后IDE可以下载代码、设置断点、查看内存和变量。注意单步执行等操作速度会较慢因为每一步都需要通过串口与监控固件交互。5.3 常见问题排查速查表现象可能原因排查步骤连接后无任何反应无提示符1. 电源问题VDD VTST2. 时钟问题OSC1无信号3. 监控模式未进入模式选择引脚电平错误4. 串口线或COM口号错误1. 测量目标板VDD~5V和IRQ引脚VTST7-9V。2. 用示波器检查OSC1引脚是否有9.83MHz方波。3. 检查MOD0, MOD1等引脚在复位时的电平。4. 确认终端软件波特率9600和COM口正确。收到乱码或错误提示符1. 波特率不匹配2. 时钟频率不准确3. PTA0双向通信电路不稳定1. 尝试其他标准波特率如19200, 38400某些芯片或固件可能不同。2. 测量有源晶振实际频率更换更精确的晶振。3. 检查简化Pod中二极管、电阻值用示波器看PTA0波形是否干净。擦除/编程失败1. Flash被保护安全字节2. 供电电压不足3. 通信过程中断1. 尝试全片擦除命令。有些芯片需要先解除保护。2. 确保编程时VDD在4.5V以上。3. 检查串口线接触避免干扰。尝试降低波特率。能编程但不能调试无法设置断点等1. RST引脚未连接2. 调试软件配置错误3. 芯片型号不支持或资源不足1. 对于需要硬件复位的调试操作必须连接RST引脚。2. 确认IDE中调试器配置和芯片型号选择正确。3. 查阅数据手册确认芯片支持硬件断点数量。6. 进阶思考用户监控模式User Monitor与方案选型在文档中提到了针对MC68HC908QT4等引脚极少的芯片的“用户监控模式”User Monitor。这是一个非常巧妙的软件方案其核心思想是将监控模式的入口程序作为用户应用程序的一部分预先烧录到Flash中。工作原理芯片第一次通过标准MON08接口被编程时就烧入一个包含“用户监控器”跳转代码的程序。以后要再次进入编程/调试模式时不需要复杂的VTST高压和模式选择信号了只需要在复位时按住某个特定的按键对应某个I/O口为低电平用户程序就会主动跳转到Flash中预留的监控器代码区域并通过串口与主机通信。优势彻底省去了VTST生成电路、外部时钟和模式选择连接。只需要一个简单的RS-232电平转换电路连接到通信引脚如PTA0即可。成本降到最低接口最简单。局限性需要占用一部分用户Flash空间第一次烧录仍需标准MON08接口安全性较低因为入口条件简单。如何选择最适合你的方案对于开发阶段、样机调试建议使用标准MAX232缓冲器方案或直接购买一个二手的MON08-Multilink。稳定性压倒一切时间成本也是成本。对于小批量生产、现场升级如果产品板空间成本不敏感可以放置一个完整的简化的MON08接口连接器如6-8pin。如果空间紧张采用预偏置模式信号 仅引出必要信号VTST, COM, OSC, GND的方案搭配一个自制的简化Pod。对于成本极其敏感、引脚数少的量产产品强烈考虑采用用户监控模式。在第一次生产时用标准工具烧录好带监控器的固件后续所有更新和维护只需一个USB转TTL串口小板如CP2102、CH340即可完成。对于纯学习、DIY爱好者从分立元件极简方案开始挑战能让你最深层次地理解每一个信号的作用。成功后可以改用简化二极管方案以获得更好的稳定性。最后想说的是折腾M68HC08的这些低成本方案在今天看来可能有些“复古”但其中蕴含的硬件调试思路、对芯片底层机制的探究以及成本控制的权衡是嵌入式工程师的宝贵财富。当你成功用几十元成本的自制工具让一块老旧的芯片焕发新生时那种成就感是直接使用昂贵商用工具无法比拟的。更重要的是这套“理解原理-设计简化-动手实现-解决问题”的方法论在任何嵌入式平台的学习和开发中都是通用的。
M68HC08低成本编程方案:监控模式原理与硬件接口设计实战
发布时间:2026/6/8 14:15:04
1. 项目概述为什么我们需要关注M68HC08的低成本编程方案在嵌入式开发领域尤其是面对一些经典或仍在服役的8位微控制器MCU时一个现实而棘手的问题常常摆在工程师面前如何以最低的成本对已经焊接在电路板上的芯片进行程序烧录和调试对于Motorola后为Freescale现为NXP的M68HC08系列MCU而言这个问题尤为突出。这个系列以其高可靠性、丰富的外设和极具竞争力的成本在过去几十年里被广泛应用于汽车电子、工业控制、家电以及各种消费类产品中。即便在今天仍有大量的存量产品和基于其设计的低成本新项目在运行和开发。然而官方的开发工具如早期的在线仿真器ICS或第三方如PE Microcomputer Systems的MON08-Cyclone/Multilink编程器虽然功能强大、稳定可靠但其采购成本对于个人开发者、小团队或大批量生产中的每个工位而言可能是一笔不小的开销。更关键的是在产品生命周期的维护阶段或者在对现场设备进行固件升级时你手边不一定总有这些专用工具。这时理解并实现一套“低成本编程与调试方案”就从一个技术话题变成了实实在在的降本增效和保障运维能力的工程需求。这套方案的核心就是充分利用M68HC08芯片内部固化的“监控模式”Monitor Mode。这并非什么神秘的黑科技而是芯片设计时预留的一个后门。通过特定的引脚电平组合尤其是给IRQ引脚施加一个高于VDD的VTST电压和时序可以让MCU在上电复位后不执行用户Flash中的程序而是跳转到内部ROM中一段预先烧写好的监控程序。这段程序实现了一个精简的调试器内核能够通过单一的串行通信引脚通常是PTA0接收来自主机通常是PC的命令执行内存读写、寄存器修改等操作从而实现对Flash的编程和基本的调试功能。简单来说监控模式就是把一个复杂的硬件仿真器/编程器的部分功能用芯片自身ROM里的软件和简单的外部电路来实现。你的成本主要就花在搭建那个“简单的外部电路”上。本文将彻底拆解这个过程的每一个环节从监控模式的原理信号到各种低成本“转换盒”Pod的电路设计再到目标板Target Board上接口的简化技巧。我的目标不是让你照搬某个电路图而是理解其背后的“为什么”这样你才能根据自己手头的芯片型号、应用场景和成本约束设计出最适合自己的方案。2. 监控模式深度解析不仅仅是“后门”在开始动手焊接之前我们必须先吃透监控模式的工作原理。这决定了我们硬件电路的设计边界和软件工具的选型。很多初次接触的朋友容易把监控模式想象成一个简单的“编程模式”但实际上它是一个功能完整的、基于命令响应的微型调试环境。2.1 核心信号与进入条件要让一颗M68HC08 MCU进入监控模式需要在复位释放的瞬间满足一组特定的引脚电平条件。这些信号可以分为必需信号和配置信号两大类。必需信号缺一不可VTST/IRQ这是进入监控模式的“钥匙”。需要在IRQ引脚上施加一个7V至9V具体范围取决于VDD电压的高电压VTST。这个电压必须高于芯片的VDD用于触发内部特殊的电平检测电路。关键点这个电压必须在芯片上电且复位引脚释放从低到高时就已经稳定存在。一旦监控模式成功进入IRQ引脚可以恢复其正常的中断输入功能在某些调试场景下需要。COM/PTA0这是与主机通信的“生命线”。监控模式固件会利用这个引脚通过软件模拟串行通信协议通常为9600波特率8N1与PC进行全双工通信。注意这是一个双向、单线的串口发送和接收都通过这一根线完成依靠固件快速切换引脚方向来实现。因此外部电路必须能妥善处理这种双向数据传输不能造成总线冲突。OSC/OSC1这是监控模式的“心跳”。芯片需要外部提供一个稳定的时钟信号通常推荐9.8304MHz。这个频率经过内部总线分频后恰好能产生精确的9600波特率。这个外部时钟信号需要足够强以“压倒”Override目标板上可能已经存在的晶体或RC振荡电路。重要提示不同家族的M68HC08芯片要求的监控模式时钟频率可能不同务必查阅具体型号的数据手册。配置信号决定工作状态这些信号在复位上升沿被锁存用于配置监控模式的一些选项之后这些引脚即可恢复为普通I/O功能。MOD1, MOD0模式选择引脚。它们的状态组合决定了芯片进入何种特殊模式如监控模式、测试模式等。对于正常的用户监控模式其电平有固定要求通常为特定组合具体需查数据手册。DIV4时钟分频选择。如果该引脚存在拉高通常表示总线时钟输入时钟/4这是配合9.8304MHz时钟产生标准波特率的常见设置。SSEL安全字节选择。用于选择安全代码的写入方式是串行还是并行。对于用户开发永远使用串行模式即该引脚应处于特定电平通常为低。电源与地VDD/VSS显然需要为目标板和可能的接口电路供电。RST复位引脚。虽然通过循环上电Power-On Reset, POR也能实现复位进入监控模式但连接RST引脚可以实现更灵活的调试控制如单步执行后的复位。对于某些引脚复用的型号如HC908KX/QTRST引脚可能同时是I/O需要特别注意外部上拉。实操心得信号时序是关键很多自制接口失败的原因不是电路错了而是时序没对上。最关键的一点VTST电压必须在芯片供电稳定、且复位引脚释放之前就建立好。一个常见的错误做法是先给MCU上电然后再接通VTST这样是绝对无法进入监控模式的。稳妥的做法是确保VTST电源如9V电池已开启然后才给目标板供电。或者使用带有电源控制功能的接口电路确保上电顺序正确。2.2 监控模式的能与不能理解监控模式的能力边界可以帮你判断它是否适合你的项目。它能做的读写内存包括Flash、RAM、寄存器。这是编程和查看变量状态的基础。编程Flash逐字节或按块擦除和写入用户程序存储器。执行程序可以让PC从某个地址开始执行实现简单的运行和调试。设置断点通常支持数量有限的硬件断点利用芯片内部的断点资源。它的局限非实时全速仿真监控模式本身需要占用CPU资源来处理串口命令因此在进行单步、断点等调试操作时程序并非全速运行而是被监控程序中断。这对于严格时序相关的调试可能不够理想。资源占用监控模式固件会占用少量的RAM空间作为通信缓冲区并且会禁用某些功能如COP看门狗。在调试时需要注意。功能有限相比动辄数千美元的完整仿真器ICE它缺乏实时跟踪、复杂断点、性能分析等高级功能。对于大多数应用开发特别是Flash编程和基础调试监控模式已经完全够用。它的最大优势就是低成本和可集成性——你可以把编程接口电路直接做到产品板上方便生产烧录和后期升级。3. 硬件方案实战从标准到简化的接口电路设计了解了原理我们就可以着手设计硬件了。硬件部分的核心是一个“电平转换与信号调理电路”我习惯称之为“编程Pod”或“调试盒”。它的作用是在PC的RS-232串口或USB转串口和MCU脆弱的I/O引脚之间建立一个安全、可靠的桥梁。3.1 标准方案基于MAX232和缓冲器的Pod这是最经典、最可靠的方案常见于早期官方文档和评估板。我们以图4原文档的电路为蓝本进行拆解。电路构成与原理RS-232电平转换MAX232PC串口使用±12V左右的电平而MCU是0/5V的TTL电平。MAX232及其兼容芯片如SP3232负责完成这个双向转换。它需要4个外部电容通常为1µF或0.1µF具体看型号来产生内部的正负电荷泵电压。VTST电压生成MAX232的V引脚在内部电荷泵作用下能产生一个大约9V的电压略高于VCC。这个电压经过一个稳压二极管如9.1V齐纳管和限流电阻如1kΩ后就可以作为VTST供给IRQ引脚。这是非常巧妙的设计无需额外的升压电路。双向通信缓冲74HC125这是处理PTA0双向通信的关键。PTA0在监控模式下既是输入也是输出。74HC125是三态缓冲器。电路连接使得当PTA0输出高电平时缓冲器使能将高电平送至MAX232的输入端T2IN。当PTA0输出低电平时缓冲器使能将低电平送至T2IN。当PTA0配置为输入时其内部为上拉或高阻。此时来自PC通过MAX232R2OUT引脚发送的数据经过电平转换的TTL信号可以通过另一个缓冲器通道送到PTA0。两个缓冲器的使能端由巧妙的逻辑控制通常利用R2OUT信号确保同一时刻只有一条通路是导通的避免冲突。时钟电路提供一个9.8304MHz的有源晶振Canned Oscillator其输出直接连接到MCU的OSC1引脚并串联一个小的电阻如22-100Ω以限制驱动电流保护MCU引脚。模式选择信号上/下拉通过电阻网络将MOD0, MOD1, DIV4, SSEL等引脚拉到所需的高低电平。优缺点分析优点电路成熟稳定抗干扰能力强通信可靠。是商用编程器的设计基础。缺点元件较多MAX232、74HC125、晶振、若干电阻电容成本相对较高PCB面积大。3.2 简化方案用二极管和电阻替代缓冲器为了进一步降低成本我们可以简化双向通信电路。图5原文档展示了一种经典简化方案。简化核心去掉了74HC125改用一只二极管如1N4148和一个上拉电阻来实现双向电平隔离。MCU发送PTA0为输出输出高电平5V二极管D1反向截止。PTA0通过上拉电阻R?图中未标号通常接VDD维持高电平同时这个高电平通过电阻R3图中为10k需核对使得MAX232的T2IN也为高。注意这里存在一个潜在问题如果R3阻值过大可能无法在MAX232输入端形成稳定的高电平。需要计算确认。输出低电平0V二极管D1正向导通不此时PTA0为低它会将MAX232的T2IN引脚通过外部电路拉低。关键在于当PTA0主动输出低时它能“压倒”来自PC侧的任何信号。MCU接收PTA0为输入此时PTA0引脚由固件配置为高阻输入模式依靠内部或外部上拉电阻维持在逻辑高。当PC发送逻辑‘1’TTL高电平时MAX232的R2OUT输出高二极管D1反向截止对PTA0无影响PTA0保持高收到‘1’。当PC发送逻辑‘0’TTL低电平时R2OUT输出低二极管D1正向导通将PTA0引脚电压拉低收到‘0’。关键计算与选型这个电路能否工作的关键在于电阻值的选取。我们需要确保MCU输出低电平时能产生足够低的电压低于MAX232的输入低电平阈值VIL通常为0.8V。这要求从VDD通过上拉电阻到PTA0的电流与从MAX232输出端通过二极管、电阻到PTA0的电流在PTA0为低时达到平衡且最终电压足够低。PC发送低电平时通过二极管拉低PTA0的电流必须能克服PTA0内部上拉如果存在和外部上拉电阻的影响将电压拉至VIL以下。通常经过实践验证的取值是上拉电阻PTA0到VDD选用4.7kΩ - 10kΩ与MAX232连接的电阻如图中R3选用1kΩ - 4.7kΩ。二极管选用开关速度快的1N4148。优缺点分析优点元件数量大幅减少成本极低电路非常简单。缺点对电阻值匹配要求较高抗干扰能力弱于缓冲器方案在长线或噪声环境下可能不稳定。实测建议在面包板上先搭建测试用示波器观察PTA0引脚波形确保高低电平清晰、无毛刺。3.3 极简方案分立元件搭建的完整Pod如果你连MAX232都不想用或者想挑战更极致的成本控制图7原文档的方案值得研究。它用几个三极管、电阻、电容和二极管完全从零搭建了一个RS-232电平转换和VTST开关电路。电路模块分解RS-232收发电路Q1, Q2, D1, C1, R1-R5这是一个经典的“无源”RS-232收发电路。Q1和Q2构成了一个推挽式的电平转换器。C1用于产生负电压。PC串口的TxD信号驱动这个电路将其转换为TTL电平送到PTA0同时PTA0的输出通过Q1等控制PC串口的RxD信号电平。VTST开关电路Q3, Q4, R6-R9, 9V电池这是一个受目标板VDD控制的电子开关。只有当目标板供电VDD存在时Q4导通进而使Q3导通将9V电池的电压作为VTST加到IRQ引脚。当目标板断电VTST也被切断。这自动保证了正确的上电顺序先有VTST后释放复位通过上电实现。开关S1用于在PTA0被用作普通I/O时断开编程接口。模式选择与时钟提供了连接有源晶振的插座以及用于连接模式选择信号MOD0, MOD1等的排针这些信号可以通过跳线帽连接到VDD或GND进行配置。设计要点与调试三极管选型Q1PNP和Q2NPN可以选择最通用的2N3906和2N3904或者S8050/S8550。确保其耐压和电流足够。负电压生成电容C11µF和电阻R3的取值会影响负电压的幅度。可能需要调整R3原图3.9kΩ用示波器测量DB9引脚2TxD对地的电压确保其负电压能达到-5V以下以满足RS-232标准。VTST开关确保Q3PNP的发射极接9V电池正极集电极输出VTST。Q4NPN作为驱动基极通过电阻由目标板VDD控制。这个电路的精妙之处在于实现了“与目标板共电源”的自动控制。优缺点分析优点成本最低所有元件都非常廉价且易得适合DIY和极小批量生产。缺点电路复杂调试难度大稳定性最差对元件参数和PCB布局敏感。仅推荐给有经验的爱好者或作为后备应急方案。避坑指南自制Pod的常见故障无法连接首先用万用表检查所有电源VDD, VTST, 9V电池是否正常。然后用示波器检查OSC1引脚是否有稳定、幅值足够的9.83MHz方波。最后检查PTA0引脚在连接时是否有数据波形。80%的问题出在电源、时钟或VTST时序上。通信不稳定误码率高重点检查PTA0的双向电平转换电路。对于简化方案尝试减小上拉电阻如改为2.2kΩ以增强驱动能力。检查PCB上信号线是否过长有无靠近干扰源。在PTA0和GND之间加一个20-50pF的小电容有时可以滤除毛刺。能连接但无法擦除/编程Flash检查MCU的供电电压是否在允许的编程电压范围内通常要求4.5V-5.5V。检查Flash保护字节是否被意外编程导致锁定。尝试降低通信波特率如果软件支持。4. 目标板设计技巧最小化接口占用与生产考量设计一个需要在线编程的产品不能只考虑调试阶段更要考虑量产编程和后期维护的便利性。理想的情况是产品板上预留的编程接口占用空间最小、成本最低且不影响产品正常功能。4.1 信号的必要性分级与简化策略不是所有监控模式信号都需要从外部Pod引到产品板上。我们可以根据信号特性进行分级处理信号是否必须从Pod引入简化处理方案VTST/IRQ是必须由外部Pod提供。板上IRQ线路如需接其他器件如按键务必串联一个电阻如1kΩ以隔离高压VTST防止损坏。COM/PTA0是必须由外部Pod提供。建议在板上预留一个测试点或焊盘。如果PTA0在应用中用作输出强烈建议通过一个0Ω电阻或跳线连接Pod接口编程时焊接或短接生产后移除。OSC/OSC1通常是除非你的产品板上本身就有合适频率如9.8304MHz的有源时钟源且可以切换给OSC1否则需要Pod提供。GND是必须连接提供公共参考地。VDD视情况如果Pod需要从目标板取电即目标板供电型Pod则需要连接。如果Pod自带电源如电池供电则不需要。RST否对于简单编程对于仅编程不调试的场景可以通过循环目标板电源来实现复位POR。这省去了一根线和一个连接点。MOD0, MOD1, DIV4, SSEL否这是简化的关键这些信号仅在复位上升沿瞬间采样。我们完全可以在产品板上通过电阻上拉或下拉将它们固定在需要的电平上。这样Pod就完全不需要连接这些引脚了。4.2 “预偏置”模式选择信号的实战技巧如何实现“预偏置”关键在于巧妙利用MCU引脚在应用中的默认状态。场景一引脚配置为输入需要上拉逻辑高如果该引脚在应用中作为低有效输入如按键检测它外部本来就需要一个上拉电阻如10kΩ。这个电阻在复位期间就提供了所需的高电平。完美利用无需额外成本。需要下拉逻辑低如果该引脚在应用中作为高有效输入它外部可能需要一个下拉电阻如10kΩ。同样这个电阻在复位期间提供了低电平。场景二引脚配置为输出需要高电平如果该引脚驱动一个LED的阴极LED阳极接VDD那么复位期间引脚处于高阻输入状态LED不亮。但通过LED和限流电阻的路径该引脚被弱上拉到了VDD。这通常足以满足监控模式对高电平的要求。注意需要计算LED的等效电阻确保上拉足够“强”即电阻足够小通常LED导通时正向压降约1.8V限流电阻330Ω等效上拉电阻约(5V-1.8V)/(5V/10kΩ) ≈ 6.4kΩ这通常是可接受的。如果不确定可以并联一个更大的电阻如100kΩ以确保电平。需要低电平如果该引脚驱动一个NPN三极管的基极控制继电器等并且基极通过一个电阻下拉到地那么在复位期间该引脚同样被拉低。设计实例 假设你的MCU是MC68HC908GP32需要MOD0高MOD1低DIV4高SSEL低。MOD0引脚在应用中接一个按键到地低有效输入。设计在MOD0引脚上加一个10kΩ上拉电阻到VDD。这样平时按键未按下时为高复位时也为高满足要求。MOD1引脚在应用中驱动一个LED阴极驱动。设计LED阳极接VDD阴极通过330Ω电阻接MOD1引脚。复位时引脚通过LED通路被弱上拉到高等等我们需要MOD1低。冲突了此时必须修改设计要么将LED改为阳极驱动MCU引脚输出高点亮并在引脚加一个10kΩ下拉电阻要么放弃用此引脚驱动LED另选一个普通I/O口而MOD1引脚则专门用一个10kΩ电阻下拉到地。DIV4引脚在应用中未使用悬空。设计直接用一个10kΩ电阻上拉到VDD。SSEL引脚在应用中未使用悬空。设计直接用一个10kΩ电阻下拉到GND。通过这样的设计你的产品板上最终可能只需要引出4根线VTST(IRQ)、COM(PTA0)、OSC(OSC1)、GND再加上可选的VDD如果Pod需取电。这可以简化到一个4针或5针的简易连接器大大节省了空间和连接器成本。4.3 生产与维护接口设计连接器选型对于量产环境可以考虑使用弹簧针Pogo Pin测试床Bed-of-Nails这样板上只需要留出对应的测试焊盘无需焊接连接器。对于维修站可以使用小型化的排针如1.27mm间距或板对板连接器。防错设计接口旁边应清晰标注引脚定义。如果使用VTST高压务必在旁边标注“CAUTION: 9V”等警示防止误接损坏其他设备。软件配合与你的编程软件如PE的编程软件、或者开源的hc08sprg等工具配合确保其支持你简化后的接口定义即不检测RST和模式选择信号。5. 软件工具链与实操流程硬件准备就绪后就需要软件来驱动它。虽然原厂和第三方提供了商业软件但我们聚焦低成本主要讨论免费或开源方案。5.1 主机端软件选择PE Microcomputer Systems 的 Cyclone/ Multilink 配套软件即使你使用自制的PodPE提供的编程调试软件如PE USB Multilink Interface驱动及配套编程软件通常也能识别并工作只要你自制的Pod硬件信号与其兼容。这是最接近商用体验的方案。开源工具hc08sprg这是一个基于命令行的开源编程工具支持通过串口和监控模式对多种M68HC08芯片进行编程。它不依赖特定硬件Pod只要你的硬件电路能建立通信即可。你需要从源码编译Linux环境下较方便或者寻找他人编译好的Windows版本。它的优势是透明、可定制适合集成到自动化脚本中。集成开发环境IDE插件一些老的IDE如CodeWarrior for HC08其调试器本身就支持通过MON08接口进行调试。配置好串口号和芯片型号即可。5.2 完整编程调试流程假设我们使用自制的简化Pod图5方案和hc08sprg工具流程如下硬件连接将Pod的串口端DB9通过USB转串口线连接到电脑。将Pod的VTST、COM、OSC、GND和VDD如果需要线连接到目标板对应测试点。确保目标板断电。软件配置与检测在设备管理器中确认USB转串口的COM口号例如COM3。打开终端软件如Putty、Tera Term设置对应COM口波特率96008数据位1停止位无校验。给目标板上电。此时如果硬件和时序正确MCU进入监控模式会在串口上发送一个提示符通常是一个特定的字符如或$。你在终端里应该能看到这个字符。这是最关键的一步证明你的硬件接口和监控模式进入是成功的。如果没收到返回检查硬件尤其是VTST电压和时钟。使用编程工具对于hc08sprg基本命令格式可能是hc08sprg -p com3 -t gp32 erase(擦除) 或hc08sprg -p com3 -t gp32 write my_firmware.s19(写入)。你需要根据你的芯片型号如gp32,jy,qt4等指定-t参数并准备好Motorola S-record格式.s19或.s28的烧录文件。工具会通过串口发送监控命令完成擦除、编程、校验等操作。调试如果使用CodeWarrior等IDE在工程设置中选择调试器为“MON08 Interface”或“PE Multilink/Cyclone”并指定串口号。连接后IDE可以下载代码、设置断点、查看内存和变量。注意单步执行等操作速度会较慢因为每一步都需要通过串口与监控固件交互。5.3 常见问题排查速查表现象可能原因排查步骤连接后无任何反应无提示符1. 电源问题VDD VTST2. 时钟问题OSC1无信号3. 监控模式未进入模式选择引脚电平错误4. 串口线或COM口号错误1. 测量目标板VDD~5V和IRQ引脚VTST7-9V。2. 用示波器检查OSC1引脚是否有9.83MHz方波。3. 检查MOD0, MOD1等引脚在复位时的电平。4. 确认终端软件波特率9600和COM口正确。收到乱码或错误提示符1. 波特率不匹配2. 时钟频率不准确3. PTA0双向通信电路不稳定1. 尝试其他标准波特率如19200, 38400某些芯片或固件可能不同。2. 测量有源晶振实际频率更换更精确的晶振。3. 检查简化Pod中二极管、电阻值用示波器看PTA0波形是否干净。擦除/编程失败1. Flash被保护安全字节2. 供电电压不足3. 通信过程中断1. 尝试全片擦除命令。有些芯片需要先解除保护。2. 确保编程时VDD在4.5V以上。3. 检查串口线接触避免干扰。尝试降低波特率。能编程但不能调试无法设置断点等1. RST引脚未连接2. 调试软件配置错误3. 芯片型号不支持或资源不足1. 对于需要硬件复位的调试操作必须连接RST引脚。2. 确认IDE中调试器配置和芯片型号选择正确。3. 查阅数据手册确认芯片支持硬件断点数量。6. 进阶思考用户监控模式User Monitor与方案选型在文档中提到了针对MC68HC908QT4等引脚极少的芯片的“用户监控模式”User Monitor。这是一个非常巧妙的软件方案其核心思想是将监控模式的入口程序作为用户应用程序的一部分预先烧录到Flash中。工作原理芯片第一次通过标准MON08接口被编程时就烧入一个包含“用户监控器”跳转代码的程序。以后要再次进入编程/调试模式时不需要复杂的VTST高压和模式选择信号了只需要在复位时按住某个特定的按键对应某个I/O口为低电平用户程序就会主动跳转到Flash中预留的监控器代码区域并通过串口与主机通信。优势彻底省去了VTST生成电路、外部时钟和模式选择连接。只需要一个简单的RS-232电平转换电路连接到通信引脚如PTA0即可。成本降到最低接口最简单。局限性需要占用一部分用户Flash空间第一次烧录仍需标准MON08接口安全性较低因为入口条件简单。如何选择最适合你的方案对于开发阶段、样机调试建议使用标准MAX232缓冲器方案或直接购买一个二手的MON08-Multilink。稳定性压倒一切时间成本也是成本。对于小批量生产、现场升级如果产品板空间成本不敏感可以放置一个完整的简化的MON08接口连接器如6-8pin。如果空间紧张采用预偏置模式信号 仅引出必要信号VTST, COM, OSC, GND的方案搭配一个自制的简化Pod。对于成本极其敏感、引脚数少的量产产品强烈考虑采用用户监控模式。在第一次生产时用标准工具烧录好带监控器的固件后续所有更新和维护只需一个USB转TTL串口小板如CP2102、CH340即可完成。对于纯学习、DIY爱好者从分立元件极简方案开始挑战能让你最深层次地理解每一个信号的作用。成功后可以改用简化二极管方案以获得更好的稳定性。最后想说的是折腾M68HC08的这些低成本方案在今天看来可能有些“复古”但其中蕴含的硬件调试思路、对芯片底层机制的探究以及成本控制的权衡是嵌入式工程师的宝贵财富。当你成功用几十元成本的自制工具让一块老旧的芯片焕发新生时那种成就感是直接使用昂贵商用工具无法比拟的。更重要的是这套“理解原理-设计简化-动手实现-解决问题”的方法论在任何嵌入式平台的学习和开发中都是通用的。