发作品签到
专业版

JLink-OB_32f072,带虚拟串口(CDC)

工程标签

2.1w
0
0
22

简介

基于STM32F072制作的JLink-OB_32F072仿真调试器,带虚拟串口(CDC)

简介:基于STM32F072制作的JLink-OB_32F072仿真调试器,带虚拟串口(CDC)

开源协议

GPL 3.0

创建时间:2022-05-09 09:36:21更新时间:2024-09-24 09:56:15

描述

前言:

        之前做过一款基于32f103的JLink-OB调试器,奈何所用固件本身不支持虚拟串口功能,但在实际应用和调试中,经常会用到串口进行数据的查看与发送,故而萌生了做一款带VCOM虚拟串口功能的OB调试器。网上有很多基于32f103方案制作的OB调试器,而且带虚拟串口功能,我自己也仿制过一款,但在使用中效果不是很好,偶尔会出现SWD无法识别的问题,不如提取的原版固件稳定,因而转念去寻求官方带VCOM的OB方案。

 

序章:

        在官方提供的方案中,支持VCOM功能的分别是:J-Link-OB-K22、J-Link-OB-RA4M2、J-Link-OB-STM32F072和J-Link-OB-SAM3U128。综合成本、实现难易程度、资料获取等几个方面考虑,最后选择了基于J-Link-OB-STM32F072-Cortex-M-64KB方案制作一款JLink-OB_32F072仿真调试器。

 

准备工作:

        该方案的原理图获取比较简单,官网和网络上都可获取到,而固件在网上也有很多现成的,当然提取的教程也比较多。不过网上的固件大多是很多年前的了,烧录后会被软件识别到过期,让你执行升级操作。每次的频繁弹窗实属让人恼火,而执行升级操作,不可避免的是固件丢失,无法使用(其中缘由,大家心知肚名就可以啦)。在网络上搬运了一点资料给大家参考,有兴趣的同学可以研究研究:

 

X893大神的DIY JLink-OB-072 (JLink + COM) : X893 (akb77.com)

这应该是国内好多人参考的原版吧,这位X893大神不知道是何许人也,但其能力不得不称赞一番,硬生生从官方固件中提取出属于J-Link-OB-STM32F072的固件,吾辈只有竖起大拇指称赞!正所谓“前人栽树,后人乘凉”,“喝水不忘挖井人”,在大佬的帮助下,让我这样的小白仿制变得容易且切实可行。

 不起名大大的 jlink ob最新固件提取

这应该是我目前找到的比较详细的固件提取教程,对于新手朋友比较友好。固件提取方法都是相通的,结合其他32f103的固件提取教程,就可以完成32f103的固件提取了。

        <小结>网上可供参考的资料很多,我就不一一罗列了,只要找到自己需要的、可行的,就是好资源。

 

 

正文:

    【硬件篇】

        这款JLink-OB_32F072方案,不仅仅支持SWD接口(+SWO),还支持VCOM(虚拟串口)功能,且串口支持四线串口模式,不过考虑到引出针数有限和使用比较少,就没有添加CTS和RTS。此外,值得一提的是,该方案不需要额外的晶振,在物料上又省了一笔钱。USB端口由于DP内置了上拉电阻,可直接连接至USB公头数据线,无需外接上拉电阻就可以被电脑识别。而速度方面,官方给出的参考是:接口速度2MHz、下载速度100KiB/s,这样的速度对于一般的小项目和日常的使用时足够了的。而虚拟串口用于串口数据的收发,美滋滋。

        废话不多说,直接上菜:

        这是PCB仿真图的正面,新使用了一个小型封装的ESD:ESDR0502N,该ESD用于USB端口的静电保护,它比较好的地方在于USB数据线可直接从芯片底部贯穿,另外电源接入端和接地端位于一侧,在布局和信号流方向,都能达到一个比较好的水平。其他的就没什么特别需要说明的了。

        这是PCB仿真图的背面,背面的器件比较少,仅有两颗与串口线串联的电阻用以隔离,以及用于连接的排针。而预留的测试点除了四个下载必要的触点外,还有芯片的复位引脚,可用于在下载/重装固件时SWD接口无法识别的情况下进行手动复位操作。

        【Tips】这款JLink-OB_F072调试器的PCB与之前做的JLink-OB_32F0103调试器一样都是适配USB外壳的。

 

 

    【固件篇】

        正如准备工作中所述,网络上流传的固件,大多是提取于多年前,因而在新版软件上使用,不可避免的会出现弹窗警告,但使用官方升级是不可能的,因而要想在新版的软件上使用,就需要从新提取固件,具体方法可参见不起名大大的 jlink ob最新固件提取 。但是同样也会面临一个问题,若是提取的固件在下一版发布的新软件中升级,那么之前提取的固件又不能使用,不过掌握了方法,自然这也不是什么困难。同样,如果不去升级软件,那么这个问题也就自然不是问题。不过古语有云,“书山有路勤为径,学海无涯苦作舟”,对于爱折腾的我们,有没有什么方法可以“一劳永逸”的方法呢?正所谓:办法总比困难多,只要肯专研,这解决个方法肯定是有的。

        通过对软件包中的固件进行解析,发现JLink-OB_32F072版本的固件更新截止日期到2019-01-07之后就没有再更新了,J-Link OB-STM32F072最新可提取固件版本为:J-Link OB-STM32F072-CortexM compiled May  4 2017 14:44:00,提取自JLink_V634h,之后版本无法提取(JLink_V640及以后)。问题显而易见,即便这么多年其固件没有更新了,但能够提取的固件日期为2017-05-04,与已知固件截止日期为2019-01-07,很显然2017版的不是最新固件,烧录2017版固件后,势必会弹窗警告。那么有没有办法可以解决这个问题呢,答案是肯定的。在上一版JLink-OB_32F0103调试器研究的基础上,得到了修改编译日期来避免软件识别警告的方法,那么,这里也可以同样效仿。在附件中,我附上了由2017-05-04版修改编译日期为2019-01-07的固件和原版2017-05-04固件,喜欢深究的朋友可以对比下,看看是不是只修改了编译日期哈。

 

 

    【固件烧录篇】

        固件烧录说明:
        a、固件分为两段,一段为前8字节head(头)部分,烧录地址为:0x8000000;另外一段为提取的固件main(主体)部分,烧录地址为:0x8004800。烧录时只需按指定地址依次烧录head和main即可。
        b、需要特别说明的是,在本人实际提取的过程中,有个地方与不起名大大所叙述的内容有所不同。他所介绍的在head和main之间使用0x00填充,而我依法炮制,烧录固件后,发现初始S/N=0,这不就完犊子了吗。要知道,后续要想使用该调试器,不可避免的需要载入SN,而默认情况下,初始S/N=-1时,方可使用命令:Exec SetSN=XXXXXXXX(8为数字)去修改SN。完啦,芭比寇拉。。。。。。不过好在皇天不负有心人,通过多次试验研究发现:在head和main之间填充数据为0xFF时,即可实现初始S/N=-1的情况,而芯片擦除数据后,其内部数据默认就被格式化为0xFF,索性就将head和main分开烧录,只需将其按正确的烧录地址烧录即可。这种中间填充0xFF的情况,与做的OB-SAM3U128调试器是情况是相同的,当时费尽心思琢磨固件,始终无法使用......,后面将中间数据使用0xFF填充才得以解决。不过中间填充数据使用0x00,在OB-32F103上是适用的,其间原因,我也没再深究。

       c、至于我为何不将两段固件整合到一起,一来是没有找到比较合适快捷的填充0xFF数据的方法,若果后面找到了合适的方法再更新吧,二来是因为这样做没有必要,因为芯片擦除后,默认的数据就为0xFF,也没有必要多此一举。至于为啥需要0xFF或0x00填充,相信看了不起名大大的探究提取过程,你也能够明白,再次我就不再赘述了。OB这种东西,追求的就是一个稳定可靠,至于固件是否最新,对日常使用影响不大,在此将固件进行修改,也是为了得到一个长期的使用,毕竟工具嘛,用着稳定顺手就好啦,就像人生,最重要的就是开心啦。

       首先是中间段填充0x00的固件烧录后的连接情况截图:

 

       然后是中间段填充0xFF的固件烧录后的连接情况截图:

 

       最后使用低版本的JLink Commander执行命令:Exec SetSN=XXXXXXXX(8为数字)修改SN后的连接情况截图:

 

 

结语:

        最后需要说明一下的是,本工程项目原版为KiCad所绘制,所提供的原理图和PCB为转换所得,虽本人已加以修缮和进行匹配修改,但不能保证所有地方皆已完善,为避免想要制作的朋友使用“不完整”的文件进行生产产生问题,故而在附件中增加原版Gerber文件和原理图pdf,以供制作所用。至于原版工程文件,就不上传了,因为差别不大,且不影响此项目的理解和使用。这款调试器是我去年年末做的,经过几个版本的迭代,算是达到了基础调试工具的要求。由于手上多为硬件方面的工作,所以切身使用的机会并不多,不过多次的使用和调试后暂时还没发现什么问题。当然,也欢迎制作的朋友结合实际使用,多多提出存在的问题和改进的建议。

 

 

-------------------------------------------这是一道靓丽的分割线--------------------------------------------

后续1:

      22-05-16: 解决了固件分开烧录的问题。使用WinHex先填充18424个字节(0x4800-0x08=0x47F8)的0x00数据,然后将该段数据选中后进行“反转位”操作,即将0x00修改为0xFF,最后将固件主体开始的前8字节粘贴到固件最前面。注:附件最后两个即为最新合并后的固件,原分立固件已取消;bin文件烧录时需填写固件初始地址:0x8000000,hex文件已包含固件地址信息,直接载入烧录即可。

 

-------------------------------------------这是一道靓丽的分割线--------------------------------------------

后续2:

     22-05-30:

【1】前言:

        今天在使用该调试器的时候,偶然打开J-Link Commander,发现调试器信息是带License的,如下图:

        于是萌生了一个想法:如果说能找到License的位置,并将该信息移植到原来的固件中,是否可以实现原固件自带License。要知道,之前的固件是不含License的,需要用工具生成调试器SN对应的License后再添加到J-Flash中才可用于下载,如果能够实现,那么就可以不用烧录固件后添加License了,并且实现“跨设备”使用,做到即插即用。

     

【2】探索:

        通过对已经包含License信息的调试器进行读取,然后将读取到的数据单独保存,接着与原固件进行差异对比,找到了License信息的位置,如下图所示:

 

【3】实现:

        将License信息数据添加到原不含License信息固件的对应地址中,保存,烧录,连接电脑,发现该调试器已经包含License了。如下图所示:

 

【3】结语:

       通过对固件License信息的提取与融合,实现了固件License的植入,避免了后续添加License的步骤以及实现换机即插即用。烧录该固件后的SN=-1,可通过低版本J-Link Commander执行命令修改(我用的是V6.34h)。最后已将包含License信息的固件替换了原来的固件,大家可以放心下载使用。

 

-------------------------------------------这是一道靓丽的分割线--------------------------------------------

后续3:

     23-01-29:

更新内容:1、剔除USB电路无用的1.5K上拉电阻;

                   2、器件适配LCEDA,将元件与商城对应,建立原理图与PCB网表链接,实现了3D模型的显示;

                   3、优化部分电路走线。

 

3D效果图-正面

 

3D效果图-背面

 

 

-------------------------------------------这是一道靓丽的分割线--------------------------------------------

后续4:   

     23-07-16:

1、事由:喜大普奔,不得不说互联网很大,但也很“小”。某天我点开开源平台的消息提示,意外发现来自一位神秘网友的回复,内容的大概内容就是他就是我前文中提到的“不起名”大大,然后他有一个可自动升级的固件......。不得不说,这比网友见面还刺激,同样也感谢互联网,开源精神,让我们大家认识,就当交个朋友。具体内容如下(PS:涉及个人隐私信息,部分内容我就马赛克了,见怪莫怪):

 

2、他所提供的固件,我也亲测了,确实支持官方软件自动升级,具体步骤如下:

a、下载其固件后弹窗提示有新版本固件,点击“Yes”确认更新固件;

 

b、固件更新过程如下:

 

c、固件更新完毕后显示信息如下,SN序列号为-1,可通过低版本软件使用命令进行修改;

 

d、这样就得到了一个支持自动升级的OB下载调试器了。可以看出,最新的软件所提供的OB-f072固件信息是指向19年的,即意味着这几年来其固件都没有再做更改,也就为最新固件,与我之前提取的17版套壳“马甲”固件,自然是有所区别的;粘贴出来满足一下有这方面需求的小伙伴,因为保不齐哪天官方就更新了呢,同时也记录一下这“网友奔现”的喜悦。

最后,粘贴一下“不起名”大大的固件地址,其固件压缩包我就不提供了,有需要的朋友,可自行前往下载,这样也算是避免伸手党,资源不易,且用且珍惜。传送们开启中,滴,你已到达门口,请点击领取资料》》》》》》

https://download.csdn.net/download/qq_39663845/11109032

 

-------------------------------------------这是一道靓丽的分割线--------------------------------------------

后续5:

     24-09-23:J-Link OB-STM32F072-128KB-CortexM固件支持

 J-Link OB-STM32F072-128KB-CortexM由GitHub大佬zhangjinke提供,感兴趣的朋友可自行前往下载,传送门开启:请点击->J-Link OB-STM32F072-128KB-CortexM。该固件与J-Link OB-STM32F072-CortexM固件的区别如下:

 

固件示意:

 

  【声明】为避免版权纠纷,此OB调试器仅供DIY爱好者或个人所使用,制作和使用需遵从相关开源协议之规定,​​不得用以商业用途,若有违反,后果自负。OB电路及相关源码固件,最终解释权归Segger官方所有,本人不提供任何形式的技术支持和服务,更不承担因不当使用所带来的各种后果,望悉知,特此声明。

 

完结撒花~~~《结》

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
firmware__0x8000000_J-Link OB-STM32F072-CortexM(Licensed).bin
623
2
firmware__J-Link OB-STM32F072-CortexM(Licensed).hex
647
3
SCH_J-Link-OB-STM32F072_V1.1_2023-01-29.pdf
279
4
Gerber_J-Link-OB-STM32F072_V1.1_2023-01-29.zip
190
5
SCH_J-Link-OB-STM32F072_V1.0_2022-0506.pdf
185
6
Gerber_J-Link-OB-STM32F072_V1.0_2022-05-06.zip
154
7
添加license.rar
322
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航