新闻中心搜索

新闻中心搜索

专家论道丨如何确保烧录数据的正确性和完整性?

新闻中心 140

:如何确保烧录数据的正确性和完整性?

烧录器最基本也是最重要的功能就是将数据(源文件)正确和完整地烧录到芯片当中。但如何理解所谓的“正确性和完整性”呢?一般认为最简单“粗暴”的方法就是将烧录后的数据回读出来,和源文件进行比较(校验),“一致”则认为是烧录过程是正确和完整的,“不一致”就认为是烧录器有问题。殊不知事情远没有那么简单,我们对“正确性和完整性”也不应该这样简单理解。

为了讨论这个问题,我们先厘清如下几个定义:

源文件、烧录文件和读取文件的定义

1.源文件

源文件一般由客户使用编译器生成,文件格式有HEX、BIN、S19、ocfg等。源文件的数据要烧录到芯片当中。

2.烧录文件

力捷丰OPTEEQ烧录器(以SG400为例)首先会通过配套的“烧录管理软件”将“源文件”转换成“烧录工程文件”(后缀.opj)。这个“烧录工程文件”是由后缀为.opd的“烧录文件”(bin文件形式)和后缀为.sct的“配置文件”组成。

3.读取文件

是指烧录完成后,通过烧录器读取芯片后生成的文件。

*下图有助于大家理解如上的三个文件的定义:

读取文件的内容与源文件或烧录文件不一致?

客户经常在烧录后对芯片内容进行读取并将读取内容与源文件进行比对来判断烧录内容是否正确。通常这种方式是有效的,但在有些情况下虽然烧录过程正确、完整,但读取文件的内容与源文件或烧录文件会不一致。

“源文件”与“烧录文件”不一致可能是由以下原因造成:

  • “源文件”由多个文件组成

有些时候,“源文件”是由多个文件组成的。OPTEEQ烧录管理软件在创建工程时会将多个源文件合并成一个“烧录文件”,合并过程中若文件内容有重叠(多个源文件中包含同一个地址)或有地址超出芯片可用地址范围的情况,可能会导致数据不一致。

  • 填充数据不一致

合并过程中会对一些区域数据(根据芯片手册的要求)用0x00或0xFF进行填充。在有些芯片对填充格式没有规定时,“源文件”和“烧录文件”可能因填充值不同导致不一致。

  • 存在不可逆场景

“源文件”转换为“烧录文件”的过程,存在有不可逆的场景,如虚地址、数据重叠、数据超出芯片范围等情况。

“烧录文件”与“读取文件”不一致可能由以下原因造成:

1.烧录过程中添加了动态数据(如序列号等);

2.芯片中存在特殊区域(如HSM区域);

3.芯片中存在特殊寄存器;

4.芯片完成烧录,在重新上电后,芯片就会自动运行刚刚烧进去的程序。这个程序很可能会修改存储单元中的数据,如果此时再去读芯片里的内容的话,读出来的内容就不一定和“烧录文件”一致了。

因此,尽管烧录过程没有任何问题,“源文件”、“烧录文件”和“读取文件”经常会出现不一致的现象。那么,如何验证烧录过程的“正确性和完整性”呢?

烧录校验一般有三种方式

Checksum & CRC校验

Checksum校验和CRC校验都是烧录后芯片自己把校验值计算出来放到固定的寄存器,烧录器去“抓取”这个校验值,然后和“烧录文件”的校验值对比,以此判定烧录的数据是否正确。这两种校验方式可靠性很高,错误率几乎为0。

*我们在工程中为了方便大家跟踪也加入了源文件的CRC值

回读校验

如果想保证数据完全一致,可以选择回读校验:在烧录过程中(而不是烧录完成后)把芯片存储单元内的数据读出然后和“烧录文件”中的数据逐个进行对比。我们认为采用这种方式的可靠性最高。但回读校验的缺点是整个烧录流程的耗时会延长很多。因为相对于“擦除”和“烧录”这两个步骤,“读取”这个操作是最慢的。

总结

最后再分享一下我们的经验:1.大部分客户都会选择Checksum校验或者CRC校验,因为一方面校验效率高,另一方面产线后面还有功能测试等环节来验证烧录完整性和正确性。2.在绝大多数情况下,客户反馈烧录不正确导致电路板功能不正常,最后排查下来,很多原因都指向“源文件”本身的问题(比如错用旧版的源文件,或者其它产品的源文件)。因此,使用MES系统等对源文件加强管控,可以有效避免此类误判的发生。

上一篇: 下一篇:

相关推荐