年轻人的第一台示波器。
对于搞硬件的人来说,示波器几乎是必不可少的工具。但是由于囊中羞涩,很长一段时间我只能通过那个 50 块的 Saleae Logic 山寨逻辑分析仪用 12M 的采样率勉强看一下自己画出来的小东西到底是有什么问题。(我知道这玩意最高是 24M, 但因为毕竟是山寨的,24M 下工作非常不稳定,要持续长时间抓波形只能跑 12M.)
倒没有说 50 块的逻辑分析仪有啥不好——学生时代抢不到学校又新又好的是德机器的时候,只能退而求其次用隔壁的 50MHz 惠普模拟示波器;而整个实训楼有示波器的台子都被占满的时候,这个只需要一星期饭钱的小玩意真是能救人于水火。
但一到模拟电路部分,逻辑分析仪就彻底没法救了,无论怎样都需要一台像样的示波器才行。而且从学校毕业之后,想再在自己空闲的时候蹭一台示波器用就更不可能了。所以便在盘算着买一台示波器的事情。
因为我肯定是没啥能力去搞真·高速 PCB, 按照之前的惯例,一台 100MHz 的示波器就足够我调试我能够设计的几乎全部电路了。正好最近碰到鼎阳的机器在打折,其中 SDS804X HD 这个型号看起来相当有吸引力:
- 4 通道输入
- 70MHz 前端†
- 2GSa/s 采样率
- 12-bit 分辨率
- 50Mpts 存储深度
以及:
- †用一点小手段,你可以解锁最高 200MHz, 因为实际上这个东西只是软件锁,模拟前端都一样的。
只要 2k 出头,这谁看了不迷糊。我是迷糊了好一阵子,等我反应过来的时候示波器已经送到门口了。
你说的那个小手段……
首先,还是请大家有经济能力的情况下,正经支持一下国产仪器仪表。以及,一旦你选择破解示波器固件,你可能会失去保修和校准资格。如果你需要做任何严肃的测量,尤其是在商用或更严格的环境下测量,请直接购买满足你的需求的硬件以获取对应的仪表校准保证。
再强调一遍:这个小手段无法保证破解后的测量精度一定满足指标要求。就和解锁 CPU 被封锁的核心一样,这个操作本身就存在不确定的风险——示波器厂家完全可以把模拟前端性能不满足 200MHz 指标但是满足 70MHz 指标的板子装给标称 70MHz 的示波器用;在这种情况下破解示波器绝对会导致测量出现问题。
当你执行破解过程的时候,一定要检查输入的命令是否正确、核对解锁码是否正确。虽然没试过输入错误的激活码会导致什么后果,但最差的后果永远是锁机。你总不希望刚到手的机器就得寄回去修吧。
我收到的示波器固件版本是 1.1.6.5. 我不能保证这个小手段在之后的固件版本仍能起效,所以祝君好运。
例行警告结束,我们进入正题。
参考 Disappear9 和 EEVBlog 论坛上各路大神的方案,需要先准备这些东西:
- 一根网线,以及局域网
- 在局域网的电脑,装好 Python;手机的话你得自己想办法跑 Python 脚本
玩法如下:
- 通过网线将示波器连接到局域网
- 示波器端,选择功能 - 菜单... - 接口设置 - 局域网配置
- 勾选 IP 配置自动获取,确认此对话框,等待示波器连接到网络
- 关闭对话框再重新打开即可看到示波器的 IP 地址
- 在电脑上通过浏览器直接打开示波器的 IP 地址即可进入示波器管理页面
- 进入 Home 页面,记下示波器的序列号 (SN) 备用,它应该是 SDS 开头的
- 进入 SCPI 命令页面
- 键入 SCPI 命令
MD5_SRLN?并发送,获取示波器的序列号备用 - 修改附录中的 Python 脚本对应位置,并运行脚本以获取各个模式的解锁码
- 键入 SCPI 命令
MCBD?查询当前示波器的解锁码,它应该和70M一行的码值一致;如果不一致说明SCOPEID和SN输入有误,需要修正。一定要注意不要修改大小写或者引入多余的空格 - 找到
100M一行对应的码,键入 SCPI 命令MCBD 100M激活码先将系统应用到 100M 的状态;注意把100M激活码替换成实际输出的值,比如MCBD 3VN1234567890HY5 - 操作示波器,选择功能 - 存储/调出... - 调出;类型选择「出厂设置」,然后选择「调出」选项在 100M 模式下恢复出厂设置
- 恢复成功后,回到电脑端,键入 SCPI 命令
MCBD 200M激活码;同理需要把200M激活码替换成脚本输出的实际激活码 - 操作示波器,再次按照第 12 步的方法恢复出厂
- 拔掉示波器的所有探头
- 操作示波器,选择功能 - 菜单... - 维护 - 自校正,确认开始校准过程
- 校准过程会需要跑一段时间,一般要跑五六分钟,有时候会跑更久,坐和放宽
- 校准完成后,选择功能 - 重新启动
- 示波器重启完成后,在系统信息里便会显示自己的型号是 SDS824X HD 了
至于它会不会解锁 824X 型号的 100Mpts 存储深度,俺也不确定。
如果你还需要激活 PA 选件,那么做如下操作:
- 操作示波器,选择功能 - 菜单... - 软件选件
- 下拉菜单选择 PA 选件,然后输入破解脚本
PWA行对应的序列号即可;注意大小写 - 确认即可激活选件,重启即可
Python 脚本和样例运行输出
import hashlib
# SCPI页面运行命令 MD5_SRLN? 获得SCOPEID
SCOPEID = '0000000000000000'
# 在 Home 页面找到SN进行替换
SN = 'SDS00000000000'
# 以下内容不要动
Model = 'SDS800X-HD'
bwopt = ('70M', '100M', '200M')
otheropt = ('PWA',)
hashkey = '5zao9lyua01pp7hjzm3orcq90mds63z6zi5kv7vmv3ih981vlwn06txnjdtas3u2wa8msx61i12ueh14t7kqwsfskg032nhyuy1d9vv2wm925rd18kih9xhkyilobbgy'
def gen(x):
h = hashlib.md5((
hashkey +
(Model+'\n').ljust(32, '\x00') +
opt.ljust(5, '\x00') +
2*(((SCOPEID if opt in bwopt else SN) + '\n').ljust(32, '\x00')) + '\x00'*16).encode('ascii')
).digest()
key = ''
for b in h:
if (b <= 0x2F or b > 0x39) and (b <= 0x60 or b > 0x7A):
m = b % 0x24
b = m + (0x57 if m > 9 else 0x30)
if b == 0x30:
b = 0x32
if b == 0x31:
b = 0x33
if b == 0x6c:
b = 0x6d
if b == 0x6f:
b = 0x70
key += chr(b)
return key.upper()
print('--------------------------------')
print('\n')
for opt in bwopt:
print('{:5} {}'.format(opt, gen(SCOPEID)))
print('\n')
print('--------------------------------')
print('\n')
for opt in otheropt:
print('{:5} {}'.format(opt, gen(SN)))
样例运行输出(具体的解锁码已隐去):
$ python unlock.py
--------------------------------
70M CAP__________P3F
100M 3VN__________HY5
200M 2MG__________3RP
--------------------------------
PWA 89T__________PXM













