本帖最后由 winterpigz 于 2017-3-9 11:06 编辑
整理自【https://johan.kanflo.com/upgrading-your-dps5005/】感谢原作者的努力
以下内容使用linux工具进行开发和下载
注释:该固件目前不支持恒流模式
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
这是第三篇关于破解DPS5005的文章。 第一部分涉及DPS5005的逆向工程, 第二部分涉及OpenDPS的设计。
虽然本文针对5005,但它应该可以扩展到整个DPS系列,我目前只有在两个5005上进心了测试。 在开始之前是免责条款 - 出厂固件将无法恢复 。由于STM32上启用了读出保护,我无法提取原固件,我同时也没有它的源码。所以 如果您的DPS无法工作 ,我将不承担任何责任 。 OK,让我们开始吧。 需要的部件有DPS5005,STLink(淘宝版的就行)和一些排线。 您可以将排线焊接到DPS上,也可以使用插头和杜邦线进行下载。
拆机首先需要从半封闭的外壳上拆下PCB。 使用小的平头螺丝刀将PCB从扣片上松开。
小心不要破坏保持卡扣。 我们需要固定前面板和按建。
用AWG26的线连接SWO和UART端口。外壳空间有限, 建议不要焊接引脚。我在电缆的一端用了杜邦线壳,以将它们连接到STLink和FTDI。 注意:电缆要从从显示屏侧连入。 上:SWO,下:UART
如果你不想焊接(并且不想远程控制功能)(而且有一只“铁手”),你可以用三个杜邦公母线连到STLink克隆,然后用手联着排线和DPS进行下载。
编译OpenDPS 干完了这个,你应该安装OpenOCD和ARM GCC工具链。 Launchpad的GCC是一个很好的起点。 OpenOCD就不同。 MacOS的用户可以在这里找到OpenOCD (它安装为/ Applications / GNU ARM Eclipse / OpenOCD / 0.10.0-201610281609-dev / bin / openocd)。 有了这些工具,您就可以进行下一步了。 git clone --recursive git@github.com:kanflo/opendps.git
cd opendps
make -C libopencm3
make -C opendps
下载接下来,您需要解锁STM32的闪存,然后再下载固件(这将完全擦除原内容) cd openocd/scripts
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
如果连接成功,您将收到以“Info:stm32f1x.cpu:hardware has 6 breakpoints,4 watchpoints”结尾的几行输出。 打开另一个终端窗口: telnet localhost 4444
敲入: reset halt flash erase_address unlock 0x08000000 0x10000
你可能会看到以下的错误: Device Security Bit Set stm32f1x.cpu: target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000003a msp: 0x20000800 stm32x device protected
faiLED erasing sectors 0 to 63
不要急。 重新启动OpenOCD,重启DPS电源,然后重试。 这一次你应该看到: erased address 0x08000000 (length 65536) in 0.094533s (677.012 KiB/s)
下载固件: cd opendps/opendps
make flash
最后两行应为: ** Verified OK ** ** Resetting Target **
你的DPS5005现在已经变为一个OpenDPS 5005。
如果在任何步骤事情不顺利,请随时在原网站留言。 如果你完成到这部,你应该可以使用OpenDPS作为独立的设备,也可以通过串行端口或ESP8266通过wifi控制它。
简明用户手册当您打开OpenDPS电源时,将显示当前的电压和过流设置,电源输出缺省被关闭。 按ON / OFF将打开电源输出,显示屏现在将显示测量的输出电压和测量的电流。 如果屏幕闪烁了一次然后返回显示电压/电流设置,模块进入过流保护状态。再次按ON / OFF关闭电源输出。 按SET按钮进入编辑模式。 按V和A按钮在电压和电流设置之间移动。 按下旋钮可侧向移动,旋转旋钮更改数值。 再次按SET退出编辑模式。 按住旋钮两秒钟以锁定键,再次长按可解锁。 长按SET键将反转显示。 当您的OpenDPS启动时,它将等待来自连接的ESP8266的WiFi连接,并且WiFi图标将在1Hz闪烁。 如果没有WiFi连接,则WiFi图标将在10秒后关闭。 如果连接WiFi时出错,则WiFi图标将以4Hz闪烁。 远程串行控制如果将电线焊接到UART端口,可以连接FTDI适配器并使用dpsctl.py工具连接模块: dpsctl.py -d /dev/tty.usb.yourdevice --ping
TFT应闪烁一次作为视觉指示。 如果得到如下错误“:超时与设备通话”,需要检查RX/TX和GNDs是否连接正确。 端口也可以在系统环境变量中设置 export DPSIF=/dev/tty.usb.yourdevice
设置DPSIF变量后,可以试试将输出电压设置为3.3V: dpsctl.py --voltage 3300
打开模块输出: dpsctl.py --power on
读入测量值: % dpsctl.py --status V_in : 7.71 V V_set : 3.30 V V_out : 3.32 V (on) I_lim : 0.100 A
I_out : 0.040 A
如果你只需要串行控制,可以通过WIFI = 0编译开关 禁用WIFI,如下所示 make clean ; make WIFI=0 flash
远程Wifi控制任何带UARTESP8266板都可以用来进行wifi控制。 连接GND,RX和TX,编译和下载esp8266-proxy(不要忘记设置您的WiFi密码),就可以了。 git clone https://github.com/kanflo/esp-open-rtos.git cd esp-open-rtos git submodule init git submodule update git checkout -b netif remotes/origin/sdk_system_get_netif export EOR_ROOT=`pwd` echo '#define WIFI_SSID "my ssid"' > include/private_ssid_config.h echo '#define WIFI_PASS "my secret password"' >> include/private_ssid_config.h cd /path/to/esp8266-proxy
make && make flash
OpenDPS连接到无线网络后,可以使用'scan'命令找到它的IP地址: % dpsctl.py --scan 172.16.3.203
1 OpenDPS device found
接下来ping: % dpsctl.py -d 172.16.3.203 --ping
TFT应闪烁一次作为视觉指示。 如果您收到“错误:超时与设备172.16.3.203交谈”,需要检查RX/TX和GNDs是否连接正确。 dpsctl.py命令wifi和串行端口使用方式相同。
遗憾的是,您无法用OpenDPS为ESP8266供电。 SWO端口旁边的VDD引脚连接到U4(在TFT下),一个MD7133H 3.3V稳压器,它只提供30mA(没错三十毫安)。 此外,该稳压器由U3(在背面,螺钉端子旁边)供电,这是一个XL7005A提供400mA @ 5V,这对于ESP8266可能不够用。 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
That’s it, have fun hacking your DPS5005!
|