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

2020.04.15更新

一年后回看这篇文,有种公开处刑的感觉。写的都是些啥玩意儿。(0.0)
给出重点:

  • 不要用调试器给板子供电,无论你的调试器是不是有保险丝,无论3.3V或5V,都不要用。接GND共地就好。
  • 下面写的一大堆操作,其重点在于WinHEX和JFlash这两个软件的使用。会用的情况下就很简单了,用WinHEX拷贝出相应字节,用JFlash写入到相应位置,就ok。
  • 为什么固件是这个字节段,我不懂,也不需懂。这是segger的知识产权,是盗版。没钱买正版就低调地用,或者用CMSIS-DAP那种开源的。不是搞逆向的话把时间花在这里不值得,用别人造好的轮子就好。
  • 焊板而言QFP是算简单的了,多练就好,唯手熟尔。STM32用来练手不错,便宜耐艹。
  • 之前挖出来的固件(最后的链接)好像有点问题,建议还是用别人的吧。
  • 之前又自己仿了个072的自用,没啥特别的就不分享了,没啥技术含量,真正的价值在于固件。

以下是旧文

事情起因

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


坏掉的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 (大致硬件原理图)

固件提取

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

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

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

    描述字段

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

  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修好了,对我来说难点其实在于固件提取csdn积分以及焊接

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

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

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

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

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

附件

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

链接:https://pan.baidu.com/s/1DsmNB2dK_dEaLOeioesmeg
提取码:7rp4

你可能感兴趣的:(J-Link OB F103 固件提取及维修)