upload.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import sys
  2. from serial import Serial
  3. if len(sys.argv) < 3:
  4. print ('upload.py <serial port> <file>')
  5. print ('Example:')
  6. print ('python3 ./upload.py /dev/ttyACM1 ./EncryptedFirmware.bin')
  7. exit()
  8. serialPort = sys.argv[1]
  9. srcFile = sys.argv[2]
  10. ser = Serial(serialPort, 115200)
  11. print ('Starting...')
  12. # Erasig Chip
  13. ser.write(b'e')
  14. rx = ser.read(1)
  15. if rx == b'?':
  16. # Confirm Erasig Chip
  17. ser.write(b'y')
  18. print ('Erasig Chip')
  19. rx = ser.read(1)
  20. if rx == b'$':
  21. print ('Chip Erased')
  22. else:
  23. print ('ERROR 1')
  24. exit()
  25. #ser.write(b'u') # Ordinary uploading
  26. ser.write(b'c') # Encrypted uploading
  27. rx = ser.read(1)
  28. if rx == b'>':
  29. print ('Uploading')
  30. counter = 0
  31. with open(srcFile, "rb") as f:
  32. while True:
  33. chunk = f.read(16)
  34. if not chunk:
  35. break
  36. ser.write(chunk)
  37. rx = ser.read(1)
  38. counter += 1
  39. print(f"Packet: {counter}")
  40. if rx != b'\x7f':
  41. print('ERROR 2')
  42. exit()
  43. rx = ser.read(1)
  44. if rx == b'$':
  45. # Run App
  46. ser.write(b'r')
  47. print('Done')
  48. else:
  49. print('ERROR 3')
  50. ser.close()