本帖最后由 cruelfox 于 2021-4-17 15:49 编辑
上次拆废的 Vidonn 手环虽然板子上带的元件多,但是空的GPIO也少。一时也用不起来那么多片外东西,我来想起来还有当研究品买的某手环可以作为精简开发板……
这个叫做“敏狐”的手环,带原装表带、纸盒,两块钱一个买的(公司倒闭,APP没有,当废品)。使用一只CR1625供电,电池负极就直接接触PCB背面的圆形大块铜(原来周围有绝缘纸,被我为了看测试点揭掉了)。元件面也简单,中间盖着的主芯片,旁边晶振和加速度计。
看下主芯片——nRF51822, 不利于DIY的WLCSP封装。所以也要GPIO只能从背面那6个测试点找,以及LED、空缺的元件焊盘。加速度计是 MMA8451.
为了找下那6个测试点当中是否有 SWDIO, SWCLK (否则就没法玩了),将它的电源接上,然后用示波器测量一下测试点的状态。
这个板子电路简单,电池直接接nRF51芯片的电源脚了,没有LDO,没有开关电源。我串了个电流表监测电流,发现过一会儿会跳动一下,说明程序还在运行。
简单判断,6个测试点有两个是高阻,两个是高电平,两个是低电平。再用电流表短路法测试(也可以断电测下通断),发现有两个分别是VDD和GND.
这样剩下的最多只有4个是GPIO了。如果存在 SWDIO, 那就必然是唯一的高电平那个,因为 nRF51xxx 的 SWDIO 和 RESET# 是同一个脚,运行状态必须高电平。我测得这个脚接地会有大约60微安电流,像是内部上拉的作用。
于是,将这个脚当作 SWDIO 焊上线,接到 ST-Link. 然后把 ST-Link 的 SWCLK 拉过来,接触测试另外三个测试点之一进行尝试。
先试的是低电平那个测试点,运气好,OpenOCD 已经连接成功 MCU:
这样就成功获得又一块 nRF51822 开发板(模块)。 在 OpenOCD 的终端里面操作一下看:
这个产品的代码都没有加读保护呢(生产方也没有想去防别人破解抄袭),轻松把 Flash 内容 dump 出来:
> dump_image band.bin 0 262144
dumped 262144 bytes in 4.250000s (60.235 KiB/s)
现在重点是找下有什么 GPIO 可以利用。看下 GPIO 的寄存器,配置情况:
> mdw 0x50000700 32
0x50000700: 00000002 00000002 00000002 00000002 00000002 00000002 00000002 0000060c
0x50000720: 00000002 00020000 0000060c 00030000 00000002 00000002 00000002 00000002
0x50000740: 00000002 00000002 00000002 00000002 00000002 00000002 00000002 00000002
0x50000760: 00000002 00000002 00000002 00000002 00000002 00000002 00000002 00000002
看起来是 GPIO0.7, GPIO0.9, GPIO0.10 和 GPIO0.11 是必然使用了的,因为不是默认配置。其它的暂时还不能确定。
因为加速度计是I2C接口的,故需要检查一下 TWI 设备的配置,发现:
> mdw 0x40004500 4
0x40004500: 00000000 00000000 00000007 0000000a
> mdw 0x40003500 4
0x40003500: 00000000 00000000 ffffffff ffffffff
TWI1设备的 SCL 选择了 GPIO0.7, SDA选择了 GPIO0.10
这个封装无法用万用表量引脚,需要写段程序放进去翻转GPIO(加上拉或下拉并有规律地切换), 然后量板子上疑似GPIO的焊点。用此法,可以确定背面另外两个空的测试点分别是 GPIO0.15 和 GPIO0.16. 可以方便引出UART来调试了。PCB元件面,双色LED用了 GPIO0.4, GPIO0.6. 还有一个未焊接元件的焊盘是 GPIO0.3. I2C的SDA和SCL在加速度计的旁边引出到上拉电阻。如下图:
GPIO0.11 和 GPIO0.9 像是连接在加速度计的 INT1, INT2 脚上,因为这两脚被驱动了,我在 NRF51822 GPIO 加上拉下拉并未影响引脚电压,因此是猜测的。
|