本帖最后由 丿灬幸灬 于 2018-11-2 21:56 编辑 . R% D& u5 y5 { k/ s2 s0 X* [
p' L: r: l( k/ L
GPIO映射 Z' l4 \0 {9 V( N
; Y/ y+ P* E) i我已经把Cottonelle.bin的PrimFixGPIOPIN表映射到一些可读的源代码。在与MIXUSS64的工作交叉引用之后,这就是我们所得到的:" }5 f* n+ F6 Q& z6 P) ]4 Z- I
' c( l5 v, y; s G x! l1 S. k
我们现在有一些潜在的选择。WSDE SDK对于其他数据结构中的GPIO如何声明和引用是一种快速而松散的操作,因此我可能需要更多的字节嗅探来确定是否可以收集更多关于platform_spi_mapping_t 和wiced_spi_device_t的信息。9 V$ v. b0 Q% c8 H
% i- J5 h8 J% M& |: ~1 X, c3 @/ W
更多的GPIO表挖掘
* C1 H" r! N, x5 M' ~2 N1 g# k. x9 d* Q; T5 }
在这里,我在左边对齐了一些修改的GPIO PIN声明,并把它们映射到了原始Cottonelle.bin。紫色下划线是我怀疑数组结束的地方。我认为GPIOH TyPulfF*超出了范围。. R* C0 s* j" a1 L% t
3 k$ z5 v& O' m+ q1 X
' U8 r/ x: K+ Y& q$ `9 a
6 X0 N' l$ I2 Q7 a5 i/ P; _$ q; l$ v& N* F
寻找GPIO6 ^: l: S8 h5 ]1 G# h; @( ~) N+ u
7 u1 V7 m$ E: ?" q/ e& [在左边,我们有一个来自WiCED SDK 2.4.1二进制diff的示例应用程序,在更改了单个字节之后,它针对自身,因此我们可以找到到达GPIO表的方法。
; ]) U; m& ?; P8 K- x% q在中间,示例应用程序。7 x3 ^5 H- e; W+ y3 t0 U% Z3 U: T
在右边,一个类似的转储从DekuuKem的固件转储从棉布。
' _7 q$ l+ ?0 p6 Y现在做一些测绘…4 c: i0 t! N: @0 r4 d
( R# }; {8 a3 T: G) u1 T
. t4 D; ]* G# Z0 R+ ?4 g
: U. o" R4 r$ S+ E) C; o0 Z再回到 flash2 B2 i2 Y( |6 |$ q! R9 S5 V
6 |4 E; O3 E$ y7 l7 R# o/ p/ {让我们回到flash。我是想用st-flash, OpenOCD, pystlink,和 st-util+gdb,得到良好的闪存转储中案例我想回去与亚马逊的即插即用的软件。在与零字节填充内存是可能的,因此将继续读保护。
5 g3 {9 @/ [& E0 A* q8 j0 u6 L* C0 w/ m) N
openocd的手册很好解锁flash命令
* L; u& x" [" [" J& H- V由此产生了大量的输出
9 h9 o( l: [9 H# U0 M$ s B- Debug: 19140 55145 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
4 p' t1 t% ^: U' f4 u( ?; x - Debug: 19141 55145 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x100008 ~/ f, n. U$ k7 I
- Debug: 19142 55146 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
4 m* {' D4 F8 d1 L# B" Y - Debug: 19143 55148 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000! Q* H/ e+ y( |/ g
- Debug: 19144 55148 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000/ F+ a s! i+ B& c) B
- Debug: 19145 55149 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
- f5 K0 ` {7 b1 H' { - Debug: 19146 55150 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
( N, i, x6 J8 g$ m - Debug: 19147 55150 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
$ }+ W: k- q7 V9 M - Debug: 19148 55151 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
. R! c/ k8 y% j - Debug: 19149 55152 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000$ Q# r7 r# B4 k. ]
- Debug: 19150 55152 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
5 M8 y) r# C, ]- u. q - Debug: 19151 55153 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 14 U G/ i2 A$ m! N7 U0 [: |( n
- Debug: 19152 55154 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
/ w$ W7 V% S2 L1 r - Debug: 19153 55154 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000; Q+ R8 Z p/ N) T9 O# ^$ d* r
复制代码 然后我留下了一个空的flash,完全可以被丢弃,没有错误% F8 R4 Z6 ^4 O
+ x, @2 \4 R8 w0 A8 `# N; I
亚马逊Dash UART输出3 @% X! i M/ e2 ~8 O% B: [/ C1 N
5 E0 R. M. K# c
这是亚马逊Dash的UART一系列输出。7 f9 q2 B% g7 c; o4 i" H3 H0 I, X
- Oft DVT_1.0-Oft v0.9.119
7 w7 R& v0 U5 L) W4 S `/ \! t9 z - Oft SW build on Oft Rev05 HW platform, custom version Mar 9 2015 19:50:48& ?, a4 K4 G2 ?7 p) O
/ H* ]0 X$ v2 ]* Y) _- Registration failure=01 _9 L( k( m8 g( g7 r4 t( a A
- RegGetFailure = 0/ Y' l: P+ E G, Z& d/ [
- DumpRTCRegs: S=01000000 W=00000000 A=00000000 P=00000000 F=00000000 D=02000000 C=00000101 T=00000000
* V$ B; Q, ]+ E# v9 g0 a% w - ( i- L- c" ^9 K. i) ?5 L. @
- kVersion: 900119206 y# P/ _8 r/ X$ w
- PWR flags: SB=0 LPWR=0 WWDG=0 IWDG=0 SFT=0 POR=1 PIN=1 BOR=16 v2 o8 s/ I- x. J0 E: d k: M
- Getting time in RTC_Init: GetRTCDateTime: 2088656913 Thu Feb 1 00:00:17 1900: U4 `0 D/ c+ g5 W' ]& O
- + M: y# A% j' ?* V' S# L. y& P
- MAC addr:tag = 0xbb len = 0x08 val = f0 27 2d 9b fb da
; v, d: D. Z* S - Serial:tag = 0xcc len = 0x12 val = 47 30 33 30 47 30 30 35 35 34 34 32 33 35 37 35
S- l/ Z1 G& |, v9 Y# B
' m. _5 F9 B9 E8 ]; s' a- Key:tag = 0xaa len = 0x16 val = 4a 47 4d 49 53 4e 46 5a 32 4b 47 4e 59 51 50 53
5 d' v1 I6 L9 U" G2 S - 32 46 33 31# }' F; t5 K$ g/ b
- " J$ C; V8 q: h* f$ E! O
- post gBATTERYPercentage = (0%) [223]
- L# q5 m7 P& x+ N6 e; i; t - VBAT = 0.223V (0%)
" X; n/ P* v1 t: _ O& `- K. H# B2 X - BOOT BATTERY CHECK : 0%" ?& U+ F! Z( L# a- v/ q8 I; ]
- Low battery! 0% < 25%
. m/ Q; ^- N$ a: {! d* x: J - DEAD BATTERY: 0% < 5% Shutting down power/ o- C2 }$ v' ~' F( W3 x, F, v
- shutdown called
' E0 f, q* v2 I! U6 J - Failed transactions = 0% y+ ?, }$ O5 F- |6 i; U+ U
- iTOC_Pending_Rd = 0, iTOC_Next_Wr = 0Failed transactions = 0
. Z2 q6 [2 j; h& |+ [' u - Turning off power via latch switch
6 r( X, v# z; v/ g+ ^4 e
1 I% E$ C8 y5 H; ^ K7 z8 Z) a1 Z- SEC_RetrToken returns bHaveRegToken 0
, p: p( a; {: q+ Q- Z - iTOC_Pending_Rd = 32768, iTOC_Next_Wr = 32768Failed transactions = 0
# I9 w% N6 K3 J5 r+ M' h - SyncTOC: rd 0x8000; wr 0x8000; tid 0x0; eod 0x0
" C" z- R! S4 F - while loop in TRANS_ThreaTimbeginbegin while true loop gUpTimeLimit 32000
, r9 F- g/ T* S1 X. T - **Device not registered
- ?5 F! B+ Q$ G* Y0 u Q; o - shutdown called
+ i( @5 X: H' e i3 C8 S4 P* W1 @% R - Failed transactions = 0+ i& m/ h ?: {# e
- iTOC_Pending_Rd = 32768, iTOC_Next_Wr = 32768Failed transactions = 03 f/ p. F( H. c. T: ?" K
- Turning off power via latch switch
复制代码 ( j5 F! ?& h0 W F
亚马逊供者2
0 p1 s0 H* b, P随着第一个供者的加入,我们已经转移到第二个供者身上。一个高兴的按钮。4 F+ v4 j1 F" }
之前" `4 x/ V/ w( j: @0 ?0 M
7 w8 O. s% I- b' u; ]; t
之后% i+ s7 \) R4 s8 E6 F
4 [& s4 O& a* @& P! z
n% w7 _3 Q' E" u, f) l
5 u( ~$ e; t5 Q: I9 A
下移到30AWG,使用焊剂,和一个全新的铁尖。捐赠者在手术台上,连接着一个3.3V的eBay调节器、Adafruit 3.3V的FTDI UART和一个eBay ST-Link V2。
" ?8 _2 E1 P7 c- M3 [4 M) |% R. C/ S. c/ t
2 T5 p$ b" ~8 |' W1 yST-Link V2也提供电力,但这对于一些用户来说已经足够了。: A+ E- _( K7 K, G' x) Z
& f3 B E' s! w# `" M亚马逊Dash, L. v# ^8 U5 O, s
- }/ J. m) V$ y$ j这里没什么可看的。在dekuNukem的git仓库的精神下,一个Amazon Dash展开了。4 W$ H, P' E# h1 o
我对把这个连接到我的ST-Link V2稍微感兴趣,因为用一个节点“黑客”它。在树莓派上运行的js或python脚本有点过时了……和作弊。0 X9 L2 r: Y' N# u3 l
. Y& M/ ~& ?+ ^: e1 \
2 }; J& M& n [* `+ j" ^* W
1 R5 U b: C9 O/ N; ` }在这张照片拍摄完成后,26AWG的电线把SWCLK pad完全扯掉了。在谷歌上搜索一下,就会发现AXE610124与pad右侧的连接器头部吻合。我发现了SWDIO和其中一个引脚之间的连续性,所以它可能会起作用。我从Digi-Key订购了一些,我们看看会发生什么…
+ Z6 Q6 R( Y/ H( S& }! l. Y9 a4 t/ ^! Y* {
1 N5 r/ q; B, U, @WiFiMCU引导装载程序
. t. n# P1 ~; G) O
8 z1 w1 k6 Y% {/ hWiFiMCU引导加载程序显示一个有用的内存映射。7 {! V" J' ^. o. K M0 g& }, j5 l9 `' A
4 y2 f; W3 k! y
JTAG/SWD EMW3165引脚连接
2 W$ H; y9 k9 s5 F- [* e8 @& C' `
8 ~, o T0 b2 z) _5 R( R3 B
& G R6 @4 B0 I8 D6 ^8 g+ r3 p) s$ s# S! w
EMW3165/WiFiMCU
& E1 u8 u- K6 ^
9 h% W8 t8 Z# w+ ^4 D
+ Z' `1 _0 G, l) aeBay Mini ST-Link v2仿冒品和EMW3165/WiFiMCU。冒险始于尝试用texane的st-link工具备份WiFiMCU的固件。奇怪的是,flash转储很短,并且连续的flash转储没有匹配的输出。60-64字节在转储文件中被随机地归零。9 f" c2 A/ ~0 V# R. Y
4 o6 k; y& y. J1 p( o
* H: Y9 [, A! o) @5 W5 a- K使用gdb remote的OpenOCD似乎可以正常转储。之后的几个pull请求以及将ST-Link固件升级到V2J24S4解决了大部分问题。当将flash从0x8000000转储到0x8080000时,我可以从st链接得到几乎一致的输出,而7500中只有两个腐化的数据。
# {* R! d+ m& M" y) ?* w5 _8 T
6 V7 ^* @6 P5 U) n+ b+ c2 y7 `
* [, ~# e& ?# Q. G( E原文请见hackaday. J1 I, W! [8 v t
) I: i0 t2 ^2 w) e! G# V( l |