加入交流群  

扫一扫,添加管理员微信
备注:参考设计,即可被拉入群
和也在搞设计小伙伴们碰一碰

收藏 

评论 

黄土马家 发布

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

 
设计简介

前言:

        之前做过一款基于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,以供制作所用。至于原版工程文件,就不上传了,因为差别不大,且不影响此项目的理解和使用。这款调试器是我去年年末做的,经过几个版本的迭代,算是达到了基础调试工具的要求。由于手上多为硬件方面的工作,所以切身使用的机会并不多,不过多次的使用和调试后暂时还没发现什么问题。当然,也欢迎制作的朋友结合实际使用,多多提出存在的问题和改进的建议。

 

 

 

 

后续:

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

 

 

     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信息的固件替换了原来的固件,大家可以放心下载使用。

 

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

 

完结撒花~~~《结》

 

参考设计图片
×

!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。

 
群聊设计,与管理员及时沟通

欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。

 
查找数据手册?

EEWorld Datasheet 技术支持

论坛推荐 更多
更新时间2024-11-08 05:25:02

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD参考设计中心

站点相关: TI培训 德州仪器(TI)官方视频课程培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved