J-Link OB F103 固件提取及维修

J-Link OB F103 固件提取及维修

 

哥尔赞赞赞关注

2018.12.22 14:29:55字数 2,087阅读 2,345

事情起因

某日在调试stm32的时候,错将5v接入3.3v电源输入,开发板烧掉。而且因为jlink没拔掉,也一同阵亡了。光烧了个芯片把整个板换掉太亏,遂打算动手修复。

 

J-Link OB F103 固件提取及维修

坏掉的J-Link

学习修复J-Link

  1. 厚着脸皮向jlink卖家要原理图,卖家表示他也没有
  2. 网上找资料,只找到部分f072和f103的相似原理图,pcb不一样。
  3. 看原理图可知布线其实很简单,没有pcb也不要紧,只要找到供下载固件的SWD口(或TX RX),并引出,下载固件即可。
  4. 万用表加手电筒抄板,SWCLK SWDIO对应PA14 PA13,LED连接到PB12,作为jlink的输出SWCLK SWDIO对应PA3 PA4。
  5. 找固件,在此特别感谢下列博客文章
    x893大神 (万恶之源?)
    x893文章的翻译
    JLink OB 072固件寻找的过程
    JLink OB最新固件提取教程
    自制Jlink ob 072 (大致硬件原理图)

固件提取

网上有别人提取的固件,但苦于没****积分,最后还是自己提取。
具体过程我就不复读了,上面两篇固件寻找的文章已经写得很好,只说一下简略步骤和心得。

  1. 从jlink驱动的安装目录中找到JlinkARM.dll,用winhex打开。

  2. 拉到最后(从后往前找比较方便)→ Ctrl+F(搜索文本)→ J-Link OB(或stm32f103),找到以下描述的字段,上面有芯片型号,编译日期等信息,称之描述字段

    J-Link OB F103 固件提取及维修

    描述字段


    注意!上面找到的描述字段并不是固件的开头。固件开头在前面十来行或几十行,长这样:XX XX 00 20,从描述字段向上搜索16进制数值 00 20就能看到这个开头(!!!开头不是00 20,是 XX XX 00 20)

    J-Link OB F103 固件提取及维修

    固件开头

     

  3. 顶栏→搜索→查找16进制数值→00 20 ,右键→选块开始

  4. Ctrl+F(查找文本) → J-Link OB(同第二步),找到下一个固件的描述字段

  5. 右键→ 选块结尾 , 此时你就选择了 固件开头 到 下一个固件开头 的字段,此时选块已经包含了所需固件,且超过了固件结尾。

  6. 右键→编辑→复制选块→置入新文件 , 保存为.bin文件

2019.01.24更新:第一次弄的时候有点生疏,上面的参考博客也没有看太懂。做到这一步就直接把bin文件烧进去,jlink没有反应,最后还是用的网上hex格式的固件才成功

接着上面步骤:

  1. 从驱动中提出的固件还不能直接用,要在xxxx 0020前填0,共0x4000个,然后在开头处输入固件的前八个字节。具体见这篇博客结尾处:JLink OB最新固件提取教程
  2. 完成了上一步后,所得bin文件就可以直接烧录到f103的0x8000000处。

固件提取结束

2019.01.23更新

容易弄错的地方:

  • 自己提取出来固件后还要补0,补开头八个字节,才能用
  • f103的固件开始地址是0x4000,不同于x893的博客中所写的0x4800,0x4800是f072的。
  • 同时f103也不需在0x8000000写x893提供的bin_8000000文件(据说是用于跳转到0x8004800)
  • 用JFlash下载固件有时候提示跑崩了 "PC of target system has unexpected value after programming",这时候打开JLink安装路径下的JLinkSTM32.exe,将option bytes恢复出厂设置,即可解决

测试了自己提取的三个固件,分别编译于2012,2014,2017年。
2012年的下载速度4000kHz,无提示更新固件,无弹出联系SEGGER
2014年的下载速度4000kHz,提示更新固件,更新会失败,然后直接识别不到jlink
2017年的下载速度2250kHz,无提示更新固件,提示联系SEGGER。

另外,在更文前的一个月里,我一直使用的是网上提供的hex格式固件。这个固件编译于2009年,下载速度4000kHz,会提示更新固件。但奇怪的是更新没有失败,照常使用了一个多月。但仍在使用时会弹窗,提示建议联系SEGGER


更新前原内容

  1. 快递已到,将f103换到板上。
  2. 准备另一个能用的JLink(STLink)供下载固件用,连好待修复JLink的SWCLK SWDIO(不要连错到板上另一组SWCLK SWDIO)
  3. 打开JLink.exe检查是否连上了待修复JLink,打开JFlash.exe,设置好设备型号等,打开刚才保存的bin文件,烧写。JFlash具体操作参考文章:Jlink&STlink工具烧录读取hex&bin

经过上述步骤后固件就下载完了。但插上电脑,不识别J-Link,LED指示灯不亮,示波器检查,晶振没有起振。更换晶振,更换固件,并下载bootloader到0x8000000,都尝试过后还是没有反应,郁闷。

为了检查是不是技术太差焊坏了芯片,写了个简单的led闪烁程序,下载进去,灯亮了!
打消了焊坏了芯片的担忧,应该是固件或者bootloader的问题。于是下载了别人的固件,发现是旧版本的,不管了先烧进去。连接电脑,成了

 

J-Link OB F103 固件提取及维修

成辣

最后

J-Link OB修好了,对我来说难点其实在于固件提取****积分以及焊接

记录一下艰难摸索出的焊接心得

  • 清理干净焊盘
  • 芯片放上去,用镊子左右拨动,对齐
  • 烙铁头上一坨锡,用手指轻轻按住芯片,使其保持对齐状态,用锡固定引脚
  • 四端固定,检查是否真的对齐,否则拆下重新对齐
  • 引脚全部堆满锡,手速要快,避免松香挥发(熟练一点之后感觉不堆锡也差不多)
  • 烙铁头上少量新锡,可沾点松香 焊宝之类的,贴上引脚上的锡堆,将其吸走,手速同样要快,松香、焊宝越少挥发越好
  • 吸走后适当调整烙铁上的锡量,不要擦太干净,烙铁头一定要有锡,越亮、越新越好。太干净会导致下次吸锡时难以触碰到残余的锡,难以吸走残锡
  • 残余的一丁点锡是很难吸走的,要果断重新上锡堆,烙铁上新锡、焊宝。不要光着烙铁头慢慢抠,很难融化残锡的,也增加烫坏芯片的可能

风枪拆芯片所需时间并不长,360°C下,LQFP48我只吹了二十来秒,LQFP144不超过一分钟。只要出风口贴得低一点,吹均匀了,就很容易拿起来。

用镊子拿芯片的手法:
小芯片可以直接整块夹着往上提。稍大一点夹不住的,可以轻轻提没有引脚的角落。风枪吹的时候,提起的芯片角落能感受到松动,说明时间差不多了,再吹吹另几个角就能提起来。
提起来的时候不要太暴力,小心焊盘被拔坏,更要小心周围的贴片电容电阻之类的被带动掉落,没有原理图的话,掉了就几乎凉了。

另外,可以只先焊上SWCLK和SWDIO,测试能不能被电脑检测到,检测芯片的好坏。

附件

造福大家,文中提到的四个固件都分享出来了,都测试过能在电脑上识别到。

链接:https://pan.baidu.com/s/1DsmNB2dK_dEaLOeioesmeg
提取码:7rp4
觉得有用的话顺手点个好看吧