mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-23 12:58:00 +00:00
ChibiOS 2.6.8, until I can figure out where to get it from git.
This commit is contained in:
141
firmware/chibios/demos/ARMCM0P-LPC812-LPCXPRESSO/lpc8xx_isp.py
Executable file
141
firmware/chibios/demos/ARMCM0P-LPC812-LPCXPRESSO/lpc8xx_isp.py
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env python
|
||||
import serial
|
||||
import array
|
||||
|
||||
#=========================================================
|
||||
PORT = '/dev/ttyUSB1'
|
||||
FILE = 'build/ch.bin'
|
||||
|
||||
RAM_ADDR = 0x10000300
|
||||
PAGE_SIZE = 0x40
|
||||
SECTOR_SIZE = 0x400
|
||||
FLASH_SIZE = 0x4000
|
||||
|
||||
#=========================================================
|
||||
ser = serial.Serial( PORT, 115200, timeout=1)
|
||||
|
||||
data = array.array('B')
|
||||
f = file( FILE, 'rb')
|
||||
try:
|
||||
data.fromfile(f, FLASH_SIZE)
|
||||
except:
|
||||
pass
|
||||
f.close()
|
||||
|
||||
## pad out to next whole page
|
||||
data.fromstring( chr(0xff)*(PAGE_SIZE - (data.buffer_info()[1]%PAGE_SIZE)) )
|
||||
|
||||
#=========================================================
|
||||
## fix-up LPC boot checksum
|
||||
csum = 0;
|
||||
for i in range(7):
|
||||
csum = csum + \
|
||||
(data[(i*4)] ) + \
|
||||
(data[(i*4)+1]<<8 ) + \
|
||||
(data[(i*4)+2]<<16) + \
|
||||
(data[(i*4)+3]<<24); \
|
||||
|
||||
csum = -csum
|
||||
data[28] = csum & 0xff
|
||||
data[29] = csum>>8 & 0xff
|
||||
data[30] = csum>>16 & 0xff
|
||||
data[31] = csum>>24 & 0xff
|
||||
|
||||
#=========================================================
|
||||
##
|
||||
ser.write('?')
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> 'Synchronized':
|
||||
print 'No Response "?"'
|
||||
exit(1)
|
||||
|
||||
ser.write('Synchronized\r\n')
|
||||
resp = ser.readline()
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> 'OK':
|
||||
print 'Not Synchronized'
|
||||
exit(1)
|
||||
|
||||
ser.write('12000\r\n')
|
||||
resp = ser.readline()
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> 'OK':
|
||||
print 'No Response "12000"'
|
||||
exit(1)
|
||||
|
||||
ser.write('A 0\r\n')
|
||||
resp = ser.readline()
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "A"', resp
|
||||
exit(1)
|
||||
|
||||
ser.write('J\r\n')
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "J"', resp
|
||||
exit(1)
|
||||
resp = ser.readline()
|
||||
print 'Device ID: ', hex(int(resp))
|
||||
|
||||
ser.write('U 23130\r\n')
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "U"', resp
|
||||
exit(1)
|
||||
|
||||
|
||||
## Erase whole device
|
||||
ser.write('P 0 7\r\n')
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "P"', resp
|
||||
exit(1)
|
||||
|
||||
ser.write('E 0 7\r\n')
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "P"', resp
|
||||
exit(1)
|
||||
|
||||
|
||||
#=========================================================
|
||||
address = 0
|
||||
|
||||
while data.buffer_info()[1]:
|
||||
|
||||
ser.write( "W %d %d\r\n"%(RAM_ADDR, PAGE_SIZE) )
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "W"', resp
|
||||
exit(1)
|
||||
|
||||
for i in range(PAGE_SIZE):
|
||||
ser.write( chr(data.pop(0)) )
|
||||
|
||||
#print('P %x %x\r\n'%( address/SECTOR_SIZE, address/SECTOR_SIZE ))
|
||||
#print('C %x %x 0xff\r\n'%( address, RAM_ADDR ))
|
||||
|
||||
## Program page
|
||||
ser.write('P %d %d\r\n'%( address/SECTOR_SIZE, address/SECTOR_SIZE ))
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "P"', resp
|
||||
exit(1)
|
||||
|
||||
ser.write( 'C %d %d %d\r\n'%(address, RAM_ADDR, PAGE_SIZE) )
|
||||
resp = ser.readline()
|
||||
if resp.strip() <> '0':
|
||||
print 'Error Response "C"', resp
|
||||
exit(1)
|
||||
|
||||
print '.',
|
||||
address = address + PAGE_SIZE
|
||||
if (address%SECTOR_SIZE) == 0:
|
||||
print ''
|
||||
|
||||
#=========================================================
|
||||
#=========================================================
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user