tools: add litex_jtag_uart to create a virtual uart for the jtag uart.
This commit is contained in:
parent
2cf83b9f69
commit
c75cf45ab4
|
@ -85,9 +85,9 @@ proc jtagstream_drain {tap tx chunk_rx max_rx} {
|
||||||
lassign [jtagstream_poll $tap "" $chunk_rx] rxi readable writable
|
lassign [jtagstream_poll $tap "" $chunk_rx] rxi readable writable
|
||||||
append rx $rxi
|
append rx $rxi
|
||||||
}
|
}
|
||||||
if {!$writable} {
|
#if {!$writable} {
|
||||||
echo "write overflow"
|
# echo "write overflow"
|
||||||
}
|
#}
|
||||||
return $rx
|
return $rx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,4 +140,5 @@ proc jtagstream_serve {tap port} {
|
||||||
"jtagstream_serve $_CHIPNAME.tap {:d}".format(port),
|
"jtagstream_serve $_CHIPNAME.tap {:d}".format(port),
|
||||||
"exit",
|
"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])
|
||||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue