#!/usr/bin/env python3
# ported from /home/ff/eecs151/tools-151/bin/coe_to_serial
import os
import serial
import sys
import time
# Windows
if os.name == 'nt':
ser = serial.Serial()
ser.baudrate = 115200
ser.port = 'COM11' # CHANGE THIS COM PORT
ser.open()
else:
ser = serial.Serial('/dev/ttyUSB0')
ser.baudrate = 115200
if len(sys.argv) != 3:
print("Usage: hex_to_serial <hex file> <base address>\nExample: hex_to_serial echo.hex 30000000")
sys.exit(1)
#input("Open a serial program in another terminal, then hit Enter")
addr = int(sys.argv[2], 16);
with open(sys.argv[1], "r") as f:
program = f.readlines()
if ('@' in program[0]):
program = program[1:] # remove first line '@0'
program = [inst.rstrip() for inst in program]
size = len(program)*4 # in bytes
# write a newline to clear any input tokens before entering the command
command = "\n\rfile {:08x} {:d} ".format(addr, size)
print("Sending command: {}".format(command))
for char in command:
ser.write(bytearray([ord(char)]))
time.sleep(0.01)
for inst_num, inst in enumerate(program):
for char in inst:
ser.write(bytearray([ord(char)]))
time.sleep(0.001)
time.sleep(0.001)
if (inst_num == len(program)-1):
print("Sent {:d}/{:d} bytes".format(4+inst_num*4, size), end='\n')
else:
print("Sent {:d}/{:d} bytes".format(4+inst_num*4, size), end='\r')
print("Done")