JLink及其RTT功能简介
JLink是SEGGER开发的用于DEBUG ARM核芯片的仿真器,支持SWD,JTAG。JLink Pro支持最高SWD频率达50MHz,普通JLink V10也支持20MHz。包含有很多其它仿真器不具备的功能,例如JLink RTT可以用来与上位机高速交互数据,JLink Scope可以高采样查看程序变量。因为JLink Scope GUI界面不方便操作以及不可下发参数这些缺点,萌发了给Simulink开发驱动直连JLink的想法。
JLink RTT的原理是在处理器RAM中建立一段交互缓存,通过ARM核调试总线上传下载,不占用CPU时间。使用JLink RTT不需要额外的连接,只需要基本的四根线(SWCLK,SWDIO,GND,VCC)即可通讯,发送速度快,不占用CPU时间,只是简单拷贝内存的时间。RTT发送接收数据需要在代码增加RTT读写函数,详细见以下两链接。
调试备忘录-J-Link RTT的使用(原理 + 教程 + 应用 + 代码)
Jlink 使用 RTT 输出调试信息总结
Simulink连接JLink RTT
当IDE软件(MDK, IAR等)进入仿真模式时,自动调用JLink,默认不会打开RTT功能。点击桌面右下角Jlink小图标,打开JLink Web界面,在RTT选项卡中设置Control block address,此地址为_SEGGET_RTT变量的内存地址,然后点击Start。
JLink RTT会打开TCP端口19021的Telnet服务器,一旦Socket连接端口,JLink驱动会不断从此端口转发数据。这种方式有一定缺陷,无法发挥JLink Pro最大性能,转发速度最大不超过800kb/s。如果希望获得更高性能,可以直接调用JLink SDK,JLink Pro最高传输速度可达2.5Mb/s。可通过Matlab调用Python。或者C语言直接调用JLink SDK,接口可以从python反推出来。
JLink SDK Python库
Simulink通过socket方式连接RTT要点
- 传输速度最高不可超过800kb/s,否则JLink RTT Telnet服务器转发速度跟不上,一般用途不影响,也可通过直接JLink SDK编程解决此问题。
- 数据读取有可能错位,需要设置包头,在Simulink RTT读取驱动中查找包头,进行切割输出,保证每次数据都是正确的一帧。例如单片机20kHz速度上传变量数据,设置Simulink为10Hz读取。每次读取进来2000帧数据,可设置单片机每2000次传输一次'START'字符,Simulink读取2000帧数据查找'START'字符进行数据对准。
- 下发数据暂时没发现坑,单片机读取下载区缓存,有数据就读取更新。
- Simulink示波器模块需设置成(输入基于帧)
- 具体Simulink S Fcuntion编程可仿照自带TCP/IP Receive和TCP/IP Send模块,进行特殊功能更改,添加查找字符串对齐帧数据功能。
下图为JLink Pro按20kHz上传数据效果,正弦波频率为100Hz,基本无锯齿。对于电机控制而言,可进行在线调参。或者直接上传数据,PC机进行在线分析计算实现更高级的算法。