mbv: now with DDR! and a wozmon
We have access to 256 MiB of fresh DDR3. Isn't that great? prog.py is a bit opinionated for now: - tty is /dev/ttyUSB1 - writing programs to DDR
This commit is contained in:
57
mbv/prog.py
Normal file
57
mbv/prog.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import serial
|
||||
import struct
|
||||
import sys
|
||||
import time
|
||||
|
||||
offset = 0x80000000
|
||||
tty = '/dev/ttyUSB1'
|
||||
baud = 115200
|
||||
chunksize = 128
|
||||
|
||||
|
||||
def write(s, offset, dat):
|
||||
for i in range(0, len(dat), chunksize):
|
||||
chunk = dat[i: i + chunksize]
|
||||
cmd = struct.pack('<cII', b'c', offset + i, len(chunk))
|
||||
|
||||
print(f'Sending {len(chunk)} bytes @0x{offset + i:04x}')
|
||||
|
||||
s.write(cmd)
|
||||
s.write(chunk)
|
||||
|
||||
ack = s.read(2)
|
||||
if len(ack) < 2:
|
||||
raise RuntimeError(f'timeout waiting for full ack. got {ack}')
|
||||
if ack[0] != b'a'[0]:
|
||||
raise RuntimeError(f'expected ack, got this instead: {ack}')
|
||||
print(f'Ack! len={ack[1]}')
|
||||
|
||||
|
||||
def jump(s, offset):
|
||||
cmd = struct.pack('<cI', b'j', offset)
|
||||
s.write(cmd)
|
||||
|
||||
|
||||
def main():
|
||||
binfile = sys.argv[1]
|
||||
with open(binfile, 'rb') as f:
|
||||
dat = f.read()
|
||||
|
||||
s = serial.Serial(tty, baud, timeout=1)
|
||||
write(s, offset, dat)
|
||||
jump(s, offset)
|
||||
last_dat = time.time()
|
||||
|
||||
while True:
|
||||
dat = s.read()
|
||||
if not dat:
|
||||
if time.time() - last_dat > 1.0:
|
||||
print('Data timeout')
|
||||
break
|
||||
continue
|
||||
last_dat = time.time()
|
||||
sys.stdout.buffer.write(dat)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user