SEGGER的Real Time Transfer (RTT)是一项新技术,可以在嵌入式应用中进行用户I/O交互。它结合了SWO和半主机的优点,具有极高的性能。它的主要特点有
- 可以与目标应用进行双向通信
- 极高的传输速率,同时不影响应用的实时响应
- 在目标板上不需要额外的硬件或引脚
- 在任何J-Link模式下都能正常使用
- ARM Cortex-M0/M0+/M1/M3/M4/M7和Renesas RX100/200/600都支持该功能
- 有完整的代码来提供需要的功能和灵活的自由度
什么是RTT?
在不影响目标实时响应的情况下,RTT可以从目标MCU快速输出信息,也可以发送信息给目标应用。SEGGER RTT可以用在任何J-Link模式下(具体模式见https://www.segger.com/jlink-debug-probes.html)。可以在支持后台存储器访问的处理器如Cortex-M及RX系列上运行。
RTT支持双向多通道通信,可用于不同目的并为用户提供了灵活的自由度。默认情况下两个个方向分别使用一个通道,用于终端输入和输出。利用J-Link RTT Viewer 上位机软件,这个通道可以用于多个虚拟终端,允许打印到多个窗口但仅仅利用了一个目标缓冲区。(例如一个用于标准输出,一个用于错误输出,一个用于调试输出)。上传通道可以用于发送事件追踪数据。
RTT通信?
在目标应用中使用RTT是非常简单的。具体的实现代码可以自由下载并集成到目标应用中。你可以利用任何J-Link与RTT进行通信。
J-Link软件包中有更多适用于不同目的高级应用。
J-Link RTT Viewer
J-Link RTT Viewer是主要的windowsGUI,可以使用RTT的全部功能。RTT Viewer可以单独使用,与J-Link及目标板建立自己的连接。也可以在调试状态下与调试接口并行运行。 RTT Viewer支持RTT的主要特性:
- 在通道0上终端输出
- 发送文本到通道0
- 只有一个目标通道的情况下具有高达16个虚拟终端
- 在任何J-Link模式下都能正常使用
- 控制文本输出:给文本着色,擦除控制台
- 在通道1上记录数据
- ...
J-Link RTT Viewer的完整文档请参考J-Link用户手册(UM08001), RTT章节。
J-Link RTT Viewer是J-Link软件文档包的一部分,可以免费获取。
J-Link RTT Client
J-Link RTT客户端作为一个远程登陆客户端,当调试部分关闭时可以自动重建J-Link连接。J-Link RTT客户端也是J-Link软件文档包的一部分,可以用于简单的RTT应用场景。
J-Link RTT Logger
利用J-Link RTT采集器,可以读取上传通道1的数据并记录到一个文件中。这个通道可以用来向主机发送性能分析数据。J-Link RTT采集器与J-Link建立特定的连接,可以被单独使用,不需要运行调试器。
RTT是如何工作的?
实时传输利用了目标存储器上的SEGGER RTT 控制块来管理数据的读写。控制块包含有一个ID号,这样接上J-Link之后,就可以在存储器中发现控制块并且每个通道都有一个环形缓冲区结构,用来描述通道缓冲区及其状态。最大的通道数可以在编译时进行配置,应用运行时也可以配置及添加缓冲区,而且上传和下行的缓冲区可以分开处理。每个通道都可以配置成阻塞和非阻塞模式。在阻塞模式下,当缓冲区满的时候,应用将进行等待,直到所有的存储器都可以写入,这将导致应用进入阻塞状态,但可以防止数据丢失。在非阻塞状态下,只有适合缓冲区的数据才能被写入,或者没有数据写入缓冲区,其它的数据将被丢弃。这将使应用实时运行,即使不连接调试器也可以。这样开发者就不必创建特定的调试版程序,这些代码可以保留在发布版程序中。
当RTT在主机上激活时,不管是使用RTT Viewer还是通过Telnet 连接应用,J-Link都会自动在目标已知的RAM区搜索SEGGER RTT 控制块。当不能自动发现控制块时,主机应用可以设置控制块所处的RAM区,从而加速检测。
左图显示了控制块在目标应用中的简单结构。上传和下行的Buffer可能有多个,每个Buffer的大小都可以单独配置。Buffer中的灰色区域包含了有效数据。对于上传Buffer来说,写指针由目标应用来负责,读指针由调试探针(J-Link,host)来写入。读写指针指向同一位置时,缓冲区为空。这样就不会产生竞争情形。
SEGGER RTT 除了J-Link及标准调试端口之外,不需要任何额外的引脚或硬件。它不需要对目标板及调试环境进行任何的配置。RTT在程序调试期间也可以运行,不需要其它的开发环境或者调试器。
SEGGER RTT向外输出数据时非常快,显著高于其它方式。实际运行效果如下:
RTT数据输出到主机端的最大速度取决于目标缓冲区的大小及接口速度。即使目标缓冲区只有512字节,在高端J-Link模式下,RTT速度也可以达到>1 MByte/sec,而基本J-Link模型的速度也有 0.5 MByte/sec。