Hack mini K

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(准备固件)
(尝试)
第134行: 第134行:
 
打开微信,扫一扫如下二维码:
 
打开微信,扫一扫如下二维码:
  
[[文件:Mjyun-plug.jpg]]
+
[[文件:Maike-wifi-ctrl-2233-all.jpg]]
  
  

2016年7月27日 (三) 03:56的版本

目录

1 拆解

整个 mini K 的塑料外壳是超声波焊接,无螺丝设计

先撬开中间的白色上盖,再撬开绿圈,整个电路板就露出来了:

Minik-teardown1.jpg


零线火线的插脚是焊接到PCB上的,动烙铁取下电路板:

Minik-teardown2.jpg



2 分析

2015 年新的小 K 插座,全部使用 ESP8266 方案,由于芯片需求量大, ESP8266 的厂家乐鑫,提供芯片打标服务。看到控客的这个 LOGO,挺唬人的,实际还是 ESP8266:

Minik-wifimod.jpg


SPI Flash 为 MXIC 25L80 8Mbit,1MB 大小


芯片引脚(详细参考: ESP8266_GPIO):

Esp8266ex-layout.jpg


借助万用表确认一下小 K 插座 WiFi 模块的引脚:

Minik-wifimod-pin.jpg


把 GND, VCC (3.3V), TX, RX 和 GPIO0 焊上杜邦线,就能用串口板快乐地刷机了 8-)


GPIO0 接 GND,通电 (接上 VCC 3.3 和 GNU),就能进入刷机模式


小K mini 对引脚资源布局为:
  • GPIO15 控制继电器
  • 红色 LED 指示继电器状态,自动,用户无需关心
  • GPIO12 关联按钮,短按手动开关继电器,长按恢复出厂设置(需重新配置 WiFi)
  • RX (U0RX, GPIO3) 关联蓝色 LED,指示插座联网和 WiFi 配置状态




3 刷机

3.1 准备固件

获取 noduino-sdk:

$ git clone --recursive git://github.com/icamgo/noduino-sdk.git noduino-sdk


生成 toolchain (you need Python 2.7):

$ cd noduino-sdk/toolchain
$ ./gen.py

编译:

$ cd ../sketch/plug-minik
$ make


各平台下,Noduino SDK 使用,更多参考:



3.2 进入刷机模式

上面我们已经把小 K 插座 WiFi 模块的 GND, VCC (3.3V), TX, RX 和 GPIO0 焊上杜邦线了

准备一个 USB 转串口板,此处我们使用一个 FT232RL USB 转串口板

Ft232.jpg

Hack-minik.jpg


如下接线:

  • USB_GND -----> miniK_GND
  • USB_RXD -----> miniK_TX
  • USB_TXD -----> miniK_RX
  • USB_GND ------> miniK_GPIO0

以上接好后,最后 USB_VCC3.3 -----> miniK_VCC 通电开机,即进入刷机模式



3.3 刷写固件

还是在 examples/plug-minik 目录下,直接 make flash:

$ make flash

即可上传固件。不同平台下,你的串口设备号可能不一样,确认一下你的串口设备,比如在 Windows 下 FT232RL 板可能被识别为 COM3 (设备管理器里查看),则:

$ make flash ESPPORT=COM3

即可



3.4 尝试

刷入的固件是可用微信控制的,上传完成后,拔掉 GPIO0 ---> GND 的链接,断电重启一下,系统即进入新固件运行。


打开微信,扫一扫如下二维码:

Maike-wifi-ctrl-2233-all.jpg


自动进入如下:

Mjyun-plug-nff.jpg


与此同时串口的输出:

bcn 0
del if1
usl
mode : sta(18:fe:34:f9:0f:17)
add if0
SC version: V2.5.1
f r0, scandone
f r0, scandone
SC_STATUS_FIND_CHANNEL


此时设备没有 SSID 和 Password 无法连接无线路由。点上图中的 "点此设置" 进入:


Airkiss-nff-3.jpg


WiFi 配置好后,微信很快就在同一 LAN 下发现了设备:

Mjyun-plug-nff2.jpg


点击即可进入绑定页面,按提示完成设备绑定!


完成后,进入公众号的菜单 “探索” ---> “我的设备” ---> 选择你的刚刚的设备,即可进入控制页:

Mjyun-plug-h5-2.jpg


Mjyun-plug-h5.jpg



4 原始固件

默认串口波特率 74880,上电输出:

 ets Jan  8 2013,rst cause:1, boot mode:(3,0)

load 0x40100000, len 612, room 16 
tail 4
chksum 0x12
load 0x3ffe8000, len 788, room 4 
tail 0
chksum 0x50
load 0x3ffe8314, len 264, room 8 
tail 0
chksum 0x4a
csum 0x4a

2nd boot version : 1.1
  SPI Speed      : 40MHz
  SPI Mode       :   SPI Flash Size : 8Mbit
jump to run user2

pp_task_hdl : 3fff59b8, prio:14, stack:512
pm_task_hdl : 3fff63b0, prio:1, stack:176
ApiMsgMutex created
idle_task_hdl : 3fff80a8
tim_task_hdl : 3fff83c0
xPortStartScheduler
frc2_timer_task_hdl:3fff9018, prio:12, stack:200

OS SDK ver: 0.0.8 compiled @ Apr 16 2015 19:50:09
phy ver: 273, pp ver: 8.3

mode : sta(18:fe:34:f6:44:d1)
add if0
scandone
del if0
usl
sul 0 0
add if0
scandone
scandone
add 0
aid 5

connected with Noduino-AP, channel 7
dhcp client start...
cnt 
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1


可知,这个版本基于芯片厂 SDK 0.0.8 开发 (应该是 0.8), 1MB Flash 分区为 512KB + 512KB 支持 OTA,bootloader 版本 boot_v1.1.bin


风枪吹下 SPI Flash MXIC 25L80,用工具读取完整的 Flash 镜像 (1MB) 备份一下,取名 miniK-25l80.bin

comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ ls -l ../../sdk/bin/boot_v1.1.bin
-rw-r--r-- 1 comcat inetsim 1712 Dec 24 14:37 ../../sdk/bin/boot_v1.1.bin
comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ dd if=fw/miniK-25l80.bin of=minik-boot.bin bs=1 count=1712
1712+0 records in
1712+0 records out
1712 bytes (1.7 kB) copied, 0.0110958 s, 154 kB/s
comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ ls -l minik-boot.bin
-rw-r--r-- 1 comcat inetsim 1712 Dec 24 14:39 minik-boot.bin

comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ md5sum ../../sdk/bin/boot_v1.1.bin 
8f5fe3c7e97afa8b743cc4a39ae9c535  ../../sdk/bin/boot_v1.1.bin
comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ md5sum minik-boot.bin
636d02a38685ae0c48302ee2f9654f96  minik-boot.bin


md5 不一样,得具体看看差别在哪里:

comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ xxd -g1 ../../sdk/bin/boot_v1.1.bin  > boot_v1.1.bin.hex
comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ xxd -g1 minik-boot.bin > minik-boot.bin.hex 
comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ diff -uN boot_v1.1.bin.hex minik-boot.bin.hex > x.diff
comcat@jackslab:/work/xwifi/noduino-sdk/examples/plug-minik$ cat x.diff
--- boot_v1.1.bin.hex	2015-12-24 14:40:04.523468413 +0800
+++ minik-boot.bin.hex	2015-12-24 14:40:15.991525280 +0800
@@ -1,4 +1,4 @@
-0000000: e9 03 00 00 70 00 10 40 00 00 10 40 64 02 00 00  ....p..@...@d...
+0000000: e9 03 03 20 70 00 10 40 00 00 10 40 64 02 00 00  ... p..@...@d...
 0000010: 14 83 fe 3f 30 83 fe 3f 60 83 fe 3f 44 83 fe 3f  ...?0..?`..?D..?
 0000020: 68 83 fe 3f 94 83 fe 3f 7c 83 fe 3f 9c 83 fe 3f  h..?...?|..?...?
 0000030: b0 83 fe 3f 10 80 fe 3f 00 80 10 40 d8 83 fe 3f  ...?...?...@...?


明了,差别在开头的第 3、4 字节

第 3 字节指示 SPI Flash Interface 的模式,0x03 表示 dout 模式,其他: 0x0 = QIO, 0x1 = QOUT, 0x2 = DIO, 0x3 = DOUT

第 4 字节的高四位指示 SPI Flash 的容量: 0 = 512KB, 1 = 256KB, 2 = 1MB, 3 = 2MB, 4 = 4MB;低四位指定 SPI Flash 的速度: 0 = 40MHz, 1= 26MHz, 2 = 20MHz, 0xf = 80MHz


这两个字节是生成固件的时候写入的,因此,可以肯定 mini K 就是用的 boot v1.1




5 电路分析

Minik-pcbb.jpg

5.1 电源

非隔离电源,主芯片 F7298(丝印 1ADxx,2015年四月的批次大部分为 1ADGE),内带 500V 30 Ω MOSFET,最大 2W 输出

F7298 Datasheet


类似的有 MP155GJ MP155GJ Datasheet


整流桥:MB6F


封装为SOT23-5,丝印为 ws33 ,是 WL2803E,3 .3V 的 CMOS LDO,Ultra low dropout, 500mA

WL2803E Datasheet


超快开关二极管 WUGC10JH (600V 1A) 可以用 SOD-123FL,丝印为A7 的 1N4007 替代



5.2 Relay

继电器为HKE(浙江汇港)的5V、10A,高灵敏型单组常开触点继电器,型号为 HRS3FNH-S-DC5V-A:http://zh.hke.cn/article/id-9

HRS3FNH Datasheet: http://zh.hke.cn/bg_attach/2015/07/93.pdf


SOT-23 封装,丝印 J3Y 为 CJ(长电科技)的 S8050,是颗NPN三极管,用于驱动继电器工作。



5.3 电路图

以下由 Jack Tan 分析、手绘草图:

Minik-power.jpg


Minik-relay.jpg



6 电源参考

6.1 强弱电转换

主控非隔离电源芯片 F7298 典型应用电路:

F7298.refer.sch.png



6.2 3.3V LDO

6.2.1 WL2803E

Feature
  • 500mA CMOS LDO
  • Ultra low dropout, 130mV (Typ.) @ 500mA load current
  • The quiescent current is typically 150uA
  • Vin MAX = 6.5V
  • SOT23-5 small package
  • Output 3.3V is marking WS33/YYWW (YY - Year code, WW - Week code)


Wl2803-pin-app.png



6.2.2 AP2112

Feature
  • 600mA CMOS LDO
  • Low Dropout Voltage (3.3V): 250mV (Typ.) @ 600mA
  • Low Quiescent Current: 55μA (Typ.)
  • Low Standby Current: 0.01μA (Typ.)
  • Vin MAX = 6.5V
  • Provides SOT-23-5, SOT-89-5, and SOIC-8 packages


AP2112-pin-app.png



6.2.3 WL2803G

需要低 dropout voltage 的场合,替换 AMS1117

Feature
  • 1000mA CMOS LDO
  • Dropout voltage : 260mV @ Iout = 800mA load current
  • The quiescent current is typically 150uA
  • Vin MAX = 6.5V
  • SOT-223-3L package
  • Output 3.3V is marking 2803G**/YYWW [ ** - Voltage code (33: 3.3V), YY - Year code, WW - Week code ]


Wl2803g-pin-app.png



6.2.4 AMS1117-3.3

Feature
  • 1000mA LDO
  • Dropout voltage : 1.1V @ Iout = 800mA load current
  • The quiescent current is typically 5mA
  • Vin MAX = 15V
  • SOT-223-3L package


AMS1117-pin.png



6.3 DC-to-DC

6.3.1 TPS63001

  • Input Voltage Range: 1.8 V to 5.5 V
  • Fixed and Adjustable Output Voltage Options from 1.2 V to 5.5 V
  • Up to 96% Efficiency
  • 1200-mA Output Current at 3.3 V in Step-Down Mode (VIN = 3.6 V to 5.5 V)
  • Up to 800-mA Output Current at 3.3 V in Boost Mode (VIN > 2.4 V)
  • Automatic Transition Between Step-Down and Boost Mode
  • Device Quiescent Current less than 50 μA
  • Power-Save Mode for Improved Efficiency at Low Output Power
  • Load Disconnect During Shutdown
  • Overtemperature Protection
  • Small 3mm × 3mm 10-Pin VSON Package (QFN)


TPS63001-APP-SCH.png


TPS63001-APP-Layout.png



6.3.2 BQ27441



7 MP2307

宽电压输入、至少 90% 转换效率


典型应用电路:

Power-mp2307.png


R1 的大小,控制输出电压的值










个人工具
名字空间

变换
操作
导航
工具箱