如何设计一个在线烧录方案?
来源:互联网 发布: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
- 如何设计一个在线烧录方案?
- 设计模式研究:如何判断一个封装方案是好是坏
- 设计模式研究:如何判断一个封装方案是好是坏
- 设计一个投入方案
- 如何利用Plxmon工具在线烧录PCI卡的EEPROM
- 如何利用Plxmon工具进行在线烧录PCI卡的EEPROM
- 如何利用Plxmon工具在线烧录PCI卡的EEPROM
- 如何利用Plxmon工具进行在线烧录PCI卡的EEPROM
- 代码在线烧录注意的一点
- PLXMon 在线烧录EEPROM经验总结
- STM32在线烧录程序的开发
- 打造一个在线通信录,实现在线通讯录的显示、添加、删除
- 设计一个类似支付宝的在线支付系统,问如何着手?
- 关于PCI9054下的EEPROM在线烧录经验总结
- 一个在线免费设计icon的网址.
- RK-Android方案编译与烧录升级指导
- AllWinner-Android方案编译与烧录升级指导
- 机智云soc方案开发烧录配置
- Python的6种内建序列操作
- Linux下通过命令行创建和设置一个MySQL用户
- Android 运动的小车
- 重定位
- 6.S5PV210时钟初始化c语言实现代码
- 如何设计一个在线烧录方案?
- Java的代理模式(一)静态代理
- lintcode --不同的二叉查找树
- PAT-L1-002. 打印沙漏
- 深入理解JVM--我的学习笔记
- NYOJ 石子合并(一)经典区间DP
- nodejs服务端使用jquery操作Dom
- TSUNG学习教程 工作原理(三)
- Session和Cookie的区别与联系