做ATE,要对DUT内部的PIC单片机进行在线烧写,
在网上看到别人的一个说法(作者 Claud Zhang),内容如下:
----------------------------------------------------------
一种简单高效低成本的Microchip MCU编程方法
Claud Zhang
对于一些研发工程师来说,工厂的的MCU编程有时候是个比较头疼的问题.在研发过程中,大家都和习惯于用仿真器去编程,这个对工程师来说是个非常简单的过程,但是在工厂生产,工厂认为太复杂了。工厂希望是个傻瓜式的过程。最好的方法是通过ATE自动编程,不需人工参与。
在以往的通常有2种方法,
一种是用PM3, 先编程好,再去SMT, 这种方法对量非常大又不在意成本的话也不失为一种方法,当然这种编程的缺点也很多
1, 首先成本高,PM3, 插座都是一笔不小的开销
2, 失效率会比较高,在上SMT 之前就需要拆封,容易产生管脚损伤,ESD, 造成废料
3, 如果你在此基础上做一个完全自动化的话,相信先期投入的成本是相当惊人地。
4, 如果你不做自动化设备的话,那么你需要投入更多的人工
5, 不能在线更新
另外一种是在线烧录
Microchip的IC 烧录只需要5个pin, 其中是有2个是电源和地,在PCB 上只占用很小的空间。 或者你做几个焊盘,直接用探针接触。
在线烧录的优点:
1, 容易在线更新
2, 避免二次操作管脚
3, 任何器件都可以通过这5个PIN编程
缺点:
需要人工操作烧录过程,要通过MPLAB 的IDE 界面进行操作。
人工操作的缺点
1, 非常容易出错。
2, 占用一个工位人工,增加成本
3, 工厂工人流动比较大,工位经常变动,更容易出错,增加成本。
解决方法:
在MPLAB 中已经增加了命令行方式实现烧录,也就是说只要用文本写个简单的命令行或者批处理,用你的PK3或者ICD3 连接好你的芯片, 直接点击或者在ATE中调用批处理,就完成烧录。
过程如下:
1 安装MPLAB IDE(我用的是V8.85版本)
2 插入PK3 或者ICD3 , 找到驱动
3 这里先以ICD3 为例
在目录 ..MicrochipMPLAB IDEProgrammer UtilitiesICD3 找到ICD3CMD.exe
把着个文件copy 到你任意指定的一个目录。
假设就在C: ICD3CMD.exe
4, 和ICD3CMD.exe同一个目录下 新建一个文本
假设你用的器件是 DSPIC33EP64MC506, 烧录文件是claud.hex 这个文件也在假设的C盘根目录下,也可以是任意路径,注意不要用中文路径。
在文本文件中写入
ICD3CMD -P33EP64MC506 -FC:claud.Hex -M -V3.3
注意蓝 {MOD}部分写法,不要DSPIC
如果是PIC16F1516 就写成
ICD3CMD –P16F1516 -FC:claud.Hex -M -V3.3
注意蓝 {MOD}部分写法,不要PIC
选项V3.3 是指ICD3 直接给芯片供电3.3V. 如果板上所需电流过大,请外加电源。
5 把这个文本另存为 ICD3PROMCU.bat, 同样保存在和你的 ICD3CMD.EXE 一个目录下
6, 如果你使用的是PK3, 在。。MicrochipMPLAB IDEProgrammer UtilitiesPICkit3 目录中找到 PK3CMD.exe ,把上面的ICD3CMD替换成PK3CMD.
7,双击ICD3PROMCU.bat
8, 如果你在command 窗口里看到如下画面, 恭喜你, 成功了
9, 在工厂里要做的只是双击一下或者集成到ATE中直接调用。
10, 谢谢你仔细读完。
--------------------------------------------------------------------------
实际操作中,查询该DOS Console命令就可以发现其大体功能有哪些(估计还有一部分隐藏参数MCHP官方未公开,因为对比MPLAB的操作细节可以看出来):
E:PROG>icd3cmd /?
Options Description
---------------------------------------------------------------------------
B Batch Mode Operation
C Blank Check Device
E Erase Flash Device
PKOB To connect PKOB
F
Hex File Selection
G Read functions
region:
E = EEPROM
I = ID memory
C = Configuration memory
B = Boot Flash Memory
If no region is entered, the entire
device will be read.
Type F: = read into hex file,
Path = full file path,
H Hold In Reset
L Release from Reset
I Use High Voltage MCLR
M Program Device
region:
P = Program memory
E = EEPROM
I = ID memory
C = Configuration memory
B = Boot Flash Memory
If no region is entered, the entire
device will be programmed.
N####,#### Program Memory Range
#### is a hexidecimal number representing
Start and End Address in sequence
P Part Selection. Example: 18F67J50
R Reporgram
S SQTP File Selection
U## Program calibration memory,where:
## is a hexidecimal number representing
the least significant byte of the
calibration value to be programmed
V Power Target from ICD3
Y Verify Device
against selected HEX File
? Help Screen
?E Displays Exit Code
Example: ICD3CMD /P18F67J50 /GFc:HexCode.hex
or
Example: ICD3CMD -P18F67J50 -GFc:HexCode.hex
Version 01.00.14
Copyright (C) Microchip Technology Inc. 2009
E:PROG>
//-----------------------------------再看看MPLAB开发IDE中的连接ICD3过程:
MPLAB ICD 3 detected
Connecting to MPLAB ICD 3...
Firmware Suite Version...... 01.28.90
Firmware type......................Enhanced Midrange
MPLAB ICD 3 Connected.
Target Detected
Device ID Revision = 00000004
Programming...
Programming/Verify complete
//-----------------------------------其实这个icd3cmd命令自带支持连续操作模式,叫Batch Mode,试验如下:
E:PROG>icd3cmd -P16F1903 -FC:usr111.hex -M -B
Connecting...
MPLAB ICD 3 detected
Connecting to MPLAB ICD 3...
Firmware Suite Version...... 01.28.90
Firmware type......................Enhanced Midrange
MPLAB ICD 3 Connected.
Target Detected
Device ID Revision = 00000004
Programming Device ...
Programming/Verify complete
Batch Mode Count : 1
Batch Mode: Press Enter to repeat the same operation !!!
Programming Device ...
Programming/Verify complete
Batch Mode Count : 2
Batch Mode: Press Enter to repeat the same operation !!!
最后这个才是对批量烧些真正有用的指令!!