源出处:佐格微系统网站 作者:FFT
在我们做的一些仪表中,不可避免的要用到精度校准.如,
* 热量表的温度系数标定;
* 流量表的正负误差值标定;
* 各种传感器的温度补偿系数标定;
* RF系统中调谐参数的标定
因为上述的这些参数都不是固定的,而是根据PCB以及外部传感器,设备连接关系等来做进一步的精度调节的,这样就有必要在产品成型后做一个参数标定.
那么这些标定值是如何设置进我们的MSP中(因为F系列的MSP430芯片内部是FLASH的,可重复编程,这样就不需要像普通51那样外扩EEPROM了)以及存放的区域都成为我们此次探讨的重点.
1,存放这些标定系数的区域
在MSP430中,我们可以将这些标定系数存放在INFOMATION FLASH中,这个区域分128*2总计256字节的信息存储空间,而且也是统一编址的.擦写可以分两块小区域---128字节一个区域来操作,而不用整个扇区的擦除后再写入.
另一个办法就是针对标定数据量大的应用:直接在MSP430程序空间中开一块512字节的常规FLASH扇区用做数据标定,这个标定前一定要对整个扇区的512字节做擦除操作.
还有一类非常特殊的应用,就是把标定参数放在RAM中,这些在下一次上电后就不存在了,这些标定数据是由程序根据某些外部输入来定义的暂时值.
上述的三种标定的存储方式比较常规
2,如何进行标定
A 首先想到的是用FET进行每块产品的代码重入,呵呵,这个最简单,但是要每次编译原代码,安全系数受误操作影响大,还有就是不容易控制代码扩散.
B 通过BSL来进行标定,这个相对来说安全点,因为给的目标文件已经是HEX码,原代码得到安全的保护(不过解密仍然能通过HEX生成ASM)不过比较烦琐的操作可以分为两种,一种是直接修改HEX码里某处数据,以达到标定目的,当然,这个操作可以通过PC软件事先计算好,定位好.另一种方式就是将测试程序写到MCU中,生成一组标定数据到INFO FLASH中,然后再次烧进去成熟的程序,这样通过测试程序和正常程序分离标定的方法在计量仪表中使用比较方便.
C 通过串口进行标定.这个操作需要MCU程序支持,首先把存放标定数据的空间定义好,然后直接从串口接收标定命令/数据,然后写入到标定区域,这样的做法实际上最灵活最安全,因为所有的代码都是不可见的,可以有效防止攻击和代码扩散.但是,有一个缺点,就是要损耗一个UART作为标定用,也就是说,在那些没有UART的MSP430中,使用软件模拟等都增加了这种方式标定的执行难度
D 特殊场合特殊的标定:如果不仅仅要标定,而且还有可能修改程序中已经过时的算法,而且这些设备有可能无法取回或者为了节约差旅成本不人工取回.这样就要考虑远程升级-----通过GPRS/CDMA/ISM RF等等
呵呵,上述是我们ZOLAB关于参数标定的一些制造经验,可能还有一些更好的办法,但是由于行业限制,我们也无法去一一验证,欢迎各位多提建议