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/转 ...
随机推荐
- [知乎]鲲鹏920对比intel8180
作者:韩朴宇链接:https://www.zhihu.com/question/308298687/answer/568737742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- C#中输入法全角转换半角
一般情况下,我们都是使用英文半角的来进行编程,包括输入框和密码框的设定一般也是英文半角,但往往有些人使用全角输入,登陆不进去还以为你系统错误,现整理了几种全角切换半角和设定输入法的几种方法. 方法一: ...
- oracle数据库与其他数据库区别
本文用的是Oracle 10g数据库,利用PL/SQL Developer的集成开发环境(安装可以自行百度) Oracle数据库 ---> 数据库实例 ---> 表空间(逻辑单位)( ...
- 理解Python函数和方法
什么是函数? 函数是抽象出的一组执行特定功能的重复代码,通俗理解,就是对一些重复的工作进行封装和然后直接调用,避免重复造轮子. Python中的函数如何定义? 使用def关键字,结构如下: def 函 ...
- Redis慢日志取出来
http://blog.chinaunix.net/uid-31396856-id-5758295.htmlhttps://blog.51cto.com/legehappy/2151986?sourc ...
- SAS学习笔记23 线性回归、多元回归
线性回归 由样本资料计算的回归系数b和其他统计量一样,存在抽样误差,因此,需要对线性回归方程进行假设检验 1.方差分析 2.t检验 相关系数的假设检验 相关系数(correlation coeffic ...
- Comet OJ - Contest #5 迫真图论 (图分块)
大意: 给定无向图, 点$i$点权$b_i$, 边$(x,y,z)$对序列贡献是把$A[b_x \oplus b_y]$加上$z$. 多组询问, 一共三种操作: 1. 修改点权. 2.修改边权. 3. ...
- (五)Struts之Action类基础(二)
上一章节末((三)Struts之Action类基础(一))介绍了如何获取用户输入数据的获取.接着就是在Struts中怎么把数据响应给用户端,这就必须要求我们把数据放到作用域中,然后才能显示到用户浏览器 ...
- solr 配置中文分析器/定义业务域/配置DataImport功能(测试用)
一.配置中文分析器 使用IKAnalyzer 配置方法: 1)把IK的jar包添加到solr工程中/WEB-INF/lib目录下 2)把IK的配置文件扩展词典, ...
- 微软升级 WSL Window Subsystem for Linux Win10系统自带Linux
在设计之初,微软就允许类似于Win32这种子系统运行于windows NT内核之上,它可以为上层应用提供编程接口,同时避免应用去实现内核里的一些调用细节.NT内核的设计在最开始就可以支持POSIX,O ...