Skip to content

Commit

Permalink
new version 31.10.23
Browse files Browse the repository at this point in the history
  • Loading branch information
pvvx committed Apr 7, 2024
1 parent bf26f57 commit bf18cca
Showing 1 changed file with 134 additions and 26 deletions.
160 changes: 134 additions & 26 deletions TlsrPgm.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

__progname__ = 'TLSR82xx TlsrPgm'
__filename__ = 'TlsrPgm'
__version__ = '27.04.21'
__version__ = '31.10.23'

DEFAULT_UART_BAUD = 230400

Expand Down Expand Up @@ -410,23 +410,41 @@ def Activate(self, tms):
def ReadFlashStatus(self):
data = self.command(struct.pack('<BBH', self.CMD_FLASH_GET_STATUS, 0, 0), 7)
if data == None or self.wcnt != 1:
print('\rError get Flash status! (%d)' % self.err)
print('\rError get Flash Status! (%d)' % self.err)
return None
#print('Flash status 0x%02x' % data[4])
print('Flash Status Register: 0x%02x' % data[4])
return data[4]
# Waiting for Flash to be ready
def WaitingFlashReady(self, count = 300):
while count > 0:
data = self.command(struct.pack('<BBH', self.CMD_FLASH_GET_STATUS, 0, 0), 7)
if data == None or self.wcnt != 1:
print('\rError get Flash status! (%d)' % self.err)
print('\rError get Flash Status! (%d)' % self.err)
return False
if (data[4] & 0x01) == 0:
#print('Flash status 0x%02x, cnt %d' % (data[4], count))
return True
count -= 1
print('\rTimeout! Flash status 0x%02x!' % data[4])
print('\rTimeout! Flash Status 0x%02x!' % data[4])
return False
# Write Flash Status
def WriteFlashStatus(self, fstatus = 0):
data = self.command(struct.pack('<BBHHB', self.CMD_FLASH_WRRD, 0, 0, 0, 6), 6)
if data == None:
print('\rError Write Flash Status! (%d)' % self.err)
return None
data = self.command(struct.pack('<BBHHBB', self.CMD_FLASH_WRRD, 0, 0, 0, 1, fstatus&0xff), 6)
if data == None:
print('\rError Write Flash Status! (%d)' % self.err)
return None
if not self.WaitingFlashReady(5):
return None
#data = self.command(struct.pack('<BBHHB', self.CMD_FLASH_WRRD, 0, 0, 1, 5), 7)
#if data == None:
# print('\rError get Flash Status! (%d)' % self.err)
# return None
#print('Flash Status Register 0x%02x' % data[4])
return True
# CPcpu Ext. Chip
def ReadPCcpu(self):
rdsize = 0x4
Expand Down Expand Up @@ -693,7 +711,7 @@ def EraseAllFlash(self):
if data == None:
print('\rError Erase All Flash! (%d)' % self.err)
return False
return self.WaitingFlashReady(1000)
return self.WaitingFlashReady(3000)
# Write Blocks Flash from stream
def WriteBlockFlash(self, stream, offset = 0, size = 0, erase = True):
wrsize = 0x100
Expand Down Expand Up @@ -777,15 +795,18 @@ def EnableClkALGM(self):
return False
return True
# Test
def TestDebugPC(self, count = 1, offset = 0x6bc):
if count < 1:
count = 1
def TestDebugPC(self, ttime = 1, offset = 0x6bc):
if ttime < 1:
ttime = 1
flgsleep = False
flgrun = False
i = 0
print('Read register addres 0x%06x:' % offset)
wblk = struct.pack('<BBHH', self.CMD_SWIRE_READ, offset & 0xff, (offset>>8) & 0xffff, 4)
t1 = time.time()
while i < count:
t2 = t1
te = t1 + ttime
while t2 < te:
self.write(crc_blk(wblk))
rblk = self.read(6)
t2 = time.time()
Expand All @@ -794,19 +815,16 @@ def TestDebugPC(self, count = 1, offset = 0x6bc):
return False
self.err = rblk[1];
self.wcnt = rblk[2] | (rblk[3]<<8)
data = None
if self.wcnt == 4 and self.err == 0:
rblk += self.read(4)
if crc_chk(rblk):
if flgsleep:
t1 = t2
print()
self.ext_pc = struct.unpack('<I', rblk[4:8])
print('\rCPU PC=0x%08x' % self.ext_pc, end = '')
if count != 1 or i != 0:
self.ext_reg = struct.unpack('<I', rblk[4:8])
print('\r0x%08x' % self.ext_reg, end = '')
if flgrun:
print(' (%.3f)' % (t2-t1), end = '')
#if flgsleep:
# return True
flgsleep = False
flgrun = True
else:
Expand All @@ -815,16 +833,59 @@ def TestDebugPC(self, count = 1, offset = 0x6bc):
else:
if flgrun:
print()
print('\rCPU sleep? ', end = '')
if count != 1 or i != 0:
print(' (%.3f sec)' % (t2-t1), end = '')
print('\rCPU sleep? (%.3f sec)' % (t2-t1), end = '')
if not flgsleep:
t1 = t2
flgsleep = True
flgrun = False
i += 1
print()
return True
# Wait CPU run
def WaitCPU(self, twait_sec = 1, offset = 0x6bc):
if twait_sec < 1:
twait_sec = 1
flgsleep = False
wblk = struct.pack('<BBHH', self.CMD_SWIRE_READ, offset & 0xff, (offset>>8) & 0xffff, 4)
t1 = time.time()
t2 = t1
te = t1 + twait_sec
while t2 < te:
self.write(crc_blk(wblk))
rblk = self.read(6)
t2 = time.time()
if rblk == None or len(rblk) < 6 or rblk[0] != wblk[0]:
print('\r\nError Read response!')
return False
self.err = rblk[1];
self.wcnt = rblk[2] | (rblk[3]<<8)
if self.wcnt == 4 and self.err == 0:
rblk += self.read(4)
if crc_chk(rblk):
if flgsleep:
t1 = t2
print()
self.ext_pc = struct.unpack('<I', rblk[4:8])
print('\rCPU PC=0x%08x' % self.ext_pc)
return True
else:
print('\r\nError Read response!')
return False
else:
print('\rCPU sleep? (%.3f sec)' % (t2-t1), end = '')
if not flgsleep:
t1 = t2
flgsleep = True
print()
return False
def FlashUnlock(self):
print('Write 0 to Flash Status Register...')
if self.WriteFlashStatus(0) == None:
return None
ret = self.ReadFlashStatus()
if ret == None or ret != 0:
print('\r\nError unlock Flash!')
return None
return ret
#=============================
# main()
#=============================
Expand Down Expand Up @@ -861,6 +922,11 @@ def main():
help='Activation Time ms (0-off, default: 0 ms)',
type=arg_auto_int,
default = 0)
parser.add_argument(
'-z', '--zw',
help='Wait Start CPU (default: 0 sec) (before main processing)',
type=arg_auto_int,
default = 0)
parser.add_argument(
'-s', '--stopcpu',
help='CPU Stop (before main processing)',
Expand Down Expand Up @@ -921,6 +987,13 @@ def main():
parser_erase_all_flash = subparsers.add_parser(
'ea',
help='Erase All Flash')
parser_read_fstatus = subparsers.add_parser(
'fsr',
help='Read Flash Status Register')
parser_write_fstatus = subparsers.add_parser(
'fsw',
help='Write Flash Status Register')
parser_write_fstatus.add_argument('fsreg', help='Register Value (byte)', type=arg_auto_int)

parser_read_flash = subparsers.add_parser(
'rs',
Expand All @@ -929,6 +1002,12 @@ def main():
parser_read_flash.add_argument('size', help='Size of region', type=arg_auto_int)
parser_read_flash.add_argument('filename', help='Name of binary file')

parser_write_flash = subparsers.add_parser(
'ws',
help='Write file to Swire addres')
parser_write_flash.add_argument('address', help='Start address', type=arg_auto_int)
parser_write_flash.add_argument('filename', help='Name of binary file')

parser_read_flash = subparsers.add_parser(
'ra',
help='Read Analog Registers to binary file')
Expand Down Expand Up @@ -961,8 +1040,9 @@ def main():
parser_read_flash.add_argument('size', help='Size of region', type=arg_auto_int)
parser_read_flash = subparsers.add_parser(
'dc',
help='Chow PC')
parser_read_flash.add_argument('count', help='cycle count', type=arg_auto_int)
help='Show uit32 register or SRAM addres')
parser_read_flash.add_argument('address', help='address (PC - 0x6bc)', type=arg_auto_int)
parser_read_flash.add_argument('time', help='time (sec)', type=arg_auto_int)

args = parser.parse_args()
print('=======================================================')
Expand All @@ -987,8 +1067,12 @@ def main():
if args.baud != DEFAULT_UART_BAUD:
if not pgm.SetUartBaud(args.baud):
sys.exit(1)
if args.trst > 0 or args.act != 0 or args.stopcpu or args.cpustall:
if args.trst > 0 or args.act != 0 or args.stopcpu or args.cpustall or args.zw:
print('=== PreProcess ========================================')
if args.zw: # Wait CPU run
if not pgm.WaitCPU(args.zw):
pgm.close()
sys.exit(1)
if args.trst > 0: # Hard reset (Pin RST set '0')?
if args.trst < 5: # min 5 ms
args.trst = 5
Expand Down Expand Up @@ -1097,6 +1181,9 @@ def main():
print('Write Swire register 0x%08x to 0x%08x...' % (offset, offset + size))
ret = pgm.WriteBlockRegs(stream, offset, size)
elif args.operation == 'wf' or args.operation == 'we':
if pgm.FlashUnlock() == None:
pgm.close()
sys.exit(1)
print('Write Flash data 0x%08x to 0x%08x...' % (offset, offset + size))
ret = pgm.WriteBlockFlash(stream, offset, size, bool(args.operation == 'we'))
elif args.operation == 'wa':
Expand All @@ -1112,6 +1199,9 @@ def main():
pgm.close()
sys.exit(1)
elif args.operation == 'es':
if pgm.FlashUnlock() == None:
pgm.close()
sys.exit(1)
count = int((args.size + FLASH_SECTOR_SIZE - 1) / FLASH_SECTOR_SIZE)
size = (count * FLASH_SECTOR_SIZE)
offset = args.address & (0xffffff^(FLASH_SECTOR_SIZE-1))
Expand All @@ -1120,14 +1210,34 @@ def main():
pgm.close()
sys.exit(1)
elif args.operation == 'ea':
if pgm.FlashUnlock() == None:
pgm.close()
sys.exit(1)
print('Erase All Flash ...')
if not pgm.EraseAllFlash():
pgm.close()
sys.exit(1)
elif args.operation == 'fsr':
print('Read Flash Status Register...')
ret = pgm.ReadFlashStatus()
if ret == None:
pgm.close()
sys.exit(1)
elif args.operation == 'fsw':
print('Write 0x%02x to Flash Status Register...' % args.fsreg)
ret = pgm.WriteFlashStatus(args.fsreg)
if ret == None:
pgm.close()
sys.exit(1)
ret = pgm.ReadFlashStatus()
if ret == None:
pgm.close()
sys.exit(1)
elif args.operation == 'i':
if not pgm.ReadChipID() \
or not pgm.ReadPCcpu() \
or not pgm.ReadFlashJEDECID() \
or pgm.ReadFlashStatus() == None \
or not pgm.DumpChipFlashUID() \
or not pgm.DumpChipFlash() \
or not pgm.DumpChipARegs() \
Expand All @@ -1152,15 +1262,13 @@ def main():
# pgm.close()
# sys.exit(1)
#print('ok')
if not pgm.TestDebugPC(args.count):
if not pgm.TestDebugPC(args.time, args.address):
pgm.close()
sys.exit(1)
else:
print('No action assigned.')
if args.run or args.go or args.mrst:
print('=== Post-Process ======================================')
if args.operation != 'dc':
pgm.TestDebugPC()
# Commands / flags post main processing
if args.run:
print('CPU Run...', end = ' ')
Expand Down

0 comments on commit bf18cca

Please sign in to comment.