diff --git a/tw88xx.py b/tw88xx.py index dd707a6..5d53392 100644 --- a/tw88xx.py +++ b/tw88xx.py @@ -20,6 +20,10 @@ class TW88xx: SPI_FLASH_BUSY_CONTROL = 0X4D9 DMA_LENGTH_HIGH_BYTE = 0X4DA + LUT_ACCESS_CTRL = 0x410 + LUT_ADDR = 0x411 + LUT_DATA = 0x412 + def __init__(self, i2c: I2CInterface) -> None: self.i2c = i2c self.page = None @@ -84,7 +88,7 @@ class TW88xx: self.write_reg(TW88xx.Reg.DMA_LENGTH_LOW_BYTE, read_len) self.write_reg(TW88xx.Reg.DMA_LENGTH_HIGH_BYTE, 0) - + def do_flash_cmd(self, cmd, read_len): for i in range(len(cmd)): self.write_reg(TW88xx.Reg.DMA_COMMAND_BUFFER + i, cmd[i]) @@ -98,9 +102,23 @@ class TW88xx: data = [] for i in range(read_len): data.append(self.read_reg(TW88xx.Reg.DMA_READWRITE_BUFFER + i)) - return bytes(data) - + return bytes(data) + def dump_regs(self): for r in self.REGS: val = self.read_reg(r) - print(f'{r:03x} = {val:02x} ({self.REGS[r]})') \ No newline at end of file + print(f'{r:03x} = {val:02x} ({self.REGS[r]})') + + def dump_lut(self): + lut_ctrl = self.read_reg(TW88xx.Reg.LUT_ACCESS_CTRL) & 0xF0 + tbl = {} + for i in range(512): + data=[] + for b in range(4): + self.write_reg(TW88xx.Reg.LUT_ACCESS_CTRL, lut_ctrl | (8 if i>256 else 0) | b) + self.write_reg(TW88xx.Reg.LUT_ADDR, i & 0xFF) + _ = self.read_reg(TW88xx.Reg.LUT_DATA) + data.append(self.read_reg(TW88xx.Reg.LUT_DATA)) + print (f'{i:03x} = {bytes(data).hex()}') + tbl[i] = data + return tbl diff --git a/tw88xx_util.py b/tw88xx_util.py index a05e559..831b6a0 100644 --- a/tw88xx_util.py +++ b/tw88xx_util.py @@ -5,7 +5,7 @@ parser = argparse.ArgumentParser(description='TW88xx debug utility.') parser.add_argument('command', help='the command to execute', - choices=('dump_flash', 'get_id', 'dump_regs') + choices=('dump_flash', 'get_id', 'dump_regs', 'dump_lut') ) parser.add_argument('-f', '--flash_file', help='file to read from / write into' @@ -76,3 +76,10 @@ elif args.command == 'dump_flash': 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')