如何设计一个在线烧录方案?

来源:互联网 发布:java框架有必要学吗 编辑:程序博客网 时间:2024/05/16 16:06

如何设计一个在线烧录方案?

[导读]在线烧录,芯片先贴在PCB板上后,再对其进行烧录。由于在线烧写的灵活性(产品先生产出来后,可根据用户订单,临时烧录不同的固件)、易返工性(直接在板重新烧录),越来越多的工厂选择了在线烧录的方案。由于每款目标板

在线烧录,芯片先贴在PCB板上后,再对其进行烧录。由于在线烧写的灵活性(产品先生产出来后,可根据用户订单,临时烧录不同的固件)、易返工性(直接在板重新烧录),越来越多的工厂选择了在线烧录的方案。

由于每款目标板存在各种差异性,烧录环境参数不统一,导致烧录出现异常以及达不到需求效果。那么,如何设计一个更合理的在线烧录放案?以下罗列了几个注意事项。

1、选择合适的烧录通讯协议

一款芯片,可能同时支持几种烧录通信协议,基于每种协议的特点,根据需求,在目标板预留一个或多个烧录通讯协议接口。以LPC1517为例,可以支持SWD、UART烧录通讯协议。其中,SWD通信速率能达到6M以上,而UART模式只能支持115200 的波特率(相比之下,SWD速率大约是UART的52倍)。更快的通讯速度,将减少烧录时间,提高烧录生产效率,如果追求烧录速度,首选SWD。但当芯片加密后,芯片杜绝编程器通过SWD访问芯片,这时只能通过UART模式擦除解密。一般产品出产后,芯片都配置成加密模式,后续产品升级、维修需要重新烧录固件时,由于芯片已处于加密模式,故不能再用SWD模式烧录,只能采用UART模式。因此,应根据具体情况,预留对应的SWD或UART烧录接口。或者两种都预留,SWD模式接口用于量产烧录,UART用于维修、升级时单次烧录。


2、预留禁能看门狗的接口

为了避免芯片程序跑飞或进入死循环状态,目标板一般都会放置外部看门狗,有效保证整个系统稳定运行。但是,如果芯片正处于烧录状态,由于没有喂狗,看门狗将计数溢出并复位目标芯片,意外中断了当前的烧录工作。为了避免以上异常情况,目标板应预留禁能看门狗的接口。当芯片烧录的时候,通过一个跳线,禁能看门狗,杜绝烧录时芯片被看门狗复位。如图1所示,目标板预留了禁能看门狗接口。


图1 禁能看门狗接口

3、烧录接口是焊盘测试点还是接线座

图2为焊盘测试点和普通烧录接线座的对比。如果生产烧录量很大,为了提高烧录效率,可以配合夹具和自动机,进行自动化的烧录。夹具一般都是配合顶针一起使用的,故需要在目标板预留焊盘测试点,以便烧录信号线的顶针与目标板接触;而如果生产烧录量偏小,则可以人工手动拔插烧录接口。

 

图2 焊盘测试点和普通烧录接线座的对比

4、引出芯片复位管脚

有时候,出于节省PCB空间考虑,设计烧录接口时会省掉复位管脚,但这有可能导致烧录不稳定。烧录前,先复位芯片,可以给芯片烧录提供一个纯净的初始化环境,避免芯片已跑有代码时,影响后续的烧录。此外,烧录前先复位芯片,还可以避免上电瞬间烧录信号线电平的抖动,使得芯片误采集到握手信号,导致烧录通信握手失败。因此,为了保证烧录的稳定性,烧录接口需引出复位管脚。烧录器烧录芯片前,利用复位管脚先复位芯片,使芯片处于一个纯净的初始化状态,有效保证芯片烧录的稳定性和有效性。

 

图3 引出复位管脚

以上只是罗列了常见的几种情况,但由于在线烧写目标板的差异性,设计PCB板时应该根据具体的芯片,配合你选择的烧录器特性,设计一个合理的方案。

 

/**********************wdt fuction**********************************************************************/#define  WDT_OPEN1#define IS_DEBUG(0)//NOTE:1)在线debug程序,须先禁掉看门狗,否则超时复位重启;2)keil在线烧录,烧录期间未能及时喂狗则会复位重启,导致烧录失败void wdt_init(void){uint8_t u8Lock;/************在线debug,禁掉看门狗***************/#if(IS_DEBUG)u8Lock = SYS_Unlock();WDT_Close();CLK_DisableModuleClock(WDT_MODULE);SYS_Lock(u8Lock);#endif#if(1 != IS_DEBUG)  //test wdt timeout reset function u8Lock = SYS_Unlock();CLK_EnableXtalRC(CLK_PWRCTL_LXTEN_Msk);//使能无源晶振(无源晶振记得要使能啊,有源晶振则上电自动起振)CLK_EnableModuleClock(WDT_MODULE);//CLK->CLKSEL1 = (CLK->CLKSEL1 & ~(3<<0)) | (1<<0);//clk source 32k  ==CLK_SetModuleClock(WDT_MODULE, CLK_CLKSEL1_WDTSEL_LXT, MODULE_NoMsk);//32k  CLK_CLKSEL1_WDTSEL_HCLK_DIV2048SYS_Lock(u8Lock);WDT_RESET_COUNTER();WDT_CLEAR_RESET_FLAG();u8Lock = SYS_Unlock();/*WDT->CTL = (WDT->CTL & ~(7 << 8)) | (7 << 8);//8224 ms    WDT->CTL |= 1 << 1;//enable rstWDT->CTL |= 1 << 7;//enable wdt*/WDT_Open(WDT_TIMEOUT_2POW18,TRUE);//8224 msSYS_Lock(u8Lock);#endif}void wdt_clear(void){WDT_RESET_COUNTER();WDT_CLEAR_RESET_FLAG();}

餐考:http://www.21ic.com/app/analog/201605/676150.htm?_t_t_t=0.20653475700134421

原创粉丝点击