惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
小众软件
小众软件
博客园 - 叶小钗
宝玉的分享
宝玉的分享
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
U
Unit 42
F
Fortinet All Blogs
IT之家
IT之家
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell

豆沙工作室

不想(二)十七岁 小点阵字 杰理 WTS 格式音频转换和打包 [11ty] 增量式地刷新 CDN 缓存 站起来,为你的成果答辩吧 公理还是定理? [11ty] 处理资产文件的 CDN 缓存问题 [11ty] 无障碍设计:正确地标识图和表 停止 Mac 上的时间机器备份 从 Gitea 迁移到 Forgejo 评论里的私信消息 记得清理你的日志文件 招魂 Annihilation [11ty] 使用 Pagefind 实现静态站点的搜索 直面死亡 [11ty] 修复 RSS 里的数学公式 看到了一个神奇的 UA PreFound:10B - 四次击键 一点小小的 AI 震撼 PreFound:10A - 文本之外,还有(绘)文字 PreFound:09 - 色彩运算子 计算机不予申辩 Re-Game 2.0 Addendum C - Press START PreFound:08 - 动效与仿射 PreFound:07 - 图片拼贴报 PreFound:06 - 漫游雪花海 PreFound:05 - 写出到屏幕 And Trek I Will PreFound:04 - 举起渲染器
Get an Oscilloscope
dousha99 · 2026-08-16 · via 豆沙工作室

年轻人的第一台示波器。

对于搞硬件的人来说,示波器几乎是必不可少的工具。但是由于囊中羞涩,很长一段时间我只能通过那个 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. 我不能保证这个小手段在之后的固件版本仍能起效,所以祝君好运。

例行警告结束,我们进入正题。

参考 Disappear9EEVBlog 论坛上各路大神的方案,需要先准备这些东西:

  • 一根网线,以及局域网
  • 在局域网的电脑,装好 Python;手机的话你得自己想办法跑 Python 脚本

玩法如下:

  1. 通过网线将示波器连接到局域网
  2. 示波器端,选择功能 - 菜单... - 接口设置 - 局域网配置
  3. 勾选 IP 配置自动获取,确认此对话框,等待示波器连接到网络
  4. 关闭对话框再重新打开即可看到示波器的 IP 地址
  5. 在电脑上通过浏览器直接打开示波器的 IP 地址即可进入示波器管理页面
  6. 进入 Home 页面,记下示波器的序列号 (SN) 备用,它应该是 SDS 开头的
  7. 进入 SCPI 命令页面
  8. 键入 SCPI 命令 MD5_SRLN? 并发送,获取示波器的序列号备用
  9. 修改附录中的 Python 脚本对应位置,并运行脚本以获取各个模式的解锁码
  10. 键入 SCPI 命令 MCBD? 查询当前示波器的解锁码,它应该和 70M 一行的码值一致;如果不一致说明 SCOPEIDSN 输入有误,需要修正。一定要注意不要修改大小写或者引入多余的空格
  11. 找到 100M 一行对应的码,键入 SCPI 命令 MCBD 100M激活码 先将系统应用到 100M 的状态;注意把 100M激活码 替换成实际输出的值,比如 MCBD 3VN1234567890HY5
  12. 操作示波器,选择功能 - 存储/调出... - 调出;类型选择「出厂设置」,然后选择「调出」选项在 100M 模式下恢复出厂设置
  13. 恢复成功后,回到电脑端,键入 SCPI 命令 MCBD 200M激活码;同理需要把 200M激活码 替换成脚本输出的实际激活码
  14. 操作示波器,再次按照第 12 步的方法恢复出厂
  15. 拔掉示波器的所有探头
  16. 操作示波器,选择功能 - 菜单... - 维护 - 自校正,确认开始校准过程
  17. 校准过程会需要跑一段时间,一般要跑五六分钟,有时候会跑更久,坐和放宽
  18. 校准完成后,选择功能 - 重新启动
  19. 示波器重启完成后,在系统信息里便会显示自己的型号是 SDS824X HD 了

至于它会不会解锁 824X 型号的 100Mpts 存储深度,俺也不确定。

如果你还需要激活 PA 选件,那么做如下操作:

  1. 操作示波器,选择功能 - 菜单... - 软件选件
  2. 下拉菜单选择 PA 选件,然后输入破解脚本 PWA 行对应的序列号即可;注意大小写
  3. 确认即可激活选件,重启即可

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