本帖最后由 丿灬幸灬 于 2018-11-2 21:56 编辑
. k# M, L5 Z' K3 v1 u- _$ \) v R
' `8 |9 |; F( o H: I' ?GPIO映射
! M* H" [6 x4 f* Q2 R, j- \ y( M6 N: G1 v7 n
我已经把Cottonelle.bin的PrimFixGPIOPIN表映射到一些可读的源代码。在与MIXUSS64的工作交叉引用之后,这就是我们所得到的:. x+ \- X; T5 C
$ J! }4 R* q' X
我们现在有一些潜在的选择。WSDE SDK对于其他数据结构中的GPIO如何声明和引用是一种快速而松散的操作,因此我可能需要更多的字节嗅探来确定是否可以收集更多关于platform_spi_mapping_t 和wiced_spi_device_t的信息。3 Z3 r7 s0 T% B6 \7 R" b- v
- X4 u. W/ H8 U5 h3 A) b
更多的GPIO表挖掘 I/ h, ]0 v: j9 e. W) u8 l" b
, _5 p L6 p# S+ e( { l在这里,我在左边对齐了一些修改的GPIO PIN声明,并把它们映射到了原始Cottonelle.bin。紫色下划线是我怀疑数组结束的地方。我认为GPIOH TyPulfF*超出了范围。2 C4 `3 V: n- v* Y9 Z
2 n! v$ n" A: C' H3 {6 e4 k
" V3 l$ A0 n9 f. S6 H, u
- {9 t1 I7 f& F! U) f* x" S1 H+ Z. m
寻找GPIO
6 ]2 A$ L" E, Y8 T
$ Y7 x" h7 A( O, x' e$ b& A在左边,我们有一个来自WiCED SDK 2.4.1二进制diff的示例应用程序,在更改了单个字节之后,它针对自身,因此我们可以找到到达GPIO表的方法。1 I7 s. ]1 R; S- Q" M* X5 D9 N
在中间,示例应用程序。% y* o7 i, T2 U2 B5 Y) B u
在右边,一个类似的转储从DekuuKem的固件转储从棉布。* V I( E9 B; @7 N
现在做一些测绘…
; Z- I% k4 p6 T! W6 K6 _9 a% j6 J# ~! ?3 r1 W
9 s- _5 k; }* k( f
1 X0 C1 f+ t4 h再回到 flash
( X4 C: R, j- ~. |; y8 X* Y" J/ T4 ~' n! P7 S2 B. \3 m
让我们回到flash。我是想用st-flash, OpenOCD, pystlink,和 st-util+gdb,得到良好的闪存转储中案例我想回去与亚马逊的即插即用的软件。在与零字节填充内存是可能的,因此将继续读保护。5 \! |* |8 ?) S/ D( ?1 m
6 `# Z4 x3 X2 x$ N
openocd的手册很好解锁flash命令- Y0 t, i9 z5 e! o
由此产生了大量的输出+ \/ {& T: {9 N5 Z
- Debug: 19140 55145 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
2 E& e5 p8 ?. D& X; t - Debug: 19141 55145 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
) c# ^) [6 w2 _$ C' u0 P - Debug: 19142 55146 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1' e% s3 \! E9 k H1 ?3 ]
- Debug: 19143 55148 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000; k+ B+ ~8 l: ~! J+ `4 ~9 ^
- Debug: 19144 55148 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000) O, V: S7 O. n) S }
- Debug: 19145 55149 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
; O9 S8 C* x& j/ w/ `* t! S# @0 U - Debug: 19146 55150 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
" Q$ v" K; p) C! P - Debug: 19147 55150 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x100002 r0 g8 R; g: l1 Y% b! S* f
- Debug: 19148 55151 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
% U$ d, }. L/ M, Q - Debug: 19149 55152 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x000100000 p( G; p( X! h& j3 s
- Debug: 19150 55152 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x100004 E5 r4 F2 D$ g
- Debug: 19151 55153 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
$ p9 t" J4 A( d$ n# n - Debug: 19152 55154 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x000100001 z& v+ C0 |* {
- Debug: 19153 55154 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
4 u+ t; V \& I8 u7 k
复制代码 然后我留下了一个空的flash,完全可以被丢弃,没有错误# `+ n0 R' r6 J
2 }2 O. [/ ~8 U
亚马逊Dash UART输出
$ G( B1 R( N* G1 w
. V& Z' J9 a3 Y+ n# m这是亚马逊Dash的UART一系列输出。
4 \/ Q5 R+ u8 E/ x0 D6 b; L, ?, w- Oft DVT_1.0-Oft v0.9.119
' c6 s* ^# A+ H7 l3 w& p# d5 @ - Oft SW build on Oft Rev05 HW platform, custom version Mar 9 2015 19:50:487 Y0 j5 M) z' v* ?: w( B' c
9 J8 X% }2 L9 X0 `% n8 j- Registration failure=0
5 P8 c: O7 P! i& c - RegGetFailure = 0
3 v- Z) G0 ?- y5 g - DumpRTCRegs: S=01000000 W=00000000 A=00000000 P=00000000 F=00000000 D=02000000 C=00000101 T=00000000& E- O; s8 m/ B9 \, p4 e% {
- 2 l' ?6 o/ a4 o) r7 ^& N
- kVersion: 90011920
! G% W8 u# W7 t" v3 i - PWR flags: SB=0 LPWR=0 WWDG=0 IWDG=0 SFT=0 POR=1 PIN=1 BOR=1, g$ p' o" N' I" j5 `
- Getting time in RTC_Init: GetRTCDateTime: 2088656913 Thu Feb 1 00:00:17 1900
, R( B3 ^7 n) b V' m
1 m/ n3 v6 I$ ]" C5 {- MAC addr:tag = 0xbb len = 0x08 val = f0 27 2d 9b fb da8 x( S+ N" B& P) I9 ~# ~
- Serial:tag = 0xcc len = 0x12 val = 47 30 33 30 47 30 30 35 35 34 34 32 33 35 37 35
4 O1 P- {$ ?9 \* U ~' ~ \
3 O8 m/ S: X- O% K+ L8 \2 p& a) u- Key:tag = 0xaa len = 0x16 val = 4a 47 4d 49 53 4e 46 5a 32 4b 47 4e 59 51 50 534 L4 z! g; V! G; {+ q
- 32 46 33 31
& B- r& z0 J9 o D ?
; X" N( Z) T, s, V- post gBATTERYPercentage = (0%) [223]
$ |8 U/ ]+ l. W! o ]8 i9 P - VBAT = 0.223V (0%)5 z* `5 ^1 }5 P: h0 ^
- BOOT BATTERY CHECK : 0%2 z2 m2 v, t/ Q* k" s8 T* m1 `: p* |
- Low battery! 0% < 25%1 q& s7 B! R; u! ?, z
- DEAD BATTERY: 0% < 5% Shutting down power
- w# Y; p- E% x+ j3 ?* Y( S4 T - shutdown called
r% |! c! b& @/ n0 k - Failed transactions = 0
6 `" Y/ f1 ]( ~' W - iTOC_Pending_Rd = 0, iTOC_Next_Wr = 0Failed transactions = 0
$ w4 O# u* y6 _+ W% l7 B - Turning off power via latch switch# n# V, j r! V& s
- 6 i- L- s6 l1 W, I, H$ G3 M
- SEC_RetrToken returns bHaveRegToken 0
" F( Z! \( B C/ }/ `& G! |$ u! r { - iTOC_Pending_Rd = 32768, iTOC_Next_Wr = 32768Failed transactions = 0; o: U. R1 d& s2 u) c7 @: c! S2 X
- SyncTOC: rd 0x8000; wr 0x8000; tid 0x0; eod 0x0" t/ M0 k6 [. \8 D- \
- while loop in TRANS_ThreaTimbeginbegin while true loop gUpTimeLimit 32000
! D$ U8 c5 d0 P0 `) P/ ]7 ^- L - **Device not registered
: q0 o6 G% l) T7 b2 h- \6 a( j - shutdown called
& i3 _8 [' w) U - Failed transactions = 0
" w5 j3 w' C( Q5 R2 A - iTOC_Pending_Rd = 32768, iTOC_Next_Wr = 32768Failed transactions = 0' |: d6 ~$ }1 T! ~0 A) V& [
- Turning off power via latch switch
复制代码 3 }! E3 d7 ?$ q! @0 p2 S' M, L
亚马逊供者2+ h) p6 y( G" N, L1 B \
随着第一个供者的加入,我们已经转移到第二个供者身上。一个高兴的按钮。" R ?" Q8 u! |( ` }; i8 o
之前2 x8 Z/ m4 x$ Y
2 I4 s) e" C' G9 u# ]7 L之后( f- N; H- }0 f( M
6 D( c; b$ n, C; S* v7 U8 A
. J+ M+ \- `0 i% q+ H, Q
- W* L- o, k+ G* P下移到30AWG,使用焊剂,和一个全新的铁尖。捐赠者在手术台上,连接着一个3.3V的eBay调节器、Adafruit 3.3V的FTDI UART和一个eBay ST-Link V2。
' O: ?. ~( ]3 o0 W5 ]' `
) k- Y5 x9 D3 H* J: l9 e$ ?( g
+ v4 |3 m1 \" `9 F) L: O' L* pST-Link V2也提供电力,但这对于一些用户来说已经足够了。
. V. T& n/ b' a: V$ h \) \9 M
5 J |( S1 _0 `9 }& y# {% v亚马逊Dash6 Z2 l/ B6 h' f7 }2 g( A; Y, M" ~
: w6 Y5 x& H! C& ?1 _
这里没什么可看的。在dekuNukem的git仓库的精神下,一个Amazon Dash展开了。, O8 N5 }# ^: R! y4 Y% g7 D! H0 w
我对把这个连接到我的ST-Link V2稍微感兴趣,因为用一个节点“黑客”它。在树莓派上运行的js或python脚本有点过时了……和作弊。3 S! D" G( H4 H
0 T9 Y2 X, P3 T" t, N; r- U. R
2 R$ s# _8 G, A# t# ^& f4 s
8 K7 g& q" f8 F$ w& t7 Y) n- W0 p( P8 x在这张照片拍摄完成后,26AWG的电线把SWCLK pad完全扯掉了。在谷歌上搜索一下,就会发现AXE610124与pad右侧的连接器头部吻合。我发现了SWDIO和其中一个引脚之间的连续性,所以它可能会起作用。我从Digi-Key订购了一些,我们看看会发生什么…
# [( }) W+ g( J+ P3 q. Y0 w3 F; \% \9 a a$ w% }5 r
7 G: D* N( E3 \( ^1 {/ E% ?WiFiMCU引导装载程序
% q& r2 P+ h+ i# I/ ^8 N# M9 b
3 j3 @; y3 \# JWiFiMCU引导加载程序显示一个有用的内存映射。# i u' n e, k" s3 y
% U7 V- a; J1 a& q2 b8 D% RJTAG/SWD EMW3165引脚连接
2 D0 Q% J7 f, {: s9 k
& y' j% ~' }$ v4 p
( A, y3 h* x* r+ Y6 P
I* |7 U) I) F/ J$ a$ z1 qEMW3165/WiFiMCU
/ l E. R* `9 V" E- A' }
' U6 _6 R) n4 n, B( T# }! K' q5 r
! O' H# t1 P9 t1 i; h8 j+ v+ L4 j' c6 SeBay Mini ST-Link v2仿冒品和EMW3165/WiFiMCU。冒险始于尝试用texane的st-link工具备份WiFiMCU的固件。奇怪的是,flash转储很短,并且连续的flash转储没有匹配的输出。60-64字节在转储文件中被随机地归零。6 | C& W( A; L
; C% p$ ~0 @! e' n
0 X6 H2 F U: k0 y% s( Z2 \- b& y使用gdb remote的OpenOCD似乎可以正常转储。之后的几个pull请求以及将ST-Link固件升级到V2J24S4解决了大部分问题。当将flash从0x8000000转储到0x8080000时,我可以从st链接得到几乎一致的输出,而7500中只有两个腐化的数据。
! Z+ P2 R- m2 m5 y9 m+ G5 Z. s2 u% V( y L( o1 v
, I8 P1 S( h \( r: o& ^& U7 }) ?原文请见hackaday5 V# {" M! F G, r3 |
$ D& k/ k' ~" p0 P7 x |