TI MSP430F676x1A三相电能计量SoC:架构、低功耗设计与开发实战
1. 项目概述与芯片定位在智能电表、物联网传感节点这些对功耗和成本都极其敏感的领域选对一颗MCU往往意味着项目成功了一半。我接触过不少低功耗MCU方案但像TI MSP430F676x1A这样将高精度计量、丰富外设和极致的低功耗管理深度集成在一个芯片里的SoC确实让人印象深刻。这不仅仅是一颗微控制器更是一个为三相电能计量量身定制的片上系统SoC。它的核心价值在于用单芯片方案替代了传统“MCU 专用计量芯片 外围电路”的复杂架构在保证优于0.5%计量精度的同时大幅降低了系统BOM成本和整体功耗。MSP430F67641A和F67621A是这一系列中的两个主要型号区别主要在于Flash和RAM的容量。它们都基于MSP430经典的16位RISC CPU内核最高主频可达25MHz并集成了关键的计量外设一个三通道的24位Σ-Δ模数转换器SD24_B、一个10位200kSPS的通用ADCADC10_A、以及一个可直接驱动多达320段LCD的控制器。对于开发者而言深入理解其架构、低功耗机制和编程调试方法是释放这颗芯片全部潜力的关键。接下来我将结合自己的实操经验带你从内到外拆解这颗芯片并分享在真实电表项目中编程和调试的那些“干货”和“坑点”。2. 核心架构与低功耗设计解析2.1 CPU与存储器子系统效率的基石MSP430的CPUXV2内核是一个16位的RISC架构拥有16个寄存器R0-R15。这种设计非常高效因为大多数指令都可以在单周期内完成寄存器到寄存器的操作。R0是程序计数器PCR1是堆栈指针SPR2是状态寄存器SRR3是常数发生器CG这种固定角色分配简化了指令集设计。剩下的R4到R15是通用寄存器为编译器优化和手写汇编提供了极大的灵活性。指令集方面它支持51条基本指令涵盖双操作数、单操作数和跳转指令。地址模式是它的一个亮点提供了7种源操作数寻址和4种目的操作数寻址方式包括寄存器、索引、符号PC相对、绝对、间接、间接自增和立即数寻址。这种丰富性使得访问内存、外设寄存器以及实现复杂数据结构如查表都非常高效。例如用MOV R10, R11这条指令可以在将R10所指内存内容加载到R11后自动将R10增加2字操作或1字节操作这在处理数据流时非常方便。存储系统是另一个重点。芯片提供了高达128KB的Flash和8KB的RAM。Flash存储器被组织成多个512字节的主存储段和4个128字节的信息存储段A到D。信息存储段常用来存放校准参数、序列号等需要掉电保存但又可能在线更新的数据。Flash的编程和擦除有严格的时序和电流要求例如对一个128字节的块进行编程时累积编程时间不能超过16ms典型擦除时间为23-32ms。这里有个关键细节Flash的编程电压DVCC(PGM/ERASE)范围是1.8V到3.6V这意味着即使在电池电压较低时只要在此范围内仍能进行固件更新这对现场维护很重要。RAM部分8KB的容量被划分为多个2KB的扇区。一个非常实用的特性是每个RAM扇区都可以被独立地完全下电以节省漏电流当然该扇区内的数据会丢失。在可能的情况下每个扇区也会自动进入低功耗保持模式。此外芯片还提供了8字节的备份RAMBackup RAM由AUXVCC3电源域独立供电即使在最低功耗模式LPM3.5/LPM4.5下这部分RAM的数据也能得以保留非常适合保存极关键的系统状态信息。2.2 统一时钟系统UCS与电源管理PMM低功耗的灵魂MSP430的低功耗名声很大程度上归功于其精细的时钟和电源管理。统一时钟系统UCS就像一个智能的时钟路由器。它集成了多个时钟源一个可外接32768Hz手表晶振的低频振荡器LFXT1、一个内部超低功耗低频振荡器VLO典型频率10kHz、一个内部微调低频振荡器REFO、以及一个内部数字控制振荡器DCO。UCS通过数字锁频环FLL硬件可以将DCO频率稳定在可编程的倍频上参考时钟可以是LFXT1或REFO。UCS产生三个主要的时钟信号MCLK主系统时钟供给CPU使用。它的频率和来源直接决定了CPU的性能和功耗。SMCLK子系统时钟供给高速外设使用如定时器、SD24_B ADC等。ACLK辅助时钟通常由32768Hz晶振提供供给低速、常开的外设使用如RTC、看门狗等。电源管理模块PMM则负责“喂饱”并“看护”着芯片。它内部集成了一个LDO稳压器为内核提供可编程的电压从而实现性能与功耗的平衡。PMM还包含了电源电压监控SVM和电源电压监测SVS电路以及欠压复位BOR保护。SVM/SVMH可以在电源电压低于用户设定阈值时产生中断让程序有机会进行紧急数据保存而SVS/SVSH则会在电压过低时直接产生复位保护系统。一个重要的实操经验是在进入某些低功耗模式前需要根据应用场景合理配置SVS/SVM的阈值和响应方式避免因电压波动导致意外复位或数据丢失。2.3 丰富的低功耗模式LPM按需供电的艺术MSP430F676x1A提供了多达8种软件可选的功耗模式1种活动模式7种低功耗模式让开发者可以像调节水龙头一样精确控制功耗。AM活动模式所有时钟都活动全速运行。LPM0/LPM1CPU和MCLK停止SMCLK和ACLK保持活动。区别在于LPM1还禁用了FLL环路控制唤醒后需要等待时钟稳定。LPM2/LPM3CPU、MCLK、DCOCLK和FLL都停止仅ACLK活动由低频晶振或VLO提供。LPM3进一步禁用了DCO的直流发生器功耗更低但唤醒后DCO重新稳定需要时间。LPM4最深的睡眠模式之一连ACLK和晶体振荡器都停止了仅保持数据存储。此时电流可降至微安级。LPM3.5/LPM4.5这两种模式更为极端。内部主稳压器被关闭主RAM掉电数据丢失仅备份RAM和I/O端口状态得以保持。LPM3.5下由AUXVCC3供电的备份子系统包括低频振荡器和RTC仍在工作而LPM4.5下RTC也停止了。唤醒只能通过特定的引脚RST/NMI, P1/P2端口中断或RTC事件。这是实现“零功耗”待机仅维持极少量状态的关键模式常用于电表在完全断电主电源失效仅由电池维持时钟和关键数据的场景。中断可以将芯片从任何低功耗模式唤醒执行中断服务程序后可以选择返回中断前的低功耗模式或进入活动模式。这种灵活的中断唤醒机制是构建事件驱动型超低功耗应用的基础。3. 关键外设与接口深度剖析3.1 计量核心24位Σ-Δ ADC (SD24_B) 与 10位通用ADC对于电能计量SoCADC的性能是精度的生命线。MSP430F676x1A集成了一个三通道的24位Σ-Δ ADCSD24_B。Σ-Δ架构通过过采样和数字滤波用高采样率换取高分辨率并对噪声有很好的抑制能力非常适合测量像工频电压电流这样的低频缓变信号。这个ADC直接负责对来自电流互感器CT或分流电阻的电压、电流信号进行高精度数字化为后续的功率、电能计算提供原始数据。除此之外芯片还集成了一个10位、200kSPS的逐次逼近型ADCADC10_A。这个ADC速度更快虽然分辨率低但可以用来监测辅助电源电压AUXVCC1, AUXVCC2、芯片温度、或者进行其他需要快速采样的诊测量。在实际电表设计中我通常用SD24_B专司高精度电能计量而用ADC10_A来监测电池电压、环境温度等系统参数做到物尽其用。3.2 人机交互与通信LCD控制器与多串口芯片集成了LCD控制器最高支持8路COM和40路SEG总计可驱动多达320段LCD。这对于需要显示多项参数电压、电流、功率、电量、时间等的电表面板来说绰绰有余。控制器内部集成电荷泵可以产生LCD驱动所需的多档位电压大大简化了外围电路。通信接口方面它提供了三个eUSCI_A模块可配置为UART、IrDA或SPI和一个eUSCI_B模块可配置为SPI或I2C。这意味着你可以同时连接红外通信模块、RS-485芯片、SPI Flash存储器以及I2C传感器而无需外部扩展串口。在布线时需要注意这些通信接口的引脚大多与GPIO复用且部分支持端口映射Port Mapping这给了PCB布局很大的灵活性但也需要在软件初始化时正确配置。3.3 灵活的端口映射控制器端口映射控制器是MSP430F676x1A一个非常实用的特性。它允许将数字外设功能如UART的TXD/RXD、定时器的捕获/比较输出、SPI的时钟数据线等灵活地映射到P1、P2、P3端口的特定引脚上。查看数据手册中的默认映射表如表6-8例如P1.2默认映射为PM_UCA0RXDUART0接收或PM_UCA0SOMISPI0主入从出。如果你因为PCB走线原因希望把UART0的收发脚换到其他引脚就可以通过配置端口映射控制寄存器PxMAPy来实现。这个功能极大地缓解了PCB布局时的布线压力尤其是在引脚密集的100脚封装上。但务必注意端口映射的配置必须在引脚功能被使能即外设模块初始化之前完成否则可能导致冲突或功能异常。4. 开发、编程与调试实战指南4.1 开发环境搭建与项目配置要开始MSP430F676x1A的开发首先需要搭建环境。TI官方提供的Code Composer Studio (CCS) 是一款功能强大的集成开发环境基于Eclipse对MSP430支持非常完善。你也可以选择开源的MSP430-GCC工具链配合自己喜欢的编辑器。在CCS中新建一个针对MSP430F67641A或F67621A的项目时编译器会提供对应的头文件如msp430f67641a.h和链接器命令文件.cmd。这个命令文件至关重要它定义了内存布局Flash的起始地址、信息存储区的位置、RAM和备份RAM的分配等。一个常见的“坑”是忘记修改链接器文件中的堆栈Stack和堆Heap大小。对于电表这类有复杂计算和可能动态分配内存谨慎使用的应用建议将堆栈大小适当调大例如设置到512字节或1K并在启动代码中初始化堆否则可能发生难以调试的栈溢出或堆错误。初始化代码通常由TI的库函数或启动文件提供它会完成基本的时钟初始化默认使用DCO频率较低。我们通常需要在main()函数的一开始就根据应用需求重新配置时钟系统。例如如果计量算法对时钟精度要求高就需要使能外部低频晶振LFXT1作为ACLK和FLL的参考源并配置FLL将DCO稳定到目标频率如16MHz。#include msp430.h int main(void) { // 停止看门狗 WDTCTL WDTPW | WDTHOLD; // 配置时钟使用外部32.768kHz晶振将DCO设置为~16MHz // 1. 配置LFXT1为低频模式使用外部晶振 UCSCTL6 ~(XT1OFF); // 使能XT1 UCSCTL6 | XCAP_3; // 配置负载电容根据实际硬件调整 // 2. 循环等待XT1稳定 do { UCSCTL7 ~(XT1LFOFFG | DCOFFG); // 清除XT1和DCO故障标志 SFRIFG1 ~OFIFG; // 清除振荡器故障标志 } while (SFRIFG1 OFIFG); // 测试振荡器故障标志 // 3. 配置FLL将DCO倍频到目标频率 // FLL参考时钟 LFXT1 32768Hz 目标DCO 16MHz 32768 * 488 __bis_SR_register(SCG0); // 禁用FLL UCSCTL0 0x0000; // 将DCO和MOD位清零 UCSCTL1 DCORSEL_5; // 选择DCO范围约16MHz UCSCTL2 FLLD_1 | 488; // FLLD分频设为1 FLLN倍频系数设为488 __bic_SR_register(SCG0); // 启用FLL // 4. 循环等待FLL锁定 while (UCSCTL7 DCOFFG) { UCSCTL7 ~DCOFFG; // 清除DCO故障标志 } // 5. 选择时钟源SMCLK MCLK DCOCLK UCSCTL4 SELA__XT1CLK | SELS__DCOCLK | SELM__DCOCLK; // ... 其他外设和主程序初始化 while(1) { __low_power_mode_3(); // 进入LPM3等待中断唤醒 } }4.2 Flash存储器的在应用编程IAP虽然通过JTAG或BSL可以更新固件但在电表运行过程中我们可能需要在Flash的信息存储区记录累计电量、参数修改记录等。这就需要用到在应用编程IAP。MSP430的Flash编程由一组特定的控制寄存器FCTL1/2/3/4管理操作过程需要遵循严格的时序和密钥0xA500保护。基本流程是解锁Flash控制寄存器 - 启动擦除/编程操作 - 等待完成 - 重新上锁。这里有几个必须注意的要点时序与等待擦除一个段512字节或信息段128字节需要时间典型值23-32ms。编程一个字2字节或一个字节也需要几十微秒。在操作期间必须通过查询BUSY位或使用中断来等待操作完成绝对不能在操作完成前读取正在被编程的Flash地址否则会导致读取错误或操作失败。中断Flash擦写期间必须禁止总中断__disable_interrupt()因为Flash控制器在操作期间可能无法响应总线访问。电源电压确保操作期间DVCC在1.8V-3.6V的编程电压范围内。代码执行不能从正在被擦写的那段Flash中执行代码。通常的做法是将执行IAP操作的函数复制到RAM中运行或者确保该函数位于其他不会被擦除的Flash段中。下面是一个向信息段A写入一个字的示例代码框架#include msp430.h #include intrinsics.h #define INFO_A_START 0x1980 // 信息段A的起始地址请查阅具体器件的数据手册 void write_word_to_flash(uint32_t addr, uint16_t data) { volatile uint16_t *flash_ptr (volatile uint16_t *)addr; uint16_t original_sr; // 1. 保存当前全局中断状态并禁止中断 original_sr __get_SR_register() GIE; __disable_interrupt(); // 2. 解锁Flash控制寄存器 FCTL3 FWKEY; // 清除LOCK位 FCTL1 FWKEY | WRT; // 解锁并置位WRT位进入写模式 // 3. 执行写操作 *flash_ptr data; // 向目标地址写入数据 // 写入操作会触发内部编程时序需要等待 __no_operation(); // 插入空操作确保写入指令完成 // 4. 等待编程完成查询BUSY位 while (FCTL3 BUSY) { __no_operation(); } // 5. 退出写模式并重新上锁 FCTL1 FWKEY; // 清除WRT位 FCTL3 FWKEY | LOCK; // 重新上锁 // 6. 恢复中断状态 if (original_sr) { __enable_interrupt(); } } int main(void) { // ... 系统初始化 uint16_t my_data 0x1234; write_word_to_flash(INFO_A_START, my_data); // ... 其他操作 }4.3 低功耗编程模式与实战技巧实现超低功耗的关键在于让MCU在大部分时间处于深度睡眠模式。MSP430的low_power_mode宏如LPM3和对应的退出机制是核心。一个标准的低功耗应用框架如下初始化配置所有必要的外设GPIO、定时器、ADC、通信接口等。进入低功耗模式在main函数的while(1)循环中调用__low_power_mode_X()X为0-4进入相应的低功耗模式。CPU停止程序暂停在此处。中断唤醒配置一个或多个中断源如RTC定时中断、外部按键中断、通信接收中断。当事件发生时MCU被唤醒CPU开始执行对应的中断服务程序ISR。中断处理在ISR中处理事件。至关重要的一步是在ISR返回前需要手动清除CPU状态寄存器SR中的低功耗模式位否则MCU在执行完ISR后会再次进入睡眠。通常使用__bic_SR_register_on_exit(LPM3_bits);这样的函数来实现。返回主循环ISR返回后CPU继续执行__low_power_mode_X()之后的代码进行必要的处理然后循环再次进入低功耗模式。针对电能计量SoC的特定优化技巧外设时钟门控不用的外设模块如多余的定时器、ADC通道、通信接口一定要关闭其时钟通过设置对应模块控制寄存器的位或UCSCTL相关位这是减少动态功耗的基础。GPIO状态将未使用的GPIO配置为输出低电平或输入并上拉/下拉避免引脚悬空造成漏电流。对于已使用的GPIO在进入低功耗前根据外围电路情况设置成最省电的状态例如驱动LED的引脚设为低电平使其熄灭。ADC与基准高精度的SD24_B ADC和内部电压基准是耗电大户。在非采样期间务必将其关闭SD24CTL0 ~SD24REFON;和SD24CTL0 ~SD24ON;。选择合适的LPM模式如果只需要RTC计时唤醒可以使用LPM3ACLK由32K晶振工作DCO关闭。如果连RTC都不需要可以进入更深的LPM4。在完全主电源失效仅由备份电池维持记忆的场景才需要使用LPM3.5/4.5。利用DMA对于SD24_B ADC的连续采样数据可以配置DMA直接在ADC结果寄存器和RAM之间搬运数据无需CPU干预。数据搬运完成后触发DMA中断唤醒CPU进行批量处理这样CPU可以更长时间地睡眠。4.4 调试接口JTAG与Spy-Bi-WireSBW开发调试离不开编程和调试接口。MSP430F676x1A支持标准的4线JTAG和更节省引脚的两线Spy-Bi-Wire接口。标准JTAG需要4个信号TCK, TMS, TDI, TDO加上TEST和RST。它功能全面支持边界扫描和复杂的调试操作。在PCB设计初期建议预留完整的JTAG接口通常是一个2x5的10针插座方便调试。Spy-Bi-Wire (SBW)只需要两个信号TEST/SBWTCK和RST/NMI/SBWTDIO极大地节省了PCB空间非常适合量产后的固件更新或小封装芯片的调试。TI的编程器和调试器如MSP-FET都支持SBW。使用SBW进行调试的硬件连接要点将调试器的SBWTCK连接至芯片的TEST/SBWTCK引脚。将调试器的SBWTDIO连接至芯片的RST/NMI/SBWTDIO引脚。确保共地GND。为芯片提供电源DVCC。调试器通常也能提供有限的电源但对于电表这种可能有多路电源的复杂系统建议使用目标板自身电源并确保电压在调试器允许的范围内。在软件调试时如使用CCS选择正确的连接方式JTAG或SBW和器件型号即可。一个常见的连接问题是芯片无法识别除了检查连线还要确认TEST引脚是否被正确拉高通常调试器会处理以及芯片是否处于复位状态。有时需要手动给RST引脚一个负脉冲来复位芯片再尝试连接。4.5 引导加载程序BSL与固件更新BSL是固化在芯片内部掩膜ROM中的一段程序允许通过串行接口如UART更新Flash而无需JTAG调试器。这对于产品出厂后的现场升级至关重要。MSP430F676x1A的BSL主要通过UART使用P3.0和P3.1进行通信。进入BSL模式需要一个特定的引脚序列在RST/NMI/SBWTDIO和TEST/SBWTCK引脚上施加特定的电平变化。具体序列需要参考《MSP430 Programming With the Bootloader (BSL)》文档。设计支持BSL更新的电表产品时需要考虑以下几点物理接口需要将芯片的P3.0TX、P3.1RX、TEST、RST以及电源和地引到外部连接器如4-6针的插座。电平转换芯片是3.3V电平如果升级工具是RS-232或USB需要电平转换电路。应用层协议TI提供了BSL的PC端工具和协议说明。你需要在产品中设计一个简单的命令解析器或者使用TI的BSL Scripter工具生成更新脚本。安全BSL访问受密码保护。密码是存储在Flash信息段中的一段数据。务必在量产前设置一个强密码并妥善保管。同时在应用程序中要避免误操作擦写存放BSL密码的Flash区域。升级流程典型的流程是产品上电 - 检测升级触发信号如特定按键组合- 跳转到BSL入口向量 - 通过UART与上位机通信 - 擦写Flash - 校验 - 复位运行新固件。5. 电能计量应用中的关键问题与调试实录5.1 计量精度校准与抗干扰设计即使使用了24位Σ-Δ ADC要达到0.5%甚至更高的计量精度校准也必不可少。校准通常包括增益校准在已知的精确电压、电流输入下读取ADC原始值计算出一个校准系数用于补偿传感器CT或分流器和ADC前端的增益误差。相位校准由于电流互感器、运放等器件会引入相位延迟需要在纯阻性负载下调整电压和电流通道的采样同步或进行数字相位补偿。偏移校准在零输入条件下测量ADC的输出偏移值并在计算中减去。这些校准系数需要存储在非易失性存储器中Flash的信息段Info Memory是理想位置。注意Flash有擦写次数限制典型10^5次不要频繁写入。应将校准系数与其他频繁更新的数据如电量分开存储。抗干扰方面电表工作环境复杂面临电网噪声、ESD、浪涌等挑战。除了在硬件上做好滤波、屏蔽和防护在软件上也要采取措施ADC数字滤波充分利用SD24_B内置的数字滤波器SINC3等设置合适的过采样率和抽取比有效抑制带外噪声。软件滤波对计算得到的功率、电压、电流等值进行滑动平均或更复杂的滤波算法。异常值剔除在采样序列中加入简单的限幅或中值滤波剔除因干扰产生的突变值。看门狗与异常恢复必须启用看门狗定时器WDT并在主循环中定期喂狗。在中断服务程序中避免进行耗时过长的操作防止看门狗复位。对于关键数据如累计电量应采用“写前备份-验证-确认”的机制防止在写入Flash时发生意外复位导致数据损坏。5.2 低功耗模式下的外设管理与唤醒源配置在电表应用中MCU大部分时间可能处于LPM3或LPM4仅由RTC定时唤醒进行计量数据累计和显示刷新。此时所有由MCLK和SMCLK驱动的外设都已停止。需要特别关注的是那些由ACLK驱动且在低功耗模式下仍需工作的外设RTC_C用于计时和定时唤醒。确保其时钟源通常是LFXT1在低功耗模式下可用LPM3下可用LPM4下不可用。端口中断P1和P2端口的所有引脚都支持外部中断并能在LPM3.5/LPM4.5下将系统唤醒。这对于通过按键或红外唤醒电表非常有用。通信接口eUSCI模块在低功耗模式下通常不工作。如果需要在低功耗下等待通信数据一种方案是使用IO口中断来检测起始位如UART的下降沿唤醒MCU后再初始化串口接收数据。但这需要外围设备发送特定的唤醒序列。配置唤醒源的实操步骤配置对应引脚为输入方向并使能上拉/下拉电阻根据唤醒信号的有效电平决定。配置中断触发边沿上升沿、下降沿或双边沿。清除该引脚的中断标志位PxIFG。使能该引脚的中断PxIE位。在中断服务程序ISR中首先判断中断源然后清除对应的中断标志位最后使用__bic_SR_register_on_exit(LPM3_bits);等语句退出低功耗模式。5.3 调试过程中遇到的典型问题与解决思路问题程序下载后不运行或运行异常。排查思路检查电源和复位用示波器测量DVCC和RST引脚。确保电源稳定无毛刺RST引脚已释放为高电平。检查时钟确认时钟源是否起振。如果使用外部晶振检查负载电容是否正确布线是否过远。可以暂时将MCLK和SMCLK配置为内部DCO排除晶振问题。检查启动代码确认链接器命令文件是否正确堆栈空间是否充足。可以单步调试看程序能否执行到main()函数。看门狗确认是否在程序开头停止了看门狗WDTCTL WDTPW | WDTHOLD;或者是否正确喂狗。问题低功耗模式下电流远高于预期。排查思路GPIO漏电流将所有未使用的GPIO配置为输出低电平或者配置为输入并使能内部上拉/下拉避免浮空。外设未关闭仔细检查所有外设模块特别是ADC、基准电压、LCD电荷泵、不用的通信接口的使能位是否在进入低功耗前已被禁用。PCB漏电检查PCB是否有污渍、焊锡渣导致轻微短路。可以尝试将芯片从板子上取下单独测量芯片供电脚的电流。测量方法测量整板功耗时建议串联一个1-10欧姆的精密电阻在电源路径上用示波器或万用表测量电阻两端的压降来计算电流。避免使用万用表电流档直接串联其内阻可能影响系统工作。问题Flash编程失败或数据丢失。排查思路电压不足确保编程期间DVCC在1.8V-3.6V之间且纹波小。时序冲突Flash操作期间是否发生了中断是否在操作完成前尝试读取严格遵循“禁止中断-解锁-操作-等待-上锁-开中断”的流程。段地址错误确认擦写操作的地址是否对齐到段的起始地址主存512字节对齐信息存储128字节对齐。累计编程时间超限连续对同一个128字节块进行编程时总时间不能超过16ms。如果需要在短时间内多次更新同一区域需要考虑分批操作或使用RAM缓存。问题通过BSL无法连接芯片。排查思路进入序列确认TEST和RST引脚上的上电/电平序列完全符合BSL文档要求。可以使用逻辑分析仪抓取信号验证。波特率BSL默认的通信波特率可能与你的上位机工具设置不一致。尝试常见的波特率如9600, 19200。引脚复用确认P3.0和P3.1没有被其他外围电路如强上拉/下拉影响通信电平。BSL密码如果之前设置过BSL密码且忘记了将无法通过BSL更新。此时只能通过JTAG接口进行全擦除包括信息段来清除密码但这也会擦除所有用户程序和数据。