在产品批量生产的时候,很多人会有这样的需求,即将每个芯片烧写一个唯一的ID号(Serial Number),以方便对产品进行跟踪和管理或者满足对芯片进行绑定ID号加密的需要。而为了提高整个批量生产过程的效率,选择一个好的烧写工具则至关重要。对飞思卡尔的Kinetis系列来说,可用的烧写方案包括P&E官方的Cyclone MAX(支持在线烧写和脱机烧写,当然价格较贵)和J-Link(仅支持在线烧写,需要仿真器+上位机配合)等,本篇就以最近比较火的Freescale M0+ Kinetis L系列为例详细介绍一下J-Link+J-Flash批量烧写串号的方案(说到此,不得不感叹J-Link的强大,高速的下载和调试,丰富的IDE支持和调试组件和强有力的调试功能,再加上……咳咳(大家都懂的),不是土豪人家是金啊,怎一个NB了得):
开发平台:Kinetis L系列KL15Z128
烧写工具:J-Link + J-Flash(v4.76f)
(1) 这里我就不单独对J-Flash多作介绍了,可以参考我之前的一篇文章《教你用J-Flash ARM工具单独烧写程序到Kinetis》,至于包括J-Flash在内的软件包可以直接到SEGGER官网下载http://www.segger.com/jlink-software.html,建议下载最新版的,支持的芯片系列较全,相应的组件功能也更强大;
(2) 打开J-Flash(路径为Start->All Programs->SEGGER->J-Link ARM V4.76f->J-Flash),在最新版本中会直接弹出选择已有工程选项卡,根据需要在路径"安装路径\SEGGER\JLinkARM_V476f\Samples\JFlash\ProjectFiles\Freescale”下选择自己的目标芯片(我这里选择MKL15Z128xxx4.jflash,木办法,手里只有这个),选择如下图:
(3) 点击“start J-Flash”进入工程管理界面,然后点击File->Open data file,找到需要下载的bin文件或者S19文件,将其加载到jflash工程里面,加载之后的界面如下图:
(4) 万事具备,接下来就开始进行烧写序列号的设置。点击“Options->Project Settings->Production”,选中“Program Serial Number”,设置如下:
(5) 点击“OK”,设置完毕(只设置一次即可),然后连接目标芯片“Target->Connect”,连接成功,点击“Auto”,系统会自动将设置好的序列号添加到s19文件相应的地址,然后启动下载,同时也会在Jflash的工程目录(之前加载的sample prject的目录)下生成一个“_Serial.txt”,内容如下图,其中“12345679”为下次要写入的数据,系统自动为其加1了(由“Increment”决定):
(6) 我们回读烧写到片子中的数据(Target->Read Back->Entire chip),然后跳转到“0x2000”地址,可以看到序列号(12345678的十六进制)已经写入,如下图:
注意事项:
(1) 在烧写的时候,必须点击“Auto”下载,这样才会生成“_Serial.txt”文件,且会把序列号自动添加到s19文件然后烧进去,直接点击“Program”或者“Program&Verify”等烧写功能只会烧写原始S19文件,不会添加序列号;
(2) J-Flash烧写序列号最多支持4个字节,高于四个字节的数据J-Flash会将前四个字节取反再烧进去,所以实际上起作用的还是4个字节,不过单纯作为序列号的话肯定是足够了,4个字节32个比特位,IPv4的地址也就这些吧,呵呵,想不到会有什么产品会超过这个范围,那样的话Freescale超越当年的Motorola也不是问题了啊,哈哈;
(3) 关于烧写地址的问题,理论上只要在目标芯片的Code Flash地址范围内并且不与原始运行代码地址重叠即可,因为J-Flash烧写的原理是先添加数据到原始bin或者S19文件相应的位置然后整个文件一块烧写进去,所以写序列号的时候不需要额外的再擦写扇区一次也就是不会破坏同在一个扇区的原始数据,不过当然如果flash空间足够大的话不建议将序列号烧写地址挨着原始代码太近,建议将序列号写到Flash的最后,规避风险;
(4) 实际上采用J-Flash也可以烧写多余4个字节的数据,不过这需要手动添加编辑txt文件,这里就不多说了,可以参考附件中文档。
最近忙的不可开交,抽空终于把这篇文档完成了,不容易啊不容易,下次再聊,未完待续~
附件UM08003_JFlashARM.pdfhttp://www.eeskill.com/file/id/26151。
jicheng0622的博客。