Skip to content

Commit

Permalink
lxterm: Don't attempt to recover from CRC errors during upload.
Browse files Browse the repository at this point in the history
This allows transfers to proceed at the full speed of the serial link.
We still check all responses, but will now fail outright if a CRC error
occurs.
  • Loading branch information
David Lattimore committed Dec 3, 2020
1 parent 8eecbd7 commit 513a799
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions litex/tools/litex_term.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,19 @@ def send_frame(self, frame):
retry = 0
return 1

def receive_upload_response(self):
# If we're not doing CRC checking, then there's no response to read.
if self.no_crc:
return
reply = self.port.read()
if reply == sfl_ack_success:
return
elif reply == sfl_ack_crcerror:
print("[LXTERM] Upload to device failed due to data corruption (CRC error)")
else:
print(f"[LXTERM] Got unexpected response from device '{reply}'")
sys.exit(1)

def upload(self, filename, address):
f = open(filename, "rb")
f.seek(0, 2)
Expand All @@ -214,6 +227,7 @@ def upload(self, filename, address):
position = 0
start = time.time()
remaining = length
outstanding = 0
while remaining:
sys.stdout.write("|{}>{}| {}%\r".format('=' * (20*position//length),
' ' * (20-20*position//length),
Expand All @@ -227,12 +241,17 @@ def upload(self, filename, address):
frame.cmd = sfl_cmd_load if not self.no_crc else sfl_cmd_load_no_crc
frame.payload = current_address.to_bytes(4, "big")
frame.payload += frame_data
if self.send_frame(frame) == 0:
return
self.port.write(frame.encode())
outstanding += 1
if self.port.in_waiting:
self.receive_upload_response()
outstanding -= 1
current_address += len(frame_data)
position += len(frame_data)
remaining -= len(frame_data)
time.sleep(1e-5) # Inter-frame delay for fast UARTs (ex: FT245).
for _ in range(outstanding):
self.receive_upload_response()
end = time.time()
elapsed = end - start
f.close()
Expand Down

0 comments on commit 513a799

Please sign in to comment.