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/转 ...
随机推荐
- Chrome 浏览器光标定位到地址栏
Windows: Ctrl + L 或 Alt + D Mac: Command + L Linux: Ctrl + L
- Python 用hashlib求中文字符串的MD5值 (转自 haungrui的专栏)
使用过hashlib库的朋友想必都遇到过以下的错误吧:“Unicode-objects must be encoded before hashing”,意思是在进行md5哈希运算前,需要对数据进行编码 ...
- sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解
介绍了sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解 --服务器角色: --固定服务器角色具有一组固定的权限,并且适用于整个服务器范围. 它们专门用于管理 SQL S ...
- JS 通过注册表调用启动本地软件
(关键点:所有软件安装的注册表路径是不会变化的,这个注册表路径需沟通软件商家获取或者通过自己安装在注册表中查找得到) // 调用 注册表编辑类 方法 function run_jxpgj(){//进项 ...
- 只学python行吗
常言道:"流水的语言,铁打的Python",目前它可以说是已经"睥睨天下,傲视群雄"了.它天生丽质,易于读写,非常实用,从而赢得了 广泛的群众基础,被誉为&qu ...
- time() 函数时间不同步问题
1.时区设置问题 处理方法:编辑php.ini 搜索 “timezone” 改写为 PRC 时区 2.服务器时间不同步 处理方法:设置服务器时间和本地时间进行同步
- SAS学习笔记30 SAS各种常用随机函数
UNIFORM(seed) 产生(0,1)区域均匀分布随机数,乘同余发生器 RANUNI(seed) 产生(0,1)区域均匀分布随机数,素数模发生器 NORMAL(seed) 产生标准正态分布随机数, ...
- C# 注册windows 服务
sc delete CCGSQueueService sc create CCGSQueueService binpath= "D:\DKX4003\services\CCGSQueueSe ...
- 用python将项目中的所有代码(或txt)合并在一个文件中
设计模式开卷考试给的例子代码都是一个类一个java,实在太恶心了,所以写了一个python脚本. import os fileansdir=r'C:\Users\tonyson_in_the_rain ...
- (五)springmvc之获取表单提交的数据
8.1:使用Request <form method="post" id="form1" action="<%=request.getCo ...