import argparse from tw88xx import TW88xx parser = argparse.ArgumentParser(description='TW88xx debug utility.') parser.add_argument('command', help='the command to execute', choices=('dump_flash', 'get_id', 'dump_regs', 'dump_lut') ) parser.add_argument('-f', '--flash_file', help='file to read from / write into' ) parser.add_argument('-i', '--interface', help='the i2c interface to use', choices=('devi2c', 'swd') ) parser.add_argument('-j', '--jlink', help='J-Link (serial) to use for SWD', default=None ) parser.add_argument('-b', '--bus', help='/dev/i2c bus number', type=int, default=1 ) parser.add_argument('-t', '--type', help='TX88xx type', choices=('tw8836',), default='tw8836' ) args = parser.parse_args() if args.interface == 'swd': from i2c_interfaces import JLinkSwdI2CInterface i2c = JLinkSwdI2CInterface(jlink_serial=args.jlink) elif args.interface == 'devi2c': from i2c_interfaces import DevI2CInterface i2c = DevI2CInterface(bus=args.bus) i2c.open() if args.type == 'tw8836': from tw8836 import TW8836 tw88xx = TW8836(i2c) if args.command == 'get_id': id = tw88xx.read_reg(0x000) print(f'{id:02x}') flash_id = tw88xx.execute_flash_cmd(cmd=[0x9f], read_len=3) print(flash_id.hex()) elif args.command == 'dump_flash': # tw88xx.prepare_flash_read(cmd=[0x03, 0x1a, 0x9d, 0x84], read_len=8) tw88xx.execute_flash_cmd(cmd=[0xE9], read_len=0) data = [] BS=4 tw88xx.prepare_flash_read(cmd_len = 4, read_len=BS) for block_start in range(0x1a9d84, 0x1a9d84+480*480, BS): # block = tw88xx.execute_flash_cmd(, data=[0x5a]*BS) cmd=[0x03, (block_start >> 16) & 0xFF, (block_start >> 8) & 0xFF, block_start & 0xFF] block = tw88xx.do_flash_cmd(cmd, read_len=BS) data.extend(block) print(f'{(block_start-0x1a9d84) / (480*480)*100:02.4f}% {block_start:06x}: {block.hex()}') print(bytes(data).hex()) with open(args.flash_file,'wb') as f: f.write(bytes(data)) # tw88xx.execute_flash_cmd(cmd=[0xB7], read_len=0) # block = tw88xx.execute_flash_cmd(cmd=[0x03, 0x00, 0x00, 0x00], read_len=8) # print(block.hex()) # block = tw88xx.execute_flash_cmd(cmd=[0x03, 0x00, 0x00, 0x08], read_len=8) # print(block.hex()) # tw88xx.execute_flash_cmd(cmd=[0xE9], read_len=0) elif args.command == 'dump_regs': tw88xx.dump_regs() elif args.command == 'dump_lut': tbl = tw88xx.dump_lut() if args.flash_file: with open(args.flash_file,'w') as f: for r in sorted(tbl): f.write(f'{r:03x}={bytes(tbl[r]).hex()}\n')