3 """convert .v to Cypress EZ-USB EEPROM"""
10 def write_hdr(fout, prefix, in_name, in_base):
11 fout.write('// ' + prefix + ' autogenerated by v2ezusb.py\n')
12 fout.write('// Source file: ' + in_name + '\n')
13 fout.write('static const char ' + prefix + '_src[] = "' + in_base + '";\n')
14 tm = time.localtime(os.path.getmtime(in_name))
15 tm_str = '%d-%02d-%02d %d:%02d:%02d' % (tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec)
16 fout.write('// Source time: ' + tm_str + '\n')
17 fout.write('static const char ' + prefix + '_time[] = "' + tm_str + '";\n\n')
19 def write_data(fout, prefix, data):
21 line = 'enum { ' + prefix + '_length = %d };\n' % length
22 line += 'static const uint8_t ' + prefix + '_data[' + prefix + '_length] = {'
23 for i in range(length):
30 line += '0x%02x' % data[i]
36 if (len(sys.argv) < 4) or (len(sys.argv) > 5):
37 print 'usage: ./v2ezusb <input> <output> <cfg_hex> [<prefix>]'
40 cfg_byte = int(sys.argv[3], 0x10)
42 assert(cfg_byte < 0x100)
45 print 'USB FS (12Mb),',
47 print 'USB HS (480Mb),',
49 print 'DisConnected,',
56 assert((cfg_byte & ~0xC1) == 0)
58 fin_name = sys.argv[1]
59 if not os.path.isfile(fin_name):
60 print 'not a file:', fin_name
61 fin_base = os.path.basename(fin_name)
62 if fin_base.endswith('.v'):
63 fin_base = fin_base[:-2]
65 fin = open(fin_name, 'r')
66 sections = v_file_load(fin)
70 return [ (value & 0xFF), (value >> 8) ]
73 return [ (value >> 8), (value & 0xFF) ]
80 data = [ 0xC2 ] # Header
84 data += [ cfg_byte ] # Configuration byte
88 sec_length = sec.len()
89 print 'sec addr:', hex(sec_addr), 'len:', sec_length
90 assert(sec_length > 0)
98 print '> addr:', hex(addr), 'len:', length
99 # validate EZ-USB limits
100 assert(addr < 0x4000) # 14-bit address
101 assert(length < 1024) # 10-bit length
102 data += data_HL(length)
103 data += data_HL(addr)
104 for i in range(length):
105 data.append(int(sec.data[offset + i], 0x10))
110 data += data_HL(0x8001) # len=1, last record
111 data += data_HL(0xE600) # CPUCS
112 data += [ 0x00 ] # clear CPU reset
114 print 'eeprom len:', len(data)
116 fout_name = sys.argv[2]
117 print 'file:', fout_name
118 fout = open(fout_name, 'w')
121 if len(sys.argv) > 4:
123 print 'prefix:', repr(prefix)
125 write_hdr(fout, prefix, fin_name, fin_base)
126 write_data(fout, prefix, data)