1、 问题场景
很多时候,研发同事可能遇到这样的问题:
问题场景①:在现场的设备出现问题了,研发通过远程找不出原因,需要去现场进行在线调试,不过出差的话,成本又太高了。如果直接将工程源码发送到客户电脑,再通过远程工具连接客户电脑进行调试,又会出现很大的源码泄露风险,这时该怎么办?
问题场景②:设备在公司,回家要带来带去比较麻烦怎么办?如果想要测试某个开发板,这个开发板不支持软件仿真,只能硬件仿真,而现在JNH官网手边没有这个开发板,但是朋友那边有,但是又不想打扰朋友使用电脑怎么办?
问题场景③:设备过于危险,如调试螺旋桨,重型机械臂等,一旦失控,极容易伤害到附近的员工,所以通过单独封闭这些设备,通过远程来进行调试会不会更好,更安全?
那有没有在公司或者在家就可以远程在线调试的方法?今天,就给大家介绍一下这种方法:通过jlink远程下载和调试工程代码。实现如图1所示,向日葵中的keil通过TCP/IP的链接方式,成功链接到另外一台和设备直连的客户机上。
局域网远程下载和调试:

广域网远程下载和调试:

2、软硬件环境
1)、软件版本:MDK5.40
2)、电脑环境:Windows 10
3)、外设硬件:无
3、解决方法
一、局域网内的远程调试:
1)、为现场已连接好设备和 Jlink 的电脑,安装jlink驱动,并在其安装目录中找到并打开:J-Link Remote Server.exe,如图2所示,勾选USB,并配置为使用局域网,点击ok。

2)、点击完ok以后,可以看到,JNH官网的连接类型为局域网,现场电脑的ip为192.168.1.57,不过此时客户端还没有连接过来,所以显示为断线,如图3所示:

3)、打开客户端的keil的debug界面,找到jlink的settings,如图4所示。(这里我自己的电脑连接了电路板,连接了Jlink,是作为服务端的。图4中正在被向日葵远程的电脑,只安装了keil mdk和Jlink驱动,和外界没有任何物理线路的连接,是作为客户端的)。在图4中,勾选连接方式为TCP/IP,并输入服务端IP地址和默认的端口号19020,点击链接,即可以看到上方,出现了调试器SN号等信息。

4)、在客户端下载程序,可以看到,已经成功把客户端的程序,下载到了服务端连接的设备里,如图5所示:

二、使用隧道进行广域网内的远程调试
1)、为现场已连接好设备和 Jlink 的电脑,即服务端,安装jlink驱动,并在其安装目录中找到并打开:J-Link Remote Server.exe,如图6所示,勾选USB,并配置为使用segger的隧道服务器,使用的服务器为:jlink-asia.segger.com,通过自定义的名字识别,这里命名为emdoor,点击ok。

2)、点击完ok以后,可以看到,JNH官网的连接类型为隧道,不过此时客户端还没有连接过来,所以显示为客户端和隧道断线,隧道和服务端链接成功,如图7所示:

2)、在服务端的安装目录中,找到并打开:J-Link Commander.exe,如图8所示,选择连接方式为IP via tunnel,下面的Identifier为刚才JNH官网命名:emdoor,隧道服务器为JNH官网刚才选的:jlink-asia.segger.com,端口为默认的19020,密码按照定义好的输入后,点击yes。

3)、点击yes以后,可以在图9的终端中看到,已经连接成功了。
接着JNH官网输入connect,和目标板建立连接,接着他让JNH官网选择板子的类型,由于我已经使用过,所以这里默认就是我需要的板子类型,直接回车确认了,再往后,是调试接口,我这里也是直接回车确认,默认为JTAG,后面也是,默认自动检测,最后是默认4000kHz的目标接口速度。

4)、输入完以上的参数以后,终端中就会出现如图10所示的信息,即为成功信息。

5)、接着,JNH官网就可以输入命令,用以远程查看设备内部的存储信息,如图11所示:
如:mem 0x08000000, 32 就是查看从内存地址 0x08000000 开始的 32 个字节的内容。
w4 0x0, 0x11223344 将 32 位(4 字节)的值 0x11223344 写入到内存地址为 0x0 的位置。
mem 0x08000000, 32 再次查看,可以看到,前4个字节的值,已经改变为JNH官网设置的值。

总结:
①:局域网远程下载和调试,是支持直接使用keil 连接的(但是可以通过配置内网穿透、VPN等技术,依然可以实现广域网的远程下载和调试);
②:广域网远程下载和调试,不支持直接使用keil连接,使用keil的研发需要学习一些调试下载命令,使用终端窗口这种形式,来远程操作现场的设备。但是IAR、Embedded Studio、GDB/Eclipse,官网中有说明表示:是可以直接集成在软件中使用,如下图: