J-Link OB F103 固件提取及维修
焊接心得挺不错的,可以学习到了
事情起因
某日在调试stm32的时候,错将5v接入3.3v电源输入,开发板烧掉。而且因为jlink没拔掉,也一同阵亡了。光烧了个芯片把整个板换掉太亏,遂打算动手修复。
坏掉的J-Link
学习修复J-Link
- 厚着脸皮向jlink卖家要原理图,卖家表示他也没有
- 网上找资料,只找到部分f072和f103的相似原理图,pcb不一样。
- 看原理图可知布线其实很简单,没有pcb也不要紧,只要找到供下载固件的SWD口(或TX RX),并引出,下载固件即可。
- 万用表加手电筒抄板,SWCLK SWDIO对应PA14 PA13,LED连接到PB12,作为jlink的输出SWCLK SWDIO对应PA3 PA4。
- 找固件,在此特别感谢下列博客文章
x893大神 (万恶之源?)
x893文章的翻译
JLink OB 072固件寻找的过程
JLink OB最新固件提取教程
自制Jlink ob 072 (大致硬件原理图)
固件提取
网上有别人提取的固件,但苦于没csdn积分,最后还是自己提取。
具体过程我就不复读了,上面两篇固件寻找的文章已经写得很好,只说一下简略步骤和心得。
从jlink驱动的安装目录中找到JlinkARM.dll,用winhex打开。
拉到最后(从后往前找比较方便)→ Ctrl+F(搜索文本)→ J-Link OB(或stm32f103),找到以下描述的字段,上面有芯片型号,编译日期等信息,称之描述字段
描述字段
注意!上面找到的描述字段并不是固件的开头。固件开头在前面十来行或几十行,长这样:XX XX 00 20,从描述字段向上搜索16进制数值 00 20就能看到这个开头(!!!开头不是00 20,是 XX XX 00 20)
固件开头
顶栏→搜索→查找16进制数值→00 20 ,右键→选块开始
Ctrl+F(查找文本) → J-Link OB(同第二步),找到下一个固件的描述字段
右键→ 选块结尾 , 此时你就选择了 固件开头 到 下一个固件开头 的字段,此时选块已经包含了所需固件,且超过了固件结尾。
右键→编辑→复制选块→置入新文件 , 保存为.bin文件
2019.01.24更新:第一次弄的时候有点生疏,上面的参考博客也没有看太懂。做到这一步就直接把bin文件烧进去,jlink没有反应,最后还是用的网上hex格式的固件才成功
接着上面步骤:
- 从驱动中提出的固件还不能直接用,要在xxxx 0020前填0,共0x4000个,然后在开头处输入固件的前八个字节。具体见这篇博客结尾处:JLink OB最新固件提取教程
- 完成了上一步后,所得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。
更新前原内容
- 快递已到,将f103换到板上。
- 准备另一个能用的JLink(STLink)供下载固件用,连好待修复JLink的SWCLK SWDIO(不要连错到板上另一组SWCLK SWDIO)
- 打开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 固件提取及维修的更多相关文章
- OWASP固件安全性测试指南
OWASP固件安全性测试指南 固件安全评估,英文名称 firmware security testing methodology 简称 FSTM.该指导方法主要是为了安全研究人员.软件开发人员.顾问. ...
- 一个文件夹可以link 到另外一个文件夹
Creates a symbolic link. MKLINK [[/D] | [/H] | [/J]] Link Target /D Creates a directory symboli ...
- 超级MINI STLINK V2 官方固件自动升级 ST-Link 【worldsing 笔记】
简介: 支持所有带SWIM接口的STM8系列单片机 支持所有带SWD接口的STM32系列单片机 完全兼容Keil,STVP,STVD,IAR,COSMIC,STM32 ST-LINK Utility! ...
- 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式
随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全. 大家是否 ...
- 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数
clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure ...
- 牛客多校第四场 J Free 最短路
题意: 求最短路,但是你有k次机会可以把路径中某条边的长度变为0. 题解: 跑k+1次迪杰斯特拉,设想有k+1组dis数组和优先队列,第k组就意味着删去k条边的情况,每次松弛操作,松弛的两点i,j和距 ...
- windows7命令帮助大全
有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库 ...
- DOS命令集
1.ASSOC显示或修改文件扩展名关联.ASSOC [.ext[=[fileType]]] .ext 指定跟文件类型关联的文件扩展名 fileType 指定跟文件扩展名关联的文件类型键 ...
- BZOJ1070 [SCOI2007]修车
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
随机推荐
- java日志框架系列(5):logback框架appender详解
1.appender 1.什么是appender Appender 是负责写记录事件的组件. Appender 必须实现接口“ch.qos.logback.core.Appender”.该接口的重要方 ...
- redis 持久化 ——RDB
文章目录 RDB 关于 fork dump.rdb 文件 如何触发 RDB 快照 如何恢复 优势 劣势 停掉 RDB RDB redis database 的简写 : 在指定时间间隔后,将内存中的数据 ...
- setting中executable for debug session对话框
- 剑指offer52:正则表达式匹配
1 题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符‘.’表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个 ...
- python笔记006-文件操作
1文件操作... 1 1.1打开和关闭文件... 1 1.1.2 open函数... 1 1.2 文件 File对象的属性... 1 1.2.1 属性... 1 1.2.2 方法... 2 1.2.3 ...
- yum报错Loaded plugins: fastestmirror, security
vim /etc/yum/pluginconf.d/fastestmirror.conf enabled = 0 vim /etc/yum.conf plugins=0 yum clean dbcac ...
- 【规律】Farey Sums
[参考博客]: https://blog.csdn.net/meopass/article/details/82952087 Farey Sums 题目描述 Given a positive inte ...
- SAS学习笔记33 格式修饰符
冒号(:)格式修饰符 从非空格开始读取变量所对应的数据,直到满足以下任何一种情况 遇到下一个空格列 对应变量所定义的长度已经读满 数据行结束 &格式修饰符 修饰所读取为字符型的列数据中含有一个 ...
- 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
原文:在论坛中出现的比较难的sql问题:5(row_number函数 分页.随机返回数据) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.在inner join后, ...
- 如何在含有json类型的字段上建立多列索引
废话不多,直接上图 如 : 表结构如图 那么我想在这三个字段上建立一个唯一索引,目的是为了防止重复插入数据, 1.首先,说明一下 data中的json中,key为 tagID 和 ...