找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 673961776

HG8245C2/HG8245H用JLINK可JTAG读到CPU;TTL无反应救助,各路大神看看,求助,求助...

[复制链接]
发表于 2019-4-2 14:49:12 | 显示全部楼层
  1. #  x2 ~* W9 Q  C( V/ C% C
  2. # Hisilicon SD5115 (T?)
    - e; p8 V# ~4 f: P7 Y4 M# A9 C
  3. #
    2 S, P/ v0 Q, d" ~
  4. # Author : CserSoft
    , H$ I1 X) ]; _3 ~, |, A3 F; X
  5. # Version : 1.3.2
    1 _( \$ j6 i' V2 i4 }4 g' `9 a( L" L
  6. ## N) c: a& E3 H: q
  7. adapter_khz 6000' f+ h5 G# u* F3 M( s% r
  8. transport select jtag5 y7 o6 V$ x6 z) \7 n0 a9 u

  9. 2 e! a9 @' h' E8 J) Y
  10. if { [info exists CHIPNAME] } {, M) c2 P8 C6 d3 g
  11.     set  _CHIPNAME $CHIPNAME
    8 ^5 q4 C+ \5 m" D! I) A: ]
  12. } else {
    4 ^6 n% c& K( v  k9 j5 n( B& L
  13.     set  _CHIPNAME sd5115* F: a3 q8 @" C
  14. }0 Y0 o$ B( V0 `

  15. 3 m  \5 b$ A9 t) G7 `6 p) G
  16. if { [info exists CPUTAPID] } {& R. n& g1 T% C( Y
  17.     set _CPU_TAPID $CPUTAPID
    , B3 N6 D) S! f
  18. } else {
    # P# C& i( ^, y5 z5 ^1 D9 D2 e. K
  19.     set _CPU_TAPID 0x4ba004771 U3 p6 p* }( O8 n
  20. }
    ; d: ~; e8 r  h/ Q3 t0 `9 l! A0 A) A
  21. : ~% [5 C2 K  e1 Y" r; X1 Y9 Q
  22. if { [info exists ENDIAN] } {+ {0 n9 e: n4 \: p# P/ ?
  23.     set _ENDIAN $ENDIAN
    1 s% N, W/ \  H2 Y! Q* T3 `: {
  24. } else {- U# ]3 |' N! {
  25.     # this defaults to a bigendian2 H8 B1 v+ {9 h5 T
  26.     set _ENDIAN little
    * w8 h( y, I* t* W* E3 g) p
  27. }7 u! W& G! y$ m. \" ~3 ^* m' a3 n
  28. 3 h  ]* v% U# }6 t
  29. if { [info exists ETB_TAPID] } {% T" ~! I9 h# m: r, R
  30.     set _ETB_TAPID $ETB_TAPID: m2 Z2 S- W6 K) s7 y; a/ D
  31. } else {* w) \/ J' ?% P0 Y. s
  32.     set _ETB_TAPID 0x410CF231: I+ O% a- Y9 \* S8 O! ?0 B% P
  33. }
    ( ~# p' i2 l5 X) T

  34. $ W9 Y6 L4 z5 x6 ?# n. @
  35. jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPU_TAPID' S% `7 c5 b# Y- }% ?
  36. 6 z1 [' n% }' G8 A( _& H7 ~
  37. # jtag newtap $_CHIPNAME etb -irlen 4 -expected-id $_ETB_TAPID
    : Y% q( w5 ^1 x) r9 c" P# y+ m

  38. 9 \& x6 x- ]; M9 L3 w
  39. set _TARGETNAME $_CHIPNAME.cpu. {$ {& D& C- w( N2 S

  40. 7 E/ A6 u5 D, X! x  L5 z2 y
  41. target create $_TARGETNAME cortex_a -endian $_ENDIAN -chain-position $_TARGETNAME" d. R/ w9 \* w% b

  42. 1 f0 h7 p8 G/ M) ~1 H, v
  43. # etm_dummy config $_TARGETNAME  r; d$ A! }) c' X. X1 V' i
  44. # etb config $_TARGETNAME $_CHIPNAME.etb& a0 g# b1 V' x

  45. / i* n. b+ X5 U- m1 Z* L

  46. $ X  X! i) Z1 c' j7 x% K7 @9 \8 U
  47. #调试初始化
    / k0 D# U. {, Y& Y) s- W7 C
  48. proc sd5115_dbginit { target } {
    / _% _' P  g5 a* ^  v9 o
  49.     cortex_a dbginit3 B4 s+ m) w9 T$ x. J) r; c
  50. }) {/ u; x2 Z: Y' i
  51. & @2 `% A6 P) J7 @1 a! r) D; V4 X
  52. $_TARGETNAME configure -event reset-assert-post "sd5115_dbginit $_TARGETNAME"
    " k- r/ h8 I/ l; ]3 M

  53. ! d) u0 k, k! D6 U
  54. # init
    / `, I( A. J, M) f3 H: e8 M
  55. # dap apsel 1
    7 d: g. C3 F9 e7 T

  56. ( X, P' \4 {* X8 q. B& R

  57.   O0 H+ @  a6 H" y0 n& m

  58. - A5 q/ p  S. ^8 u( Z
  59. #获取内存数据 32 bit
    ( K& Z5 z% C1 V8 Q1 V8 R
  60. proc getmem32 { addr } {
    5 ~( J9 |: K# [& j5 R# I# C- T
  61.     mem2array atmp 32 $addr 1
    1 V% \) a1 E* P3 f7 z) g/ I
  62.     return [lindex $atmp 1]
    , O* c& h: I! V3 ^, c
  63. }+ s+ l8 [: }) C9 b% ^4 e! E, g

  64. 8 V) F+ }: Z7 h$ W* ]+ j/ r0 s
  65. 9 l. V* b  B2 p& t2 ?4 p/ l/ Q7 a
  66. #设置内存数据 32 bit
    6 R# \) ]$ _$ t4 e
  67. proc setmem32 { addr value } {
    4 N1 R  P6 z! g' h* N1 j
  68.     mww phys $addr $value 1
    9 y2 A! B1 _# [: q: g+ _
  69. }
    : _$ A/ J  O4 h) D

  70. 5 r8 \. T& I! ?1 [

  71. - }: Y7 ~5 O) _
  72. #对内存数据进行And操作 32 bit
    # |3 H) O- `' Z( E/ c% K
  73. proc andmem32 { addr value } {
      v( K" Z$ Y  A( _9 B; x
  74.     set vmem [getmem32 $addr]
    & M3 b9 c- `; D( w
  75.     return [expr $vmem & $value]
    5 D. V  L0 H) P: w
  76. }( F( P  h/ k+ W4 n2 z; O
  77. 2 A: D6 S- h/ W) N/ I0 C5 {
  78. 3 m7 g* m& ^. y7 s7 d/ I* W
  79. #对内存数据进行And操作并写回内存 32 bit
    # U2 y6 e3 M, L: c4 M2 j
  80. proc andmem32w { addr value } {' p: }  P8 N: Z( j; ?% }/ q8 P
  81.     set vmem [expr [getmem32 $addr] & $value]5 P  x' U( e+ j
  82.     mww phys $addr $vmem 1
    8 D* R+ q+ I3 ]
  83.     return $vmem
    1 S+ z4 B+ e5 U: I+ d4 [
  84. }1 c& u" E7 L* v$ {5 |! f

  85. 0 Y2 }/ p4 Z: Y2 b( j/ X
  86. ; ]3 M) G" @8 R( f; O9 O
  87. #对内存数据进行Or操作 32 bit: I% d7 D) P2 ~2 _  H8 C
  88. proc ormem32 { addr value } {3 J" H% P, F$ m& r! y
  89.     set vmem [getmem32 $addr]
    " ?2 G( n1 f8 L: i- B# h( ~, p# ^
  90.     return [expr $vmem | $value]
    2 b9 a5 e+ M9 f0 F# T
  91. }
    ) |  B4 n7 m% J. _6 }5 \) W* k

  92. + x" J0 \$ z: e8 d% }1 Z4 U

  93. 3 ]- l+ O& e, R! D6 E/ }0 z1 J. W6 ]
  94. #对内存数据进行Or操作并写回内存 32 bit
    5 H, l2 C# w; c5 k# W! m- i
  95. proc ormem32w { addr value } {
    % B6 X$ L( l& l+ Z6 n
  96.     set vmem [expr [getmem32 $addr] | $value]6 S+ L( ]% A/ w' ^* s
  97.     mww phys $addr $vmem 1
    " R% K% `, e% I6 T
  98.     return $vmem  P5 t- _) S. u5 V, P  v
  99. }
    5 I: U) n2 O3 A5 g3 Z
  100. 5 L2 Z3 ~, N. g+ o' G

  101. 1 F( N, V# h& R1 |( Z8 V/ `9 Q
  102. proc sd5115_startcode_offset_0x6EC { } {: l4 k* E4 S' ~2 p5 M8 T
  103.     andmem32w 0x10180000 0xFFFFFFFE
      ~5 A3 a0 g# u6 ^
  104. }4 |; o  u! n' z

  105. - H2 M. K. c3 I! h  ~! }* f
  106. proc sd5115_startcode_offset_0x700 { } {
    ) e& ~( P" `& I4 l
  107.     mww phys 0x1018000C 0xFFFFFFFF 1. z% k8 D1 r9 X: f' h
  108. }, X/ Z( U& @) C8 i
  109. + C9 v' }# k" b/ H1 t2 N2 z
  110. proc sd5115_startcode_offset_0x710 { } {
    0 {3 X% W4 j7 l9 R) d0 e2 l
  111.     ormem32w 0x10180054 0xFF
    1 Z) u7 a+ l/ d( h
  112.     ormem32w 0x10180000 0x1
    5 |( t2 C. o- @9 a
  113. }
    + B: g. V- c! F& Y+ d

  114. 8 I! j; Q4 X4 Y0 Q% R3 u  D$ ~
  115. proc sd5115_startcode_offset_0xFAD4 { } {
    # l6 m& B' G* e7 [+ I, n' ~0 J/ `0 o* }! S3 B
  116.     setmem32 0x10100144 [expr [andmem32 0x10100144 0xFFF803FF] | 0x400]- e# Z# @" x/ m3 d6 s
  117. }
    8 q. @% e, l5 R9 \3 e" t

  118. # ~  G: w% h1 ^; f  F
  119. proc sd5115_startcode_offset_0xFAF4 { } {, u+ `' F0 Q4 _/ e1 e) [) I- z
  120.     set vcpuid [getmem32 0x10100800]
    5 k9 N" c0 w* D3 d1 Z
  121.    
    & B- g, H. q! P" {. F
  122.     if { $vcpuid == 0x51151100 } {1 D  p+ v( E4 K  s
  123.         ormem32w    0x13000000 0x80000
    , l! j3 p# i  h" y1 ^; m5 n# V8 l
  124.         ormem32w    0x10106008 0xC0
    # ^7 R* p- T7 s: y, ?" g$ C! @
  125.         ormem32w    0x10106008 0x300+ \: W. A4 W+ o  p1 u
  126.     } elseif { $vcpuid == 0x51152100 } {
    0 L& p/ U! y+ ~
  127.         ormem32w    0x13000000 0x60000' N, b  [9 h  U/ ~% m: E/ j) X$ t5 T
  128.         ormem32w    0x10108008 0xF0* N. I3 G7 E; d+ N9 d$ B0 S0 x
  129.     } else {
    ' P8 b' q4 S0 p( f2 U
  130.         ormem32w    0x130001C8 0x100
    $ [& ?' E/ v! Y! X/ V
  131.         ormem32w    0x10106008 0xC00$ }0 O) k  B: f7 ^3 Y
  132.         andmem32w   0x13000000 0xFFFFFFFB
    9 b0 H( j+ i+ K( @' y- z7 L
  133.         andmem32w   0x130001C8 0xFFFFFFDF' h: Y" _3 n; V7 X2 M  [* P4 s
  134.         ormem32w    0x10106008 0x3000) [1 X; H; o+ k$ L& g
  135.         andmem32w   0x13000000 0xFFFDFFFF
    & z* i% e3 Q* j. E) b
  136.         andmem32w   0x130001C8 0xFFFFFFBF# q% B7 A9 g7 G$ e% @6 i
  137.     }, C' _3 M9 K6 p% `/ S
  138. }$ |1 f& L1 Z* P! p8 e1 O6 m

  139. 4 A0 z# l# l# W) H8 O  y
  140. proc sd5115_startcode_offset_0xFBD8 { } {1 M# T& |6 U. l; N8 Z$ H
  141.     set vcpuid [getmem32 0x10100800]- X3 h5 ~. H8 q5 R! ?# `" H
  142.    
    % \; [" E; h" R/ w- ~! U
  143.     if { $vcpuid != 0x51151100 } {0 m+ l9 ?7 v! g4 _: A6 g* y" o) ^
  144.         if { $vcpuid == 0x51152100 } {5 G3 Y; ?+ s7 o
  145.             setmem32    0x10400500 0x1FFF800; _, U* `# M# N3 p
  146.             andmem32w   0x10100134 0xFFFFFFFC
    6 F% U0 z2 G% f8 g' ]9 m
  147.             andmem32w   0x10107008 0xDDFFFFFF) g0 ~) R0 `: @9 \, c: f9 j
  148.             ormem32w    0x10107004 0x22000000# h0 S: @. m3 y" O8 U, h: I+ w
  149.             ormem32w    0x10107000 0x22000000
    & }# l- A& B5 e
  150.             andmem32w   0x10108008 0xFFF7FFFF
    & @; p# Y- P; |  ?5 k
  151.             ormem32w    0x10108004 0x80000
    / M4 @; z7 s+ e# v" N
  152.             ormem32w    0x10108000 0x80000
    . v9 v1 @+ y* L  _; M
  153.             andmem32w   0x10100144 0x3FFFFFFF6 Z% c5 L, Z, p& t" R
  154.         } else {  I$ X& X' I0 L& m
  155.             setmem32    0x10400500 0x1FFF800
    ' e; a5 K. F9 Y( E7 w% U! D1 E4 G& f
  156.             andmem32w   0x10100134 0xFFFFFFFC
    - i  V3 g! f" x2 U
  157.             ormem32w    0x10107004 0x180008 w9 a6 `% u3 K
  158.             andmem32w   0x10107000 0xFFFE7FFF
    ! l4 g" T* L4 x2 ]/ p; B) A9 F
  159.             ormem32w    0x10107000 0x18000$ s3 d8 C: z: c! w- G6 w) J& K
  160.             andmem32w   0x1300016C 0xFFFFFFFC
    ! J) o) Q2 `( }6 o- B
  161.         }
    0 u* C9 D. }+ Q+ F
  162.     }2 G. o$ u/ S: C/ p  }1 C
  163. }2 _( F( Q8 K4 j
  164. ; H/ V  \: V; O# ]
  165. proc sd5115_startcode_offset_0xFCD4 { } {* v* o3 o3 e. h$ [. y9 G
  166.     set vcpuid [getmem32 0x10100800]% k/ G% H+ H4 q! I' \3 I2 R, V
  167.    
    ' M% Z) l$ h1 C4 G$ `8 P" {
  168.     if { $vcpuid == 0x51151100 } {; K; J6 E4 g# J$ M/ l& s
  169.         andmem32w   0x1010012C 0xFFBFFFFF
    0 N9 [0 o9 c* m5 h
  170.         andmem32w   0x10100138 0xFFFFFFBF" H9 m2 g  g( _' l- b" L
  171.         ormem32w    0x10100080 0x91 R2 @! j0 Q( T& [' b
  172.         andmem32w   0x1010013C 0xFFFFEFFF, E/ E$ U* k- A7 y
  173.         setmem32    0x1010005C 0x81020248
    1 I( w2 O  k/ z$ ?
  174.         
    5 s% K# p4 \; K4 s) p" i6 w) T, r
  175.         while { [andmem32 0x10100038 0x10000] != 0x10000 } {sleep 1}/ f: l; S* U# d
  176.         . q2 d9 k) S& |. X' K) m5 u2 ]
  177.         ormem32w 0x1010007C 0x9* {* ~# v% o8 ?( v7 G5 {! z& D8 s
  178.         ormem32w 0x10100148 0x2' \2 I( w8 P4 k8 J' b3 Y! p4 `6 e9 c
  179.         ormem32w 0x1010012C 0x400000( r7 L4 y& m5 ]1 B
  180.         ormem32w 0x10100138 0x40
      m  K  H) z5 V0 V
  181.         
    % F2 {7 J8 d/ r5 S" U' N4 q# O
  182.     } elseif { $vcpuid == 0x51152100 } {7 v4 Y+ b% f# O. U
  183.         if { [andmem32 0x10100190 1] == 1 } {
    + `" c7 N- C: ?: ?
  184.             andmem32w   0x1010012C 0xFFBFFFFF
    9 D# J7 H! H* S7 P8 v7 f1 n3 ~
  185.             andmem32w   0x10100138 0xFFFFFFBF6 K3 t" O" @; l6 T  G0 \
  186.             ormem32w    0x10100080 0x9
    / Q3 C  Q3 F; N1 y
  187.             andmem32w   0x10100144 0xFEFFFFFF/ m: b, `, ~: u3 n
  188.             andmem32w   0x10100140 0xFFFFCFFF+ w; T: C8 f% }
  189.             ormem32w    0x10100140 0x40000000
    ( k8 x7 X- @6 d( C4 f- q3 q) Z
  190.             setmem32    0x10100074 0x81028249
    " I! L3 Z) Q) D& l8 M
  191.             2 `. C9 O2 D9 F' H
  192.             while { [andmem32 0x10100038 0x40000] != 0x40000 } {sleep 1}2 ^, \/ }# D3 j8 t9 i; M. |7 d

  193. 5 z* s2 ^. ]% H1 |& B! U
  194.             ormem32w 0x1010007C 0x9; r' L1 s' ~  C
  195.             ormem32w 0x10100148 0x2
    , y- ~# O7 J4 R/ K. \' E
  196.             ormem32w 0x1010012C 0x400000, n; F: F* J% P- }9 X; x1 k
  197.             ormem32w 0x10100138 0x406 Y# i7 u1 o  E4 [  m
  198.         } else {
    , H9 l; ]* J) O
  199.             while { [andmem32 0x10100038 0x20000] != 0x20000 } {sleep 1}; b* ~; `, Y4 y
  200.         }1 f* H! u  f; r2 ^% z- V
  201.         6 K. b( z* y- H
  202.     } else {
    ; J) z  N- I, [/ L' A! |9 N
  203.         andmem32w   0x1010012C 0xFFBFFFFF0 k& ^" P8 M8 q/ r  T- c
  204.         andmem32w   0x10100138 0xFFFFFFBF
    + c- L  |* C. m+ c1 n
  205.         ormem32w    0x10100080 0x9; S0 w% K6 m2 O
  206.         setmem32    0x1010011C 0x81028648/ @. n: @% ^# |8 k7 P1 z/ \
  207. 8 n" o; u" d% E' c4 c
  208.         while { [andmem32 0x10100038 0x20000] != 0x20000 } {sleep 1}
    8 o  b" r( B, c: c" P

  209. . M; l: E" z6 Y0 D
  210.         ormem32w 0x1010007C 0x99 s. G# r6 w: Z
  211.         ormem32w 0x10100148 0x2
    ! L; t9 f9 }- `) x. _  |
  212.         ormem32w 0x1010012C 0x400000* y$ K; ]. Y9 s/ ^. v
  213.         ormem32w 0x10100138 0x40; ?* f6 ?! S& m9 K
  214.     }# [$ z% |' O1 H+ J- `
  215. }
    - V6 K* \, v# n0 m! n, U' y

  216. 1 B& k8 G9 k& i# C
  217. #sd5115_startcode_offset_0xFED4
    ' V2 d0 m( W6 x" `2 T+ N$ F
  218. proc sd5115_init_dram { } {
    6 i! V  z9 ?2 x
  219.     halt
    8 Z3 W/ L/ S) E
  220.     echo "Info: init dram..."
    6 y# c! |4 n9 v# r, `4 e! H
  221.    
    : [# t" J9 ?' H5 ]. y2 x
  222.     set vcpuid [getmem32 0x10100800]
      B1 ]6 C2 m( D& c6 m
  223.     , j" S0 W4 [/ X
  224.     if { $vcpuid == 0x51151100 } {! i/ M' @- |( i, G  J
  225.         setmem32 0x10102010 1
    + O8 V* ^) k! ^% d' U9 ?6 C+ s
  226.         setmem32 0x1010201C 0x8DF40630, [/ r" J9 `' a- T! O
  227.         setmem32 0x10102020 0x10184( C: H% s8 T: Q5 X. W# F
  228.         setmem32 0x1010202C 0x132
    ( d, I- N" J! B4 D0 ?
  229.         setmem32 0x10102040 0x80000000
    * d5 ^3 b, {% e0 m& f
  230.         setmem32 0x10102050 0x62330A08
    : V8 M  ~/ p- w+ Q3 |: N
  231.         setmem32 0x10102054 0x7F525616
    # g1 Y9 U6 m' H/ Y( \3 p
  232.         setmem32 0x1010205C 0x4BE58352
    ( E) ?# d9 e0 U2 w, @# e- S
  233.         setmem32 0x101020F4 1, c) ]3 F) z# N. C
  234.         setmem32 0x10102058 0x6230A000
    9 w( r9 e2 r5 i# @6 L( t6 E
  235.         setmem32 0x10102004 0- s' Z$ r, P% g5 q( y$ N

  236. 2 y  r% X3 ~! j/ t- V
  237.         while { [andmem32 0x10102000 4] != 0 } { sleep 1 }
    . ?0 k- W; w" X; Q7 G/ q' ~; I! g- g7 B
  238. / r" z1 l/ [! ]. J' w# C: C5 z
  239.         setmem32 0x10102404 0x80000000: e* u4 X+ h0 t2 m& D' Q
  240.         
    - X4 e: C# W& S* `7 K$ @9 m
  241.         while { [andmem32 0x10102410 1] != 1 } { sleep 1 }
    ; `$ o* l6 d. z
  242.          
    8 Y5 m# {2 W: h# h# _
  243.         setmem32 0x10102418 0xDC000
    2 N& `( ^8 o) T7 r
  244.         setmem32 0x10102584 0x5D. }6 g+ B' S1 c7 Z2 p8 L0 p, l
  245.         setmem32 0x1010240C 0x3008401* X$ ]" \5 u0 `2 G' O- v
  246.         setmem32 0x10102444 0x48B$ ^  K+ {! ?' _4 g' O+ V
  247.         setmem32 0x10102448 0x51106644
    7 o  @9 i1 C" l9 @
  248.         setmem32 0x1010244C 0x1A81629A2 Z6 f7 ^7 G" t4 K
  249.         setmem32 0x10102450 0x100220C86 V/ P  j* ^9 c, ~0 D( b3 G8 J
  250.         setmem32 0x10102454 0x1520
    % X" V. G5 X1 Q! U3 x6 Q
  251.         setmem32 0x10102458 6; [4 C+ i' b+ Z3 ]! d1 w
  252.         setmem32 0x1010245C 0& ^& t4 ~- R: [6 B6 Y
  253.         setmem32 0x10102460 0
    0 I7 o( T: V* j/ U8 I, Q
  254.         setmem32 0x101025C0 0x44000887/ n" M) s% n/ Z% K$ J6 ^
  255.         setmem32 0x10102440 0xF008003E
    * O. T) S5 Z2 V8 S# J# U
  256.         setmem32 0x10102468 0x1001541. Q# v1 ^2 U# _6 X' o. }* D
  257.         setmem32 0x10102404 0xFFF34 [+ t. g, [/ T( Z) n
  258.         ; H) }* Q# Y0 g( q3 _
  259.         while { [andmem32 0x10102410 0x80000FFF] != 0x80000FFF } { sleep 1 }/ T9 k7 a7 F% a0 }
  260.         
    2 d. X2 O! V$ Y# B
  261.         setmem32 0x10102058 0x6230A05F$ ^4 R1 h, r( k9 v% ~9 v8 O
  262.         setmem32 0x10102020 0x410185
    - r- \/ w/ ^3 J: K% P$ `
  263.         setmem32 0x1010201C 0x8DF40630% N3 M7 g5 l7 i0 {1 h8 `
  264.         setmem32 0x10102200 0x3051334 O5 M% s7 ^. e2 m/ `/ l0 h
  265.         setmem32 0x10102204 0x3062CC+ z) K: S5 f3 |4 G% A: X
  266.         
    ; q+ |" |  q3 D
  267.     } elseif { $vcpuid == 0x51152100 } {. O" _1 G  ?# y$ t
  268.         if { [andmem32 0x10100190 1] == 1 } {
      w. Z  I# i. [) Q7 t2 r7 q+ I- r+ b
  269.             setmem32 0x10102010 1( T' f; X8 R1 X: g
  270.             setmem32 0x1010201C 0x80000600
    : d7 v$ ~; e& H. a
  271.             setmem32 0x10102020 0x584
    $ g" O! p! f# v: a
  272.             setmem32 0x1010202C 0x142
    4 @! d9 i. ?& w0 D2 u
  273.             setmem32 0x10102040 0x80000000& M5 W5 j- O7 v; t& t
  274.             setmem32 0x10102050 0x63440E0A. N4 h) e, q2 v5 K0 [5 D
  275.             setmem32 0x10102054 0xFF526720
    ) S' K2 ?! ^" X+ m- }
  276.             setmem32 0x10102058 0x6240A0005 j' ~0 [+ c, p% V. g& Y3 M1 o
  277.             setmem32 0x1010205C 0xFFDFF5F29 A# J9 B* q  `+ V0 C
  278.             setmem32 0x101020F4 0x21! p3 h% J, K& ^9 a
  279.             setmem32 0x101020AC 0x3000501
    5 j* U5 `6 E! E& u2 F' _
  280.             setmem32 0x10102004 0: o. \$ T! ]3 n
  281.   {+ R  X2 z7 k4 ^) N
  282.             while { [andmem32 0x10102000 4] != 0 } { sleep 1 }
    3 F/ c* O: X* s% O* B) l1 G; R" {
  283. 9 v4 o/ ?1 y# C
  284.             setmem32 0x10102404 0x80000000. F" U" {/ e7 ~! M

  285. 9 K, F1 ^8 ~: a
  286.             while { [andmem32 0x10102410 1] != 1 } { sleep 1 }  _, I4 s3 L- h5 f2 Z3 ^3 j* J% T
  287. 5 O- \( u% v' ]7 Y
  288.             setmem32 0x10102418 0x5C000
    ( R1 B4 i6 s/ Z3 ?
  289.             setmem32 0x1010248C 0xF01E78
    ; o4 B6 P) Z! b% I: H4 m
  290.             setmem32 0x1010241C 0x1F40FA10. q7 K" }) e2 c, p4 d
  291.             setmem32 0x10102420 0x61A808CA8 f! }( D) c; ?6 [& J
  292.             setmem32 0x10102428 0xC83D090
    1 C% c1 `5 E# n# R" x% [
  293.             setmem32 0x1010242C 0x1F4186A0, H# a& ]5 k' _( `! ?# g
  294.             setmem32 0x10102444 0x48B" E2 Y; d. q# }& d4 w8 h) e
  295.             setmem32 0x10102448 0x6D538844) G$ `8 c* g6 o' r0 ]
  296.             setmem32 0x1010244C 0x22820282
    % k( d2 T6 d. ]0 D$ h/ S
  297.             setmem32 0x10102450 0x1002EA00/ A! b5 R, H, U* _, i
  298.             setmem32 0x10102454 0x1930: }% z) V, B* p" c" Q
  299.             setmem32 0x10102458 0x42: y% z4 ]- N& \' M  Q
  300.             setmem32 0x1010245C 8" v( Y5 f. B! l/ w1 A/ \6 P
  301.             setmem32 0x10102460 0* n, q, j6 L* w9 b" e; n
  302.             setmem32 0x10102464 0x210000$ K0 u0 H, J3 k# U3 y
  303.             setmem32 0x10102468 0x210035C3
    6 y! ~- m! t( q" Y8 z  M: d
  304.             setmem32 0x10102584 0x2D
    5 S  u' f- T* |2 \7 W$ a1 T" S+ C0 m
  305.             setmem32 0x101025C0 0x44000E81# N' I5 i+ ?) g, B
  306.             setmem32 0x10102600 0x44000E81; H  d" s1 n* [- t2 L  l/ ?4 M8 }
  307.             setmem32 0x10102440 0xF000603E1 z1 ?. T  a# O' w6 {
  308.             setmem32 0x10102404 0xFFF3
    * R2 h! H6 ]& k, x2 g) ?

  309. 7 ]3 \+ r( ^- C$ u
  310.             while { [andmem32 0x10102410 1] != 1 } { sleep 1 }
    + v. U. S6 X' t/ T& z% P

  311. ; U' K  Z/ _: _) m2 Z- w
  312.             setmem32 0x10102058 0x6240A079
    7 X: ]1 h1 ?. r/ ]' t
  313.             setmem32 0x10102200 0x304132
    8 F$ }( n2 J4 n5 ~/ h
  314.             setmem32 0x10102204 0x3061326 ?% j: ^( t* _
  315.             setmem32 0x10102208 0x304066
    ( B- N7 P0 D5 a4 f
  316.             setmem32 0x10102210 0x306132* {/ N: K7 T9 t. F7 a9 O) E. O
  317.         } else {
    * O4 g: B# [7 ~$ y8 S2 C9 l+ L5 s4 @
  318.             setmem32 0x10102010 1
    5 [2 K% X; x* p+ m
  319.             setmem32 0x1010201C 0x80000601
    0 o( a4 K$ F" x( i0 c7 Q( ]" N
  320.             setmem32 0x10102020 0x5806 {2 q0 k" a7 q( X3 n( i2 I# S; U
  321.             setmem32 0x1010202C 0x142
    1 h/ Q& e; a7 T9 i; F8 ]  Q; n
  322.             setmem32 0x10102040 0x800000004 V3 b1 N, I! a/ f! ]1 Q
  323.             setmem32 0x10102050 0xC466150F
    , C, \; S  c- C& Z
  324.             setmem32 0x10102054 0xFF545540
    % ]; r  n+ A6 Q* ]' R/ v5 V3 L! X' N
  325.             setmem32 0x10102058 0x84610000
    ) b7 d% w, k1 B& D3 B
  326.             setmem32 0x1010205C 0xFFDFF4F4
    # G9 ]! o  [2 q3 i' [) f
  327.             setmem32 0x101020F4 0x216 ~2 \6 n. S- r
  328.             setmem32 0x101020AC 0x30005013 v0 t4 Q1 @7 @: \
  329.             setmem32 0x10102004 04 }& t  X0 P6 |! J+ I
  330. 1 b4 m! D7 r5 I; [% g8 \6 R  q
  331.             while { [andmem32 0x10102000 4] != 0 } { sleep 1 }4 \. W" y) y- ~6 _* N! s6 v

  332. " m1 P' S1 _6 D/ m) b
  333.             setmem32 0x10102404 0x80000000& W7 z. c$ `6 }' ?

  334. / @4 k* x; M0 \* `8 L
  335.             while { [andmem32 0x10102410 1] != 1 } { sleep 1 }8 M, ^* F$ U5 e* E( j6 J

  336. / ^) n! w" I) J! H7 ?
  337.             setmem32 0x10102418 0x5C000
    + o. o4 H$ d( K. J- y
  338.             setmem32 0x1010248C 0xF01860- w7 ~* Z. A8 E* h
  339.             setmem32 0x1010241C 0x1900C810
    # r( l6 D( d+ O; T
  340.             setmem32 0x10102420 0x4E200708
    ; T& f9 ]4 C4 S6 C1 {
  341.             setmem32 0x10102428 0xA030D40
    - ^$ l. F0 T: f9 v
  342.             setmem32 0x1010242C 0x190138800 F3 ?) c' X( ~) [# }  d$ i9 `; k
  343.             setmem32 0x10102444 0x48B
    9 C4 n! n9 ]; d  L/ m9 v& h/ J
  344.             setmem32 0x10102448 0x550F6644' ]+ ]# k; {- ?$ e
  345.             setmem32 0x1010244C 0x22820202& g" i" k8 }! H% L0 I3 N0 g5 j
  346.             setmem32 0x10102450 0x1002EA00, O# G0 D/ U4 |; w. c" D. }  u0 I
  347.             setmem32 0x10102454 0x1510% P4 G4 S; t. Z/ s; a/ M
  348.             setmem32 0x10102458 0x42
    * H$ Z( S1 r% K
  349.             setmem32 0x1010245C 0
    4 d, X7 A$ T+ o9 x! g  ^0 E
  350.             setmem32 0x10102460 0) t3 h6 H/ @& J5 j$ Y5 L
  351.             setmem32 0x10102464 0x210000
    ' Y, o; f! g; F9 v
  352.             setmem32 0x10102468 0x210035C3! C+ c: \0 l( v  J/ Z
  353.             setmem32 0x10102584 0x2D- ~* J0 A1 t' n5 A
  354.             setmem32 0x101025C0 0x44000E81* q3 \& r; f) d) S
  355.             setmem32 0x10102600 0x44000E814 U! ?- G# V) n/ t( l. c
  356.             setmem32 0x10102440 0xF008603E  Y& b' a# W4 m
  357.             setmem32 0x10102404 0xFFF3+ l* Z  b0 s- G- ?9 b. a& D1 C
  358. 5 o  \5 V0 v1 \1 K- w& s; O
  359.             while { [andmem32 0x10102410 1] != 1 } { sleep 1 }
    # S8 l2 [# X8 ], y2 p5 V$ v

  360. 6 P* `) A& K3 {1 w# Z
  361.             setmem32 0x10102058 0x846100C3
    ) T$ j: p- y8 w  r0 }
  362.             setmem32 0x10102200 0x304132
    & q2 W" H! X, U) U$ l
  363.             setmem32 0x10102204 0x3061325 f3 L: v; F# u, P$ Q6 q
  364.             setmem32 0x10102208 0x304066
    . [* `6 d0 d  \( @9 U- z
  365.             setmem32 0x10102210 0x306132
    ! [7 M; _. C8 K: B& j
  366.         }
    # m! w4 u3 }9 @! r+ @1 n. D
  367.     } else {3 m* F. W* ?' s- d0 D3 g
  368.         setmem32 0x10102010 1
    # C- A, c' V; u
  369.         setmem32 0x1010201C 0xE92E0601
    + z4 n) g$ `8 ^# @- o8 g. |  f
  370.         setmem32 0x10102020 0x1F1800 f# n7 T) Q: Z3 D/ u  l  v, j9 L  _* `
  371.         setmem32 0x1010202C 0x132# `2 ?, V3 k& m8 q1 ?9 U" E% u
  372.         setmem32 0x10102040 0x800000009 K! o% ?) i3 n5 i# ^2 [: d7 L
  373.         setmem32 0x10102050 0xC466130E
    " {* R9 s+ {+ [2 Q, g
  374.         setmem32 0x10102054 0xFF535625
    6 c" d% q2 f4 H1 `* C. a
  375.         setmem32 0x1010205C 0x7E58484" K, U% X1 x0 u& q  |
  376.         setmem32 0x101020F4 1
      l) L4 g5 }# K6 T1 B
  377.         setmem32 0x10102058 0x74511000
    3 E1 ?9 l  w6 J5 y5 J5 ?9 B( S
  378.         setmem32 0x101020AC 0x3000501  b" c% D- t+ j
  379.         setmem32 0x10102004 0! D  h9 l. s1 U7 z
  380.         ( J  |6 [3 Q5 R! n
  381.         while { [andmem32 0x10102000 4] != 0 } { sleep 1 }
    # ~- o3 }- Z" T, d6 B1 [! d9 Z( M
  382.         
    1 ?9 X3 c" |/ V7 N: c0 E7 b  D
  383.         setmem32 0x10102404 0x800000003 n/ x! y  q, `, N9 G7 j$ _4 p- k& v. `
  384.         
    " k+ K) {$ v. P3 A: D: {9 g
  385.         while { [andmem32 0x10102410 1] != 1 } { sleep 1 }& w1 S$ n0 E5 T1 i& Z$ r* y3 @
  386.         - T% @1 S. g% [8 }/ q
  387.         setmem32 0x10102418 0xDC000/ v: Z  @8 `. j  s" B5 C( k( r5 [2 g
  388.         setmem32 0x1010240C 0x30084010 R3 |9 W1 x# Q; n$ Y2 D) o/ Z
  389.         setmem32 0x10102444 0x48B
    0 `, p4 X9 v1 K! A* I# Q
  390.         setmem32 0x10102448 0x4D0E66440 n8 z$ p9 I% w& W" ]3 s  d
  391.         setmem32 0x1010244C 0x1A812A30' d7 i$ z& L+ e
  392.         setmem32 0x10102450 0x1001A0C8
    - _" u3 B% ]7 g( B/ q& Z: f0 N& M
  393.         setmem32 0x10102454 0x1320
    ' T8 j# J7 Q5 o# i
  394.         setmem32 0x10102458 0x42; B+ U: u7 b, J) _5 j
  395.         setmem32 0x1010245C 0
    / z. |7 }' @! B/ q+ l
  396.         setmem32 0x10102460 07 K( I5 {2 G  M0 W/ m
  397.         setmem32 0x10102468 0x11001547
    / w0 D( j8 F& O. e% k$ ^
  398.         setmem32 0x101025C0 0x44000887! c  j/ ?4 _/ r3 `1 s. T4 y
  399.         setmem32 0x10102600 0x44000E81
    % L" m/ c, Z  |
  400.         setmem32 0x10102440 0xF008003E% b4 h0 F. f( J0 a6 g& K
  401.         setmem32 0x10102584 0x1D3 ~" Y5 _4 ~) X6 W+ G, d
  402.         setmem32 0x10102404 0xFFF3  j$ L7 x' i4 o4 c, _7 m, }
  403.           e8 e6 X5 M0 i! _
  404.         while { [andmem32 0x10102410 0x80000FFF] != 0x80000FFF } { sleep 1 }
    4 G0 f0 ~4 n+ p3 I7 ]! e6 @
  405.         
    # R, f: @& U! r0 D$ W
  406.         setmem32 0x10102058 0x7450F09E; ~& B( Q' g  R- }- K- [( Z
  407.         setmem32 0x10102020 0x40EF011 I/ o. }: A2 l% G8 i# R
  408.         setmem32 0x101020F8 07 k9 [$ b$ C  I$ Z3 \8 ]8 i
  409.         setmem32 0x10102200 0x3051331 O, d9 \# [7 Q; V9 a% {: C
  410.         setmem32 0x10102204 0x306266
    8 ^  A3 }8 J( F
  411.         setmem32 0x10102208 0x306066" ?: f! l5 E% F& O0 {8 X9 I
  412.         setmem32 0x1010220C 0
    ! U0 e7 @6 N/ V5 U, L; R
  413.         setmem32 0x1010201C 0xB9D60601
    4 V, ~: ?4 ]; L3 g
  414.     }
    9 w: f4 e/ V3 b" g3 @1 b+ k0 N8 \
  415. }
    1 N. P. B! d+ L( L  M; L

  416. * K6 E0 z: l! f# ~5 P6 T7 r
  417. proc sd5115_hwinit { } {* R/ A$ r% _  A4 N1 ~6 V3 q
  418.     halt! @+ E8 Y0 H/ G: L4 O& U1 R
  419.     poll
    5 [) p" _; L# d
  420.       J4 i1 z$ {+ _- L- C
  421.     #enter Supervisor mode
    - l# G* s. {, F; b9 j. U. D/ F, Z# a8 L
  422.     reg cpsr 0x1D3  m4 w3 T' _! C5 x; U) P
  423.    
    0 ^) J, S. U) L
  424.     arm mcr 15 0 8 7 0 0
    # l% G. b( R3 A6 M3 j/ j* i8 K
  425.     arm mcr 15 0 7 5 0 0
    - O' i2 V* [/ _# f& d: K7 P( Y
  426.     arm mcr 15 2 0 0 0 0
    ( i# L/ W7 a9 N8 @
  427.     $ k% ?% @2 T) N8 _" D
  428.     0 F4 T3 H$ @/ M! }0 ]
  429.     set v5 [expr ([arm mrc 15 1 0 0 0] >> 13) & 0x1ff]% f3 m  Z1 c) x( y; [4 ~2 V! U1 ^& x
  430.     set v6 0
    ) h! J8 j2 s8 ]+ V4 `3 e
  431.    
    3 Z& k/ z& T% i/ O- G. O
  432.     6 K0 }) X: [( O* F) }; Y5 y+ g7 b
  433.     while {$v6 < 4} {6 r5 c; R8 \! J  I
  434.         set v7 0% S* @/ w0 |( Q1 N" p+ X  s2 w
  435.         1 _7 R: g9 s9 s! {1 m$ W9 y
  436.         while {$v7 <= $v5} {
    % z  p* l8 n& K0 K& q1 k
  437.             set vtmp [expr ($v6 << 30) | 32 * $v7]
    1 k# l3 [  O7 \& G" R' r+ u8 W4 s
  438.             set v7 [incr $v7]6 o3 [6 _. }& J
  439.             - i; }: Q; s9 x
  440.             arm mcr 15 0 7 6 2 $vtmp& j, B% ~' P$ a- @5 [6 q/ Y
  441.         }
    + ]* C* f- D; u4 E: B
  442.         / P7 F' r! r' I7 I( ?
  443.         set v6 [incr $v6]/ Q/ K7 R- U% P' L2 F2 N2 L0 r
  444.     }: U; f2 g8 t8 L- N1 }
  445.    
    " P3 W% n) b) d- G- j
  446.     if { [expr [arm mrc 15 0 0 0 5] & 0xf] != 0} {
    $ B3 ^2 L9 \) r2 @; W% W
  447.         echo "Error: (arm mrc 15 0 0 0 5) & 0xf != 0 !"1 |% ^1 W* _, e* N; n
  448.         % R' p5 c4 j0 \( D+ L! y3 p
  449.         ;# while { [getmem32 0x10100120] != 0xDD2 } { sleep 1 }& M0 c( {5 D5 g& b$ y( b; i
  450.         ;# resume 0x820002C8( d( I! U0 |0 M, d
  451.         7 W) n) A- m4 O8 s3 Z
  452.         if 0 {$ J$ F+ q$ `& g4 @
  453.             ormem32w 0x10100000 0x100
    1 }6 x+ \9 d2 v! r' w; t
  454.             2 F- `; j' f* E  N: @
  455.             if { [getmem32 0x10100800] != 0x51152100 } {& g- J0 t6 H3 r$ q0 r5 n
  456.                 echo "getmem32 0x10100800 != 0x51152100 !"
    & k. q2 v8 c; \% u
  457.                 ;# ...
    0 ~" z3 x  G; H
  458.                 ;# ...
    $ O: v, _" x) L
  459.                 ;# ...5 F% T, ^" B) ^7 R& I+ [7 x
  460.                 ;# ...1 x. M" P) S4 [) K1 y  ~) j
  461.                 ;# ...
    ; d7 k. `- [) |: ]) B' Q! W
  462.             } else {9 G# n. f; ]" G! e
  463.                 while { [getmem32 0x1010011C] == 0 } { sleep 1 }! F8 c9 L3 z# C! M( p
  464.                 echo "0x1010011C is not zero!"
    9 S  J: K! L: w  V1 c( p2 Y
  465.             }2 F; O1 d' B* y  S8 ~9 o3 c) L
  466.         }+ x& W% q- i7 V
  467.         7 n1 R' f- w& @. J
  468.         return
    3 m1 s1 u& y. I& |9 k# C8 r- r
  469.     }
    9 H( p2 S. L% n2 n7 c
  470.    
    3 Z2 U! ]8 t: E! Q; H7 R
  471.     arm mcr 15 0 1 0 0 [expr [arm mrc 15 0 0 0 1] & 0xFFFFDFF8 | 0x802]
    0 L9 [/ ~& F3 k' w" r1 Q
  472.    
    & M8 B  b( Q$ L
  473.     if { [expr [arm mrc 15 0 0 0 5] & 0xf] == 0 } {
    ( ]9 q. [0 ]/ {7 }5 E% s
  474.         echo "Info: (arm mrc 15 0 0 0 5) & 0xf == 0 ."5 u% k6 R# H0 X* Q
  475.         
    / }0 ~) ^6 {5 r. k
  476.         echo "Info: call offset 0x6EC ."
    5 W# l3 x/ D, }+ i
  477.         sd5115_startcode_offset_0x6EC* X6 n* e; x6 Q5 X! n
  478.         
    3 D  P' K* H- A* i  B/ e
  479.         echo "Info: call offset 0x700 ."
    ! `2 p$ a/ k4 z- d3 C0 T
  480.         sd5115_startcode_offset_0x700. z+ o$ B/ x6 N. P
  481.         
    5 R, {0 [% ?0 E% K7 N; s' D
  482.         echo "Info: call offset 0x710 ."6 }: E7 H" \' C4 y
  483.         sd5115_startcode_offset_0x710
    & f, A' N' ]1 n
  484.     }
    * p! n; w$ l0 Z' j# _# @5 M
  485.     ' g+ s* c( X, ]# a0 @: i
  486.     arm mcr 15 0 1 0 0 [expr [arm mrc 15 0 1 0 0] | 0x1000]& H6 L* E4 d. |' N& w. @+ @0 c0 s% e
  487.     - _( M: X  C1 \. T
  488.     setmem32 0x10A30004 0x00000355
    " E; Z/ A5 j- ~8 c  C
  489.     # a; r0 e$ Y2 b' }
  490.     ormem32w 0x10A20100 0x2
    2 o' ]! ~: }! b6 X% r8 [
  491.     ! D1 x8 r# b6 A! P/ {+ O" ^
  492.     echo "Info: call offset 0xFAD4 ."
      x$ ]) A8 ]: B* ?4 d. \9 X
  493.     sd5115_startcode_offset_0xFAD4 5 r' y) T$ P+ y* n
  494.    
    9 \6 S* t, L' o/ }- G
  495.     setmem32 0x1010007C 0xFFFFFFFF8 q* @/ N( Z  m: t5 Z$ J
  496.     setmem32 0x1010008C 0xFFFFFFFF( G3 y1 v; t8 j& ?
  497.     setmem32 0x1010012C 0xFFFFFFFF: A% v* H5 F* t* Y4 v* u
  498.     setmem32 0x10100130 0xFE7FFFFF+ N' O9 K: S$ k
  499.    
    - I' m/ H% Q2 t, Z% c2 ^3 K& v4 ?1 B
  500.     ormem32w 0x10100138 0x7F* C* D2 [. E7 b8 z7 r
  501.     ormem32w 0x10100140 0x80000000% o/ t4 `) @4 }6 a
  502. 4 J7 d7 ^  c# ~) x
  503.     set vcpuid [getmem32 0x10100800]
    9 Y5 O) x' p) H+ x
  504.    
    $ g, C! P5 {4 y, _9 \1 _+ F
  505.     if { $vcpuid == 0x51152100 } {& s; z: V3 Z% t  M) A1 C% c4 U0 R
  506.         if { [expr [getmem32 0x10100190] & 1] == 1 } {
    5 ?# Y# i1 A) a) N) L% g
  507.             mww phys 0x1010005C 0x8103844D 10 f# b2 @0 Z( M; Z! W' {0 W2 m
  508.         }; K' P7 @, n5 v2 w1 y$ U( K; ?
  509.         
    - `5 F1 g0 G) P7 E  k; W5 K( z  A8 Q+ D
  510.         mww phys 0x1010005C 0x8103444D 1' ]$ e. ?& U9 f! t5 K9 o
  511.     }
    & x: ~9 `) l% g" t+ m4 ]2 ?
  512.     - x2 x/ T# r6 M1 p9 R! d
  513.     while { [andmem32 0x10100038 0x10000] != 0x10000 } {sleep 1}# j: P" b4 l3 [4 G; O) c7 O& R
  514.     while { [andmem32 0x10100038 0x40000] != 0x40000 } {sleep 1}9 ~1 l% {, y3 N, r" j7 H
  515.    
    6 f4 x- s$ E; T* }. l9 k
  516.     setmem32 0x1010013C [expr [andmem32 0x1010013C 0xFFFFFFE3] | 0x10]: ]9 [  B1 R: s5 ^
  517.    
    * ~; o* w( |# \
  518.     echo "Info: call offset 0xFCD4 ."! d: {' t( d+ z
  519.     sd5115_startcode_offset_0xFCD4
    . N& u5 x$ h( ?/ S# W( t
  520.     % |  J3 d7 C3 r
  521.     andmem32w 0x1010013C 0xFFFFF3FF. d5 I2 C# i* j, o9 O' `" E) K" j
  522.     andmem32w 0x10100138 0xFFDFFFFF: s! G4 J& N& l! C% i0 J
  523.     andmem32w 0x10100138 0xFFF7FFFF5 B! S% f( |/ r1 E! q
  524.     setmem32 0x10100054 0xFFFFFFE06 \6 A. L7 C; f6 B, s5 }. [
  525.     setmem32 0x10100050 0x7FF00
    & x9 K; S+ t" R# p0 }. q1 [8 c3 i
  526.     ormem32w 0x10100000 0x4
    ! F6 }$ |8 q9 N+ G$ i( X
  527.     1 @( P: L+ e% O, F. S; `
  528.     while { [andmem32 0x10100000 0x4] != 0x4 } {sleep 1}5 S& O5 ?# i, K8 u
  529.    
    ( d; F1 U5 C8 {
  530.     echo "Info: call offset 0xFAF4 ."1 T& j& Y6 F8 s0 d& Z
  531.     sd5115_startcode_offset_0xFAF4
    9 i$ O6 u/ v9 G; p
  532.    
    " C, m4 ?2 S/ Y% k6 t  l$ |$ i
  533.     echo "Info: call offset 0xFBD8 ."+ k* V' ?. C# g" i/ n8 c
  534.     sd5115_startcode_offset_0xFBD86 P; M4 J; |0 [4 x3 j
  535.     ) K1 k: g. M- m. J; @, d( q6 |0 p: H
  536.     echo "Info: call offset 0xFED4 (init dram)."
    5 t1 R- o$ `5 S' i" c% P5 H
  537.     sd5115_init_dram
    % J# z" l& J3 d6 Y; G8 j
  538.    
      `; a8 S, ?/ {, v1 C' p9 x& {
  539.     echo "Hardware initialization is complete!"8 _( s+ Q6 ?* h" C' u. v
  540. }
    , m3 U* k5 Y% f) x' f4 }) E, B
  541. . R1 X: f$ r) s2 V
  542. proc sd5115_loadsc { filepath } {/ B( g$ D3 c5 s
  543.     halt3 B5 K- e& \& y8 e: \9 V
  544.     load_image $filepath 0x82000000- W2 {7 L/ q9 {  J
  545.     ;# verify_image $filepath 0x82000000
    9 O6 o0 m2 Q5 h
  546. }, g8 r4 P0 \& l6 X, N: u
  547. ; Y3 z, S. p9 S5 s* _) r8 u1 n
  548. proc sd5115_goto_entry { } {
    8 d* W1 {0 ], E) u9 w  d8 K( u
  549.     if { [getmem32 0x10100800] != 0x51152100 } {
    - j' q0 C+ C9 x# f8 h
  550.         resume 0x820000009 M# Z- R+ s! ^" P) _; u: ~
  551.     } else {/ C/ `8 D1 @) t7 i7 n3 D
  552.         if { [expr [arm mrc 15 0 0 0 5] & 0xf] != 0 } {
    & A# }: d1 W; t1 f' O4 _# Q7 V
  553.             while { [getmem32 0x10100120] != 0xDD2 } { sleep 1 }; [. [: b8 H' F* D! e, E  ^
  554.             resume 0x820000001 k6 f0 w: y" @7 G+ a6 V
  555.         } else {- }' K. ]6 Y" ?. H! y# \5 p
  556.             echo "Warn: Can't resume (1)!"
    $ }) j" x( w6 \/ A" A3 k
  557.         }
    4 C/ }' L! K% _7 b9 z4 t
  558.     }( G, ^2 _( Y6 s5 Y) ^1 N- w) r0 x
  559. }0 ]9 _) Q+ X( c: \5 |5 k7 i
  560. 2 P5 l) E4 M- C5 ^: E0 G- [$ R
  561. proc sd5115_goto_continue { } {
    ! g& Z: l, {+ y2 J- B, R" X
  562.     if { [getmem32 0x10100800]  != 0x51152100 } {
    ( }0 [0 ~* k: H* E2 o
  563.         resume 0x820002C8, R( g0 [9 g2 B
  564.     } else {
    3 }( M7 y9 Q) W4 U, X4 N
  565.         if { [expr [arm mrc 15 0 0 0 5] & 0xf] != 0 } {
    , {) Z) i; w8 L; o. }2 r
  566.             while { [getmem32 0x10100120] != 0xDD2 } { sleep 1 }1 a4 z) a2 y5 h: w
  567.             resume 0x820002C8( T$ ?) b: u+ U5 E. Y
  568.         } else {
    0 w* ^7 j4 F9 D: N
  569.             echo "Warn: Can't resume (2)!") @' q" N* P' P4 b
  570.         }! h7 I/ B- u1 |- I7 E+ w4 }
  571.     }$ i% G0 W) j: l
  572. }, `' p/ k) |$ h) x

  573. , S4 A% a5 ~, j+ m
  574. proc sd5115_enter_svc_mode { } {; Q7 e+ Q7 c6 H$ M& D) w4 Q& u
  575.     halt
    / G$ E- R! D$ |$ w2 u
  576.     #enter Supervisor mode
    + F& S( p5 D3 j3 ^. f3 O: k/ ?
  577.     reg cpsr 0x1D30 d+ o- ^5 A0 ^; Y, H
  578. }
    + s, ]6 h1 K' ^; y

  579. ! P% w$ K) |0 @* g- u
  580. proc sd5115_help { } {
    # q) L7 q* m7 {- v
  581.     echo "Usage 1:") `; v6 p: Y. ~, A8 b* a5 {- [
  582.     echo "  *Step1:  {sd5115_hwinit}"
    8 ~. n, E1 O% r) [- n
  583.     echo "  *Step2:  {sd5115_loadsc mtd0.bin}"% _! v: J5 d+ k
  584.     echo "   Step3:  {sd5115_enter_svc_mode}"% D0 {' R8 |, T# b8 o
  585.     echo "  *Step4:  {sd5115_goto_entry} or {sd5115_goto_continue}"* p, J# B# p. B% Z" {) Z
  586.     echo "  !Note!:  {sd5115_goto_continue} is not recommended"
    6 p8 r& ]! n' X8 M
  587.     echo " "6 g* N) {$ i, ^" H$ i9 x8 {) ?
  588.     echo "Usage 2:"# v4 z/ a. r, ~! I9 h* t  M
  589.     echo "  *Step1:  {sd5115_init_dram}": \7 m/ m- D4 W9 a, V; J' i( L5 l
  590.     echo "  *Step2:  {sd5115_loadsc mtd0.bin}"% E* j0 j  b5 B
  591.     echo "   Step3:  {sd5115_enter_svc_mode}"2 F, ]% ^) V1 `
  592.     echo "  *Step4:  {sd5115_goto_entry} or {resume 0x82000000}"
    6 Q9 f0 X: e; M; I6 C* c+ d
  593.     echo " "
    , ?: r4 L6 |9 A- l9 {
  594. }
    + i6 V( G- c- o$ v6 k/ r1 |# g

  595. 8 B0 w( b' a" L, j: b: f2 j6 E
复制代码

; Q8 Y' ^$ O/ M
* ?6 ^9 q7 I" NStep1:  {sd5115_hwinit} 执行这一条
8 Y6 q! W$ L/ `: w' [2 [. m. S0 ?# c( u& `) C9 w+ H
然后
; f  ^7 @/ H( Khalt ; load_image uboot.BIN 0x81F00000 ; resume 0x81F00000
7 D: T, @1 a- C. R6 W9 V0 t1 E6 C- A2 W" t
然后用uboot里的命令写固件
& R3 L% x$ Q$ U( p8 w8 W' h: f2 Z" O) t1 Z) \! X/ i
方活就在这就看你不会不
发表于 2020-12-19 22:30:56 | 显示全部楼层

3 u$ w  l$ I6 f( J, _7 a  d回帖赚猫粮
发表于 2021-2-1 12:52:56 | 显示全部楼层
回帖赚猫粮
发表于 2021-12-2 09:02:18 | 显示全部楼层
学习了学习了
发表于 2021-12-22 23:08:01 | 显示全部楼层

$ |9 P  P5 {+ W% i. ~2 ^( K回帖赚猫粮
发表于 2022-6-19 00:30:57 | 显示全部楼层
好好学习,天天向上,高手如云啊
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-3-29 00:06 , Processed in 0.033442 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表