Hex文件CRC运算终极规则(版本V1.1):
本规则为为文件名和工作区域规则两个部分。
1.文件名规则:
filename(filelength16,filelength10,filldata16)
即:
文件名 (文件长度16进制,文件长度10进制,16进制数填充值,默认FF)
其中:
文件名是打开文件系统选择一个文件后自动给出的文件名。
目前版本filelength<0x10000,即64KB范围。
特别注意:
非IE浏览器打开的文件名路径名称可能不是真的文件路径。
文件长度用16进制和10进制两种格式给出,16进制以“0x”或“0X”开始。
填充值默认为FF,即熔丝未烧断。
特别注意:它被填写到“文件名编辑框”内,即原来“密文编辑框”的位置。
2.工作区域规则:
$worktop1-workbottom1,worktop2-workbottom2,checksum,address,crcnum;//text
即:
$工作区域1,工作区域2,校验和及定位地址,CRC运算区域号
其中:worktop1<=workbottom1<=work2top<=workbottom2<filelength
checksum是期望的CRC校验和,即CRC明文碰撞需要的CRC校验和,它在crcnum非0时有效。
例如当crcnum=1是,表示工作区域1被CRC保护,工作区域2为CRC明文碰撞区域。
假如没有发生碰撞,则工作区域2内的数据不会发生变化。
address是CRC运算结果的写入Hex文件的定位地址。
当checksum被省略时,表示将系统CRC运算的结果填入address开始的区域。
当有checksum时,不管系统CRC运算的结果如何,都会用checksum填入address开始的区域。
crcnum=0,同时运算两个工作区域里的CRC,即使两个工作区域不连续。
crcnum=1,表示工作区域1是受CRC保护的,工作区域2为CRC碰撞区域,是会被改写的。
crcnum=2,表示工作区域2是受CRC保护的,工作区域1为CRC碰撞区域,是会被改写的。
crcnum=3,表示工作区域1和工作区域2同时受到保护,CRC碰撞区域在两个工作区域之间,碰撞区域在工作区域1的后面。
crcnum=4,表示工作区域1和工作区域2同时受到保护,CRC碰撞区域在两个工作区域之间,碰撞区域在工作区域2的前面。
特别注意:
CRC运算的范围为worktop1-workbottom2。
CRC碰撞区域由crcnum决定。
工作区域规则以美元$开始,可以有多行即多个以$开始的不同工作区域规则组成,每个工作区域是独立的。
工作区域1和工作区域2必须成对,不能省略。
校验和及定位地址可以省略。
其中:
每个工作区域由top和bottom组成,即头尾组成,并用“-”分割。
校验和与定位地址用“-”分割。
特别注意:
工作区域规则需要手工填写到主编辑框内。
打开Hex文件后,系统自动生成一条默认工作区域规则。
$0,filesize16;//整个Hex文件进行CRC运算
其中:filesize16=filelength-1。
校验和及定位地址被省略,即结果不会被存储在Hex文件里,而是在“结果编辑框”里。
worktop1<=workbottom1<=worktop2<=workbottom2<filelength
当workbottom1==worktop2时,实际上是一个工作区域。
故规则可以简写为:
$worktop1,workbottom2;checksum-address
或:
$worktop,workbottom;checksum-address
例如系统默认生成的规则:
$0,filesize16
规则结尾可以写注解text,与C语言单行注解用法相同
例如:
CRC16
filelength=0x10000
规则(允许大小写字母混用,10进制和16进制混用,可以不要但需要留位置):
$0,15,,0x0010
$0x100-0x10f,0x110-0x111,0x5555,,1
$0x80-0x81,0x82-0xFF,0xAAAA,,2
$0x2000,0x3ffd,,0x3Ffe
特别注意:
hex文件只能由程序区,数据区,垃圾区三部分组成。垃圾区就是程序区和数据区以外的区域。
在烧写芯片时,熔丝烧断即编程为0,熔丝不能再接上为1,即熔丝不能二次编程。
熔丝不烧断为1,可以再次烧断,即可以二次编程熔丝不烧断为1,可以再次烧断,即可以二次编程.
为了延长芯片寿命和擦出次数,故应该默认填充为FF。
"编程"两字是指用烧写器烧写芯片的过程。
菜农HotPower@163.com 2018.3.30于西安雁塔菜地
http://www.hotpage.com.cn/hotcrc/
|