I recently started working with RTT and with the GDB servers SWO output functionality, and I have a few questions.
- What data transfer rate can I expect using RTT and different interfaces (JTAG, SWD)? On my target (Cortex-M4, 96 MHz CPU clock), RTT transfer rate seems to top out at about 80 kb/s when using SWD, regardless of whether the SWD clock is 10 MHz or 25 MHz. With JTAG, the transfer rate can be as high as 300 kb/s at 25 MHz JTAG clock before data loss occurs. Is it normal that throughput does not increase linearly with JTAG/SWD clock?
- I noticed a dramatic increase in RTT TCP/IP throughput after upgrading the J-Link software from 5.00 to the latest version. With the earlier version, TCP/IP throughput appeared to be limited to about 160 kb/s, whereas with the latest software, only the RTT transfer rate seems to be the limiting factor. Are there any settings that influence the transfer speed over the TCP/IP interface?
- Are there any easy ways to figure out whether RTT is losing data, or is it necessary to derive this from the data stream itself (e.g. use a data format that contains frame numbers, checksums, etc)?
- Is there a way to access the SWO data, possibly in raw form, and without having to use GDB and the GDB server? In most of my debugging scenarious, having a unidirectional link from the target system to the PC that can transfer about 800 kb/s of data would be very useful. I usually do not need to send any data from the PC to the target system, and the data sent from the target is all binary, so I do not need a terminal display.
I had to install MinGW to activate the SWO output in the GDB server, and the data stream provided by the GDB servers swoport and telnetport appears not to include information like ITM stimulus port numbers, which are contained in the raw SWO data stream.