tools: add litex_jtag_uart to create a virtual uart for the jtag uart.

This commit is contained in:
Florent Kermarrec 2020-05-25 10:21:06 +02:00
parent 2cf83b9f69
commit c75cf45ab4
2 changed files with 53 additions and 4 deletions

View File

@ -85,9 +85,9 @@ proc jtagstream_drain {tap tx chunk_rx max_rx} {
lassign [jtagstream_poll $tap "" $chunk_rx] rxi readable writable
append rx $rxi
}
if {!$writable} {
echo "write overflow"
}
#if {!$writable} {
# echo "write overflow"
#}
return $rx
}
@ -140,4 +140,5 @@ proc jtagstream_serve {tap port} {
"jtagstream_serve $_CHIPNAME.tap {:d}".format(port),
"exit",
])
subprocess.call(["openocd", "-f", self.config, "-f", "stream.cfg", "-c", script])
config = self.find_config()
subprocess.call(["openocd", "-f", config, "-f", "stream.cfg", "-c", script])

48
litex/tools/litex_jtag_uart.py Executable file
View File

@ -0,0 +1,48 @@
#!/usr/bin/env python3
# This file is Copyright (c) 2020 Florent Kermarrec <florent@enjoy-digital.fr>
# License: BSD
# Proof of Concept to use the JTAG UART with lxterm.
import os
import pty
import threading
import telnetlib
import time
from litex.build.openocd import OpenOCD
telnet_port = 20000
def openocd_jtag_telnet():
prog = OpenOCD("openocd_xc7_ft2232.cfg")
prog.stream(telnet_port)
m, s = pty.openpty()
print("LiteX JTAG UART created: {}".format(os.ttyname(s)))
openocd_jtag_telnet_thread = threading.Thread(target=openocd_jtag_telnet)
openocd_jtag_telnet_thread.start()
time.sleep(1)
t = telnetlib.Telnet("localhost", telnet_port)
def pty2telnet(m):
while True:
r = os.read(m, 1)
t.write(r)
if r == bytes("\n".encode("utf-8")):
t.write("\r".encode("utf-8"))
t.write("\n".encode("utf-8"))
def telnet2pty(m):
while True:
r = t.read_some()
os.write(m, bytes(r))
pty2telnet_thread = threading.Thread(target=pty2telnet, args=[m])
pty2telnet_thread.start()
telnet2pty(m)