14 CRC32: Ethernet (Poly 0x04C11DB7)
17 0x00005700: Any version
18 0x00005731: NAND 1MB data partition
19 0x00005732: Normal version
39 0x00000002: Secure BootROM
47 CRC32_INIT
= 0xFFFFFFFF
49 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
50 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
51 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
52 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
53 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
54 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
55 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
56 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
57 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
58 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
59 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
60 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
61 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
62 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
63 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
64 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
65 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
66 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
67 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
68 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
69 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
70 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
71 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
72 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
73 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
74 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
75 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
76 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
77 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
78 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
79 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
80 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
81 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
82 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
83 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
84 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
85 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
86 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
87 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
88 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
89 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
90 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
91 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
92 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
93 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
94 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
95 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
96 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
97 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
98 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
99 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
100 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
101 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
102 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
103 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
104 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
105 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
106 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
107 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
108 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
109 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
110 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
111 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
112 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
118 def crc32(bytes
, size
, crc
):
121 crc
= (crc
>> 8) ^ CRC32_TABLE
[(crc ^ bytes
[i
]) & 0xff]
125 def create_tag(args
, in_bytes
, size
):
126 crc
= crc32(in_bytes
, size
, CRC32_INIT
)
127 tag
= struct
.pack('>IIIII', crc
, args
.tag_version
, args
.chip_id
, args
.flash_type
, args
.flags
)
130 def create_output(args
):
131 in_st
= os
.stat(args
.input_file
)
132 in_size
= in_st
.st_size
134 in_f
= open(args
.input_file
, 'r+b')
135 in_bytes
= in_f
.read(in_size
)
138 tag
= create_tag(args
, in_bytes
, in_size
)
140 out_f
= open(args
.output_file
, 'w+b')
141 out_f
.write(in_bytes
)
148 parser
= argparse
.ArgumentParser(description
='')
150 parser
.add_argument('--input-file',
156 parser
.add_argument('--output-file',
162 parser
.add_argument('--version',
166 help='WFI Tag Version')
168 parser
.add_argument('--chip-id',
174 parser
.add_argument('--flash-type',
178 help='WFI Flash Type')
180 parser
.add_argument('--flags',
186 args
= parser
.parse_args()
191 if ((not args
.input_file
) or
192 (not args
.output_file
) or
193 (not args
.tag_version
) or
194 (not args
.chip_id
) or
195 (not args
.flash_type
)):