项目开发要用到Jlink调试代码,每次连接都有用Jlink 的Jtag连接板子的SWD接口,又恰逢开发板升级,然后想着能否把Jlink集成在下一代的开发板上。
看了下手中的Jlink好像比较小
检查之后发现这个好好像叫Jlink-OB,OB好像是On Board的缩写,
打开外壳查看
。。。。这也太简洁了吧,外部晶振都没有,直接用的内部的晶振。。
而且还是用的STM32F072C8T6 做主控,手头也没有F072的板子,只有F103C8T6,
如果原理相同的话应该是可以平替的,然后就试着找官方的资料
Segger官方的Jlink OB 介绍:What is the J-Link OB?
Segger官网关于JlinkOB的手册:JLinkOBSTM32F103.pdf
还真有F103做的Jlink-OB,原理图如下:
图片来源:JLinkOBSTM32F103.pdf
我用的是SWD模式,因此只要找到3.3V----GND----RESET—SWDIO—SWCLK—SWO 这六根线就行
但是原理图中是JTAG的端口,查到JTAG与SWD接口的对应关系:
TDO-----------SWO
TCLK----------SWCLK
TMS-----------SWDIO
RESET-------RESET
结合原理图得出:
PA10---------TDO-----------SWO
PA5----------TCLK----------SWCLK
PA7-----------TMS-----------SWDIO
但是Reset没法确定,因为有两个引脚:RESET and TRSTS
查看下文:
RESET
Abbreviation of System Reset. The electronic signal which causes the target system other than the TAP controller to be reset. This signal is also known as “nSRST” “nSYSRST”, “nRST”, or “nRESET” in some other manuals. See also nTRST.
nTRST
Abbreviation of TAP Reset. The electronic signal that causes the target system TAP controller to be reset. This signal is known as nICERST in some other manuals. See also nSRST.
翻译一下:
RESET
系统重置的缩写。导致TAP控制器以外的目标系统复位的电子信号。在其他一些手册中,此信号也称为“nSRST”、“nSYSRST”或“nRESET”。另请参见 nTRST。
nTRST
TAP 复位的缩写。导致目标系统TAP控制器复位的电子信号。该信号在其他一些手册中称为nICERST。另请参见 nSRST。
而这来两个分别连接两个引脚:
RESET----PA1
nTRST-----PA0
而且“TAP”像是个简称 但是搜索了这个文档没找到其他地方有全称。。。
然后尝试找下非官方资料
下载了.bin源码 与 Bin转Hex工具:你自己用这个工具转吧,记得初始地址设置为:0x8000000,
链接:https://pan.baidu.com/s/13v4A1jt-ohrjbC3bicFDCQ
提取码:kw6h
转换出 OB-STM32_V754_Change date to to 30-02-02.hex
按“F5”或上图点击“Program”
如果出现上图:“
ERROR: Programming failed @ address 0x08000000 (program error) - End of flash programming - ERROR: Program failed”
按“F7” 会得到如下弹窗,证明烧写完毕。
插上电脑 设备管理器中—通用串行总线控制器—J-link driver
找到一个之前做的项目
双击.uvprojx文件 在Keil中打开
Options for Target----Dubug—下拉选择J-LINK—settings–Port—SW
此时识别到SWDIO IDcode and Device Name
连接目标的SWD接口
PA7(TMS-SWDIO)-----目标EVB的SWDIO
PA5(TCLK-SWCLK)—目标EVB的SWCLK
点击 Download
Full Chip Erase Done.
Programming Done.
Verify OK.
JLink Info: Reset: Halt core after reset via DEMCR.VC_CORERESET.
JLink Info: Reset: Reset device via AIRCR.SYSRESETREQ.
Application running …
Flash Load finished at 21:49:18"
连接了一个有RESET 的32位开发板
试了一下,看Segger的原理图上用了RESET是接到STM32Jlink-OB上NRST上 测试了一下—不行
又发现https://lceda.cn/editor#id=8c606087ff85467aba48fa8b07c9a353 这个帖子中nRESET连接的是Jlink OB的PA1
测试一下成功!
F103C8T6版Jlink OB引脚--------------------目标EVB
PA10(TDO)-----------------------目标EVB的SWO
PA7(TMS-SWDIO)--------------目标EVB的SWDIO
PA5(TCLK-SWCLK)------------目标EVB的SWCLK
PA1 (nRESET)-------------------目标EVB的Reset
最后按照原理图JLinkOBSTM32F103.pdf 连接好其他部分
自制Jlink OB 原理图如下:
随后有机会原理图开源
最近生产上,设备比较多,
想用5个设备同时烧录,尝试烧录PCB上安装5个Jlink-OB
查了一下可能跟序列号有关
想用之前做的两个Jlink做测试
发现两个Jlink OB 序列号都是:4294967295
用HEX查看之后 4294967295 HEX为FFFF FFFF
用Hex editor打开固件搜索字节序列 实在最后4行内,
全部都是FFFF FFFF 没法确定哪个是序列号
想着应该可以改序列号 网上搜索关键词 Jlink OB 改序列号
看了上述的帖子之后可以尝试用J-FLASH commder更改命令
用电脑上的J-flash-V7.64c发现无法使用 exec setsn=88880001命令,
查了原来项目的链接:
看到可以使用低版本的J-Flash应该可以设置
下载了
打开Keil发现还是原来的序列号,
之后重新插入发现序列号已经改过来了
在用做好的Jlink ob给新的设备烧录时 Jflash弹出窗口:
Could not read unit serial number!
这是需要将自制的Jlink ob写入序列号
之后再将Jlink 注册
1、将自己定义的序列号填入
2、点击 Generate
3、将底下这四串 复制到上图中的框中
参考:ERROR: Could not read unit serial number!
—CSDN: _WindChimes 帖子
Segger官方的Jlink OB 介绍:What is the J-Link OB?
Segger官网关于JlinkOB的手册:JLinkOBSTM32F103.pdf
立创开源硬件平台: JLink-OB_32f103