开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2497|回复: 9
收起左侧

[图文资料] 易语言Jlink烧录程序

[复制链接]
发表于 2021-3-30 11:10:10 | 显示全部楼层 |阅读模式   北京市北京市
本帖最后由 haifutw 于 2021-3-30 11:15 编辑

Jlink是烧录单片机程序的烧录器。需要配合烧录软件使用。
在做全自动调试软件的时候,需要做到一键调试,
烧录软件-通讯测试-设备校准-等等功能一键完成。
这是需要把烧录程序集成到调试软件里边
那就得调用JlinkARM.dll,有其他语言的调用方法,
但没有易语言的,这里我就写了一个易语言的,

本工具的设计目的是为量产烧录时实现自动化烧录、

也可以实现,一拖多烧录、同一芯片烧录多个数据。说白了就是自己做一个能控制指定J-Link烧录指定数据的工具。工具只实现了选择J-Link序列号、选择芯片信号、选择烧录地址、选择烧录文件的一拖一烧录功能,可以自己扩展实现在一拖多、烧录序列号、烧录出厂配对数据、理论上只要J-Link支持的芯片都能烧录。一、工具原理工具通过调用J-Link驱动JLinkARM.dll文件实现对指定J-Link的控制,只需要一个JLinkARM.dll文件就能控制J-Link,无须另装驱动。很多使用ARM内核的芯片厂商自家的命令行烧录工具也是使用JLinkARM.dll来烧录。本工具已经集成了JLinkARM.dll文件,版本号为V6.20d,如果需要使用其他版本的JLinkARM.dll,请确保版本号在V6.0版本以上

GIF.gif

评分

参与人数 1精币 +1 收起 理由
浮生潇湘 + 1 很赞同,谢谢!

查看全部评分


签到天数: 1 天

发表于 2023-11-29 19:38:10 | 显示全部楼层   江西省上饶市
JLinkARM.dll怎么连接调用呀,可以分享下源码吗?
回复 支持 反对

使用道具 举报

发表于 2023-3-7 12:55:31 | 显示全部楼层   广东省河源市
666666666666666
回复 支持 反对

使用道具 举报

发表于 2022-7-14 11:11:02 | 显示全部楼层   贵州省铜仁市

感谢分享
回复 支持 反对

使用道具 举报

结帖率:50% (3/6)

签到天数: 15 天

发表于 2022-7-11 08:46:51 | 显示全部楼层   广东省东莞市
文件呢
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 1 天

发表于 2021-9-26 15:45:25 | 显示全部楼层   山东省济南市
haifutw 发表于 2021-9-23 15:02
[e=0].版本 2
.支持库 spec

不好意思,是我表述的不太清楚,就是可以直接运行的工程文件(.e),您这个环境我没配置成功。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-23 15:02:56 | 显示全部楼层   北京市北京市
浮生潇湘 发表于 2021-9-23 10:36
可以传一下源码文件吗
  
打开 = JLINKARM_Open ()  ' 打开
调试输出 (“打开返回数”, 打开)
如果 (打开 = -1)  ' 打开



日志 = JLINK_SetLogFile (“jlink.log”)
调试输出 (“日志”, 日志)
JLinkARM = JLINK_GetDLLVersion ()
设置SWD = JLINK_TIF_Select (JLINK_TIF_SWD)
如果 (设置SWD = 0)

设置速度 = JLINK_SetSpeed (20000)

设置芯片 = JLINK_ExecCommand (“device = ” + 编辑框_芯片型号.内容, 0, 0)
连接 = JLINK_Connect ()
如果 (连接 = -1)

写编辑框提示 (“连接成功!”)
获取SN = JLINK_GetSN ()  ' 获取序列号
擦除芯片 = JLINK_EraseChip ()  
如果 (擦除芯片 = 0)


烧录 = JLINK_DownloadFile (编辑框_烧录文件路径.内容, 134217728)  
如果 (烧录 = 0)  ' 返回0 为成功。烧录:(参数:文件路径,地址)



调试输出 (“ 复位”, JLINK_Reset ())  ' 复位
调试输出 (“ 停止”, JLINK_Halt ())  ' 停止
JLINK_Close ()  ' 关闭



i支持库列表   支持库注释   
spec特殊功能支持库

回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 1 天

发表于 2021-9-23 10:36:57 | 显示全部楼层   山东省济南市
可以传一下源码文件吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-7 15:42:46 | 显示全部楼层   北京市北京市
本帖最后由 haifutw 于 2021-4-7 16:15 编辑


GIF4.gif
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-30 11:17:49 | 显示全部楼层   北京市北京市
#include "main.h"
#include<stdio.h>
#include<windows.h>
#include <stdlib.h>
#include <time.h>

#define JLINK_TIF_JTAG          0
#define JLINK_TIF_SWD           1

void  (WINAPI *JLINK_SetLogFile)(char *file);
DWORD (WINAPI *JLINK_GetDLLVersion)(void);
DWORD (WINAPI *JLINK_GetHardwareVersion)(void);
DWORD (WINAPI *JLINK_GetFirmwareString)(char *buff, int count);
DWORD (WINAPI *JLINK_GetSN)(void);

BOOL  (WINAPI *JLINK_ExecCommand)(char* cmd, int a, int b);
DWORD (WINAPI *JLINK_TIF_Select)(int type);
void  (WINAPI *JLINK_SetSpeed)(int speed);
DWORD (WINAPI *JLINK_GetSpeed)(void);
DWORD (WINAPI *JLINK_GetId)(void);
DWORD (WINAPI *JLINK_GetDeviceFamily)(void);

BOOL  (WINAPI *JLINK_Open)(void);
void  (WINAPI *JLINK_Close)(void);
BOOL  (WINAPI *JLINK_IsOpen)(void);

BOOL  (WINAPI *JLINK_Connect)(void);
BOOL  (WINAPI *JLINK_IsConnected)(void);
int   (WINAPI *JLINK_Halt)(void);
BOOL  (WINAPI *JLINK_IsHalted)(void);
void  (WINAPI *JLINK_SetResetType)(int type);
void  (WINAPI *JLINK_Reset)(void);
void  (WINAPI *JLINK_Go)(void);
void  (WINAPI *JLINK_GoIntDis)(void);
DWORD (WINAPI *JLINK_ReadReg)(int index);
int   (WINAPI *JLINK_WriteReg)(int index, DWORD data);

int   (WINAPI *JLINK_ReadMem)(DWORD addr, int len, void *buf);
int   (WINAPI *JLINK_WriteMem)(DWORD addr, int len, void *buf);
int   (WINAPI *JLINK_WriteU8)(DWORD addr, BYTE data);
int   (WINAPI *JLINK_WriteU16)(DWORD addr, WORD data);
int   (WINAPI *JLINK_WriteU32)(DWORD addr, DWORD data);

int   (WINAPI *JLINK_EraseChip)(void);
int   (WINAPI *JLINK_DownloadFile)(LPCSTR file, DWORD addr);
void  (WINAPI *JLINK_BeginDownload)(int index);
void  (WINAPI *JLINK_EndDownload)(void);


void JlinkInit(void)
{
        HMODULE hModule = LoadLibrary("JlinkARM.dll");
    if (hModule != NULL)
        {
                printf("dll open success\n");
               
        }else
        {
                printf("dll open fail\n");
        }
        JLINK_GetDLLVersion      = (void*)GetProcAddress(hModule, "JLINK_GetDLLVersion");
    JLINK_GetHardwareVersion = (void*)GetProcAddress(hModule, "JLINK_GetHardwareVersion");
    JLINK_GetFirmwareString  = (void*)GetProcAddress(hModule, "JLINK_GetFirmwareString");
    JLINK_GetSN              = (void*)GetProcAddress(hModule, "JLINK_GetSN");
    JLINK_GetId              = (void*)GetProcAddress(hModule, "JLINK_GetId");
    JLINK_GetDeviceFamily    = (void*)GetProcAddress(hModule, "JLINK_GetDeviceFamily");
   
    JLINK_SetLogFile         = (void*)GetProcAddress(hModule, "JLINK_SetLogFile");
    JLINK_ExecCommand        = (void*)GetProcAddress(hModule, "JLINK_ExecCommand");
   
    JLINK_GetSpeed           = (void*)GetProcAddress(hModule, "JLINK_GetSpeed");
    JLINK_SetSpeed           = (void*)GetProcAddress(hModule, "JLINK_SetSpeed");
    JLINK_TIF_Select         = (void*)GetProcAddress(hModule, "JLINK_TIF_Select");
   
    JLINK_Open               = (void*)GetProcAddress(hModule, "JLINK_Open");
    JLINK_Close              = (void*)GetProcAddress(hModule, "JLINK_Close");
    JLINK_IsOpen             = (void*)GetProcAddress(hModule, "JLINK_IsOpen");
   
    JLINK_Connect            = (void*)GetProcAddress(hModule, "JLINK_Connect");
    JLINK_IsConnected        = (void*)GetProcAddress(hModule, "JLINK_IsConnected");
    JLINK_SetResetType       = (void*)GetProcAddress(hModule, "JLINK_SetResetType");
    JLINK_Reset              = (void*)GetProcAddress(hModule, "JLINK_Reset");
    JLINK_Halt               = (void*)GetProcAddress(hModule, "JLINK_Halt");
    JLINK_IsHalted           = (void*)GetProcAddress(hModule, "JLINK_IsHalted");
    JLINK_Go                 = (void*)GetProcAddress(hModule, "JLINK_Go");
    JLINK_GoIntDis           = (void*)GetProcAddress(hModule, "JLINK_GoIntDis");

    JLINK_ReadReg            = (void*)GetProcAddress(hModule, "JLINK_ReadReg");
    JLINK_WriteReg           = (void*)GetProcAddress(hModule, "JLINK_WriteReg");
   
    JLINK_ReadMem            = (void*)GetProcAddress(hModule, "JLINK_ReadMem");
    JLINK_WriteMem           = (void*)GetProcAddress(hModule, "JLINK_WriteMem");
    JLINK_WriteU8            = (void*)GetProcAddress(hModule, "JLINK_WriteU8");
    JLINK_WriteU16           = (void*)GetProcAddress(hModule, "JLINK_WriteU16");
    JLINK_WriteU32           = (void*)GetProcAddress(hModule, "JLINK_WriteU32");
   
    JLINK_EraseChip          = (void*)GetProcAddress(hModule, "JLINK_EraseChip");
    JLINK_DownloadFile       = (void*)GetProcAddress(hModule, "JLINK_DownloadFile");
    JLINK_BeginDownload      = (void*)GetProcAddress(hModule, "JLINK_BeginDownload");
    JLINK_EndDownload        = (void*)GetProcAddress(hModule, "JLINK_EndDownload");
}

typedef int(*_Key);
unsigned char tbuf[200];
unsigned int xbuf;
int main()
{
       
        JlinkInit();//JLink初始化
       
        //JLINK_SetLogFile("jlink.log");//设置日志文件
        if(!JLINK_Open())//打开JLink
        {
                printf("JLINK OPEN SUCCESS \n"); //输出显示-打开成功!
        }else         printf("JLINK OPEN fail \n");//输出显示-打开失败!
       
    printf("DLL Version:  %u\n", JLINK_GetDLLVersion()); //获取J-Flash版本
    JLINK_ExecCommand("device =  MKL16Z128xxx4", 0, 0);//设置芯片型号
    JLINK_TIF_Select(JLINK_TIF_SWD)//选择连接方式
    JLINK_SetSpeed(10000);//设置烧录速度
   
    if(JLINK_Connect()) //JLink连接
    {
            printf("JLINK_连接失败!\n");
            return 0;//返回0
    }else printf("JLINK_连接成功!\n");
       
        //printf("HW Version:   %u\n", JLINK_GetHardwareVersion());//获取硬件版本
    //printf("SerialNumber: %u\n", JLINK_GetSN());//获取序列号
    //JLINK_EraseChip();//擦除芯片。
    if(JLINK_DownloadFile("927-01.bin",0x8000000))//烧录:(参数:文件路径,地址)
    {
                  printf("JLINK 下载失败 \n");
                  return 0; //返回0
    }else printf("JLINK 下载成功 \n");
    printf("DEVICE : %d \n",JLINK_GetDeviceFamily());//获取设备唯一标识
    printf("DEVICEID : %d \n",JLINK_GetId());//获取ID
    JLINK_ReadMem(0x4004804c,4,&xbuf);//读内存
    printf("DEVICE 型号 ; %x \n",xbuf);
   
    switch((xbuf>>24)&0xff)
    {
            case 0:
                    printf("芯片容量为 8KB FLASH;\n");
                    break;
            case 1:
                    printf("芯片容量为 16KB FLASH;\n");
                    break;
            case 3:
                    printf("芯片容量为 32KB FLASH;\n");
                    break;
            case 5:
                    printf("芯片容量为 64KB FLASH;\n");
                    break;
            case 7:
                    printf("芯片容量为 128KB FLASH;\n");
                    break;
            case 9:
                    printf("芯片容量为 256KB FLASH;\n");
                    break;
    }
    //JLINK_BeginDownload(0);
    JLINK_Reset();
    //JLINK_Halt();
    //Sleep(5000);
    /*
    JLINK_ReadMem(0x00,100,tbuf);
    int i;
        for(i=0;i<100;)
    {
            printf("%x ",tbuf[i]);
            i++;
                if(i%10 == 0)printf("\n");       
    }
    printf("\n");
    */
    //JLINK_EraseChip();//擦除芯片
    JLINK_Halt();
    JLINK_Close();
   
    //Sleep(5000);
   
    //JLINK_Open();
   
        //JLINK_Close();
}

//////////////////////////////////////////////////////////////
//示例https://blog.csdn.net/qq446252221/article/details/89878996

    JLINK_SetLogFile("jlink.log");//设置日志文件
    JLINK_Open();//打开
    printf("Load driver OK.\n");
    printf("-----------------------------\n");
    printf("DLL Version:  %u\n", JLINK_GetDLLVersion());//获取版本
    printf("HW Version:   %u\n", JLINK_GetHardwareVersion());//获取硬件版本
    printf("SerialNumber: %u\n", JLINK_GetSN());//获取序列号
    printf("-----------------------------\n");
    JLINK_ExecCommand("device = NRF51822_XXAC", 0, 0);//设置芯片
    JLINK_TIF_Select(JLINK_TIF_SWD);//设置连接方式,JATG为0;SWD为1。
    JLINK_SetSpeed(10000);//设置烧录速度

       
       
    JLINK_Connect();//链接JLink
        JLINK_EraseChip();//擦除芯片。
        JLINK_DownloadFile("boot.bin",0x00000000))//烧录:(参数:文件路径,地址)
    JLINK_GetId();//获取ID
        JLINK_GetDeviceFamily());//获取设备唯一标识
    JLINK_ReadMem(0x4004804c,4,&xbuf);//读内存
       
        JLINK_Reset()//复位
        JLINK_Halt();//停止
    JLINK_Close();//关闭
       
   
       


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表