您尚未登录。

楼主 # 2022-04-06 11:49:49

jiaowoxiaolu
会员
注册时间: 2021-08-27
已发帖子: 16
积分: 47

最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

玩zynq板子的,是不是受够了platform usb cable 那乌龟一样的下载速度了?现在好了,使用手上的廉价jlink就可以调试zynq 芯片,速度还飞快。

最近搞zynq开发,实在是无法忍受platform usb cable那个下载调试速度,所以一直在找有没有更好的调试方法,结果发现xilinx官方提供了个XVC虚拟调试电缆这个东西。然后花了点时间研究了一下,发现实现起来还挺简单,所以打算自己搞一个试试,然后突发奇想,能不能省事点,直接用jlink来干这事?灵光一闪,想到了jlink其实有SDK的,可以通过程序自己控制jlink读写芯片,所以觉得这个想法应该是可行的,然后随便bing搜了下,好像没看到有先例,所以这个螃蟹只能我自己先尝尝了。。。
废话就不多说了,直接说关键点就好,感兴趣的可以自己深入研究。首先xilinx提供了xvc的详细文档xapp-1251,里面有xvc的协议说明,还提供了GitHub地址,里面有xvc server的实现代码,由于我使用的是window环境,因此我把xvc server代码下载下来,然后简单修改移植到了window,然后把里面的axi to jtag的操作代码替换为jlink sdk的jtag读写操作函数上,简单搞搞。不到半天就搞定了,

xvc server内主要修改了int handle_data这个函数

int handle_data(int fd) 
{
    do 
    {
        memset(cmd, 0, 32);

        if (sread(fd, cmd, 2) != 1)
            return 1;

        if (memcmp(cmd, "ge", 2) == 0) 
        {
            if (sread(fd, cmd, 6) != 1)
                return 1;
            memcpy(TDO, xvcInfo, strlen(xvcInfo));
            if (send(fd, (const char*)TDO, strlen(xvcInfo),0) != strlen(xvcInfo))
            {
                perror("write");
                return 1;
            }
            if (verbose) 
            {
                printf("%u : Received command: 'getinfo'\n", (int)time(NULL));
                printf("\t Replied with %s\n", xvcInfo);
            }
            break;
        }
        else if (memcmp(cmd, "se", 2) == 0) 
        {
            if (sread(fd, cmd, 9) != 1)
                return 1;
            memcpy(TDO, cmd + 5, 4);
            if (send(fd, (const char*)TDO, 4,0) != 4)
            {
                perror("write");
                return 1;
            }
            if (verbose) 
            {
                printf("%u : Received command: 'settck'\n", (int)time(NULL));
                printf("\t Replied with '%.*s'\n\n", 4, cmd + 5);
            }
            break;
        }
        else if (memcmp(cmd, "sh", 2) == 0) 
        {
            if (sread(fd, cmd, 4) != 1)
                return 1;
            if (verbose) 
            {
                printf("%u : Received command: 'shift'\n", (int)time(NULL));
            }
        }
        else 
        {

            fprintf(stderr, "invalid cmd '%s'\n", cmd);
            return 1;
        }

        int len;                            //<num bits> 
        if (sread(fd, &len, 4) != 1) 
        {
            fprintf(stderr, "reading length failed\n");
            return 1;
        }

        int nr_bytes = (len + 7) / 8;       //向上取整数字节
        if (nr_bytes > sizeof(TDI))
        {
            fprintf(stderr, "buffer size exceeded\n");
            return 1;
        }
 
        if (verbose) 
        {
            printf("\tNumber of Bits  : %d\n", len);
            printf("\tNumber of Bytes : %d \n", nr_bytes);
            printf("\n");
        }
    
        memset(&TDO, 0, nr_bytes);

        if (sread(fd, TMS, nr_bytes ) != 1) //读取tms 
        {
            fprintf(stderr, "reading tms data failed\n");
            return 1;
        }
        if (sread(fd, TDI, nr_bytes) != 1) //读取tdi 
        {
            fprintf(stderr, "reading tdi data failed\n");
            return 1;
        }

        JLINKARM_JTAG_StoreGetRaw((const U8*)&TDI, (U8*)&TDO, (const U8*)&TMS, len);

        if (send(fd, (const char*)TDO, nr_bytes,0) != nr_bytes)
        {
            perror("write");
            return 1;
        }
        break;

    } while (1);

    return 0;
}

FluxBB bbcode 连接成
FluxBB bbcode 连接成

编译好的exe文件,感兴趣的可以试试
https://whycan.com/files/members/7197/XVC.rar

目前有点问题没解决,就是可以下载bit文件但是无法烧写外部flash,目前还搞不清楚原因。
如果需要在vitis内使用xvc,目前我摸索出的方法是在vivado内设置xvc并连接到芯片,然后切换到vitis就可以在debug内找到xvc了,测试vitis内点击debug可以正常下载调试,其他功能未详细测试,目前xvc server速度我设置为30M,对比Platform usb cable真是速度提升明显,吃灰的矿渣zynq板又可以拉出来溜溜了!

由于jlink sdk有版权问题,为避免麻烦,sdk和源码就不上传这里了,sdk在GitHub就可以下载到,自己找找就好

离线

#1 2022-04-06 14:04:45

wm20031015
会员
注册时间: 2017-10-18
已发帖子: 48
积分: 152

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

这个就NB大了,省了买XILINX下载线了

离线

楼主 #2 2022-04-06 14:14:08

jiaowoxiaolu
会员
注册时间: 2021-08-27
已发帖子: 16
积分: 47

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

更新一下,下载外部flash是ok的,需要把启动模式设置为JTAG模式即可下载到外部flash
原本使用xilinx usb下载线烧写32M外部flash需要将近15分钟,现在直不到5分钟就搞定了

最近编辑记录 jiaowoxiaolu (2022-04-06 14:15:53)

离线

#4 2022-04-07 09:21:53

jordonwu
会员
注册时间: 2021-07-05
已发帖子: 47
积分: 28

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

速度提升不少啊

离线

#5 2022-04-07 09:45:36

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 399
积分: 266.5
个人网站

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

有协议就好办,这个要赞!

离线

#6 2022-05-06 09:41:07

MicWzn
会员
注册时间: 2021-09-25
已发帖子: 13
积分: 17

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

XilinxVirtualCable能做这么高了? 我之前看别人用ESP或者各种派做的速度都特别低 除了能无线调试 没太大用途

离线

#7 2022-05-06 22:56:58

sven1234
会员
注册时间: 2020-02-26
已发帖子: 39
积分: 24

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

哇塞,我要好好试试了,太棒了楼主厉害。

离线

楼主 #8 2022-05-09 09:00:59

jiaowoxiaolu
会员
注册时间: 2021-08-27
已发帖子: 16
积分: 47

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

MicWzn 说:

XilinxVirtualCable能做这么高了? 我之前看别人用ESP或者各种派做的速度都特别低 除了能无线调试 没太大用途

速度瓶颈不在xvc协议,是在具体实现jtag移位出去的硬件上,esp做得大概只实现了功能,没往优化速度上下功夫,我用jlink来实现jtag比特流的输出,一是jlink烂大街,方便获得,0动手成本,2是jlink本身的jtag速度还是挺快的,v8老古董版本的jtag就比官方DLC cable下载器快不少了,土豪用jlink pro或者更高版本的话轻松快到超过zynq jtag最高速度

离线

#9 2022-05-14 14:56:59

演技担当黄晓明
会员
注册时间: 2017-10-17
已发帖子: 157
积分: 104.5

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

这个好,同理 高速DAP 也是可以的了

离线

#10 2022-05-15 04:13:18

metro
会员
注册时间: 2019-03-09
已发帖子: 398
积分: 445

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

演技担当黄晓明 说:

这个好,同理 高速DAP 也是可以的了

可以的,顺着Xilinx / XilinxVirtualCable的代码思路,用Python写了个XVC server to CMSIS-DAP,可以正常工作,不过目前性能有些感人,还需要再优化下才能见人。
MCU-LINK-to-Zynq.jpg
MCU-LINK-to-Zynq.png

离线

#11 2022-05-15 08:43:45

nekomona
会员
注册时间: 2022-05-15
已发帖子: 2
积分: 32

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

ESP-XVCD那个优化到后面发现整个传输的大部分过程已经是在等wifi协议栈吐数了,IO部分原设计的8266一下凑不出能做并串的外设,只靠bitbang的速度在扣掉库函数之后也比较难想到再做提升的方法。速度方面理论上现在最容易买到的山寨jtag-hs2(FT232H/FT2232H)应该是可以跑满标称30M的MPSSE速度的,也许可以看一下是不是有黑心厂家换了个FT2232D进去,那个功能和VID/UID可以和2232H一样,但是速度掉了一大截-w-、

离线

#12 2022-05-22 02:02:49

metro
会员
注册时间: 2019-03-09
已发帖子: 398
积分: 445

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

周末又尝试优化了一波速度,在MCU-LINK搭配CMSIS-DAP V2,时钟频率为14MHz的时候,跑出了还不错的结果:MCU-LINK-to-Zynq-Quick.png
不过在尝试继续提高频率时无法识别到FPGA了,现在还不清楚是否和固件有关系。

离线

#13 2022-07-14 16:15:20

演技担当黄晓明
会员
注册时间: 2017-10-17
已发帖子: 157
积分: 104.5

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

@metro
估计是硬件的信号完整性出现问题了,可以考虑缩短JTAG线路试试

离线

#14 2022-07-14 16:15:50

演技担当黄晓明
会员
注册时间: 2017-10-17
已发帖子: 157
积分: 104.5

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

不知道高云有么有类似XVC的接口

离线

#15 2022-07-14 17:53:32

metro
会员
注册时间: 2019-03-09
已发帖子: 398
积分: 445

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

演技担当黄晓明 说:

@metro
估计是硬件的信号完整性出现问题了,可以考虑缩短JTAG线路试试

最近可以试试CH32V305那个开源的调试器固件,看看有没有问题

离线

#18 2022-08-29 19:00:21

小谷不咕咕咕
会员
注册时间: 2022-08-29
已发帖子: 1
积分: 1

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

怎么将固件烧写到eeprom里面?

离线

#19 2022-09-21 17:24:16

xyz126
会员
注册时间: 2022-09-21
已发帖子: 2
积分: 2

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

这个服务端代码,我看都是markfile,在vs2022怎么创建C的工程,我试了提示太多错误,想加点新的功能。

离线

#20 2022-09-25 00:31:32

mingmingjiu
会员
注册时间: 2022-09-25
已发帖子: 6
积分: 6

Re: 最近研究了下Xilinx 的XVC,发现jlink有了个新玩法,可以白嫖一个xilinx高速下载器了

DIGILENT的下载器速率可以设置到30MHz,楼主试过没?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn