返回列表 发帖

[开发工具] 使用H-JTAG烧录W90P710的bootloader的方法

[开发工具] 使用H-JTAG烧录W90P710的bootloader的方法

本帖最后由 dglwx 于 2011-6-16 16:47 编辑 本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 V% ^) p! i- C# Y: e$ ~

! l, o& ^( A5 ^9 r8 A% e5 V3 q嵌入式开发联盟1, H-JTAG烧录bootloader:+ v2 J  t2 p; @/ B
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  {; e7 V0 E1 M
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 p6 y6 e* m2 p' i* n! s
说明:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  |/ j- m  A# G: D  t, T/ U) M
附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
& ?$ _8 U0 E+ P) D+ n嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1, 如果是4M的Norflash,则需将w90p710.hfc中的
( U# U4 h; q- T8 cmcuos.comSetmem+32-Bit+0xFFF01004+0xFE050084
8 K. p4 Q& t2 }- i4 N. d1 w- 嵌入式底层驱动开发技术学习网站改为
  `0 I% @) D3 bmcuos.comSetmem+32-Bit+0xFFF01004+0xFE040084- 嵌入式底层驱动开发技术学习网站9 E9 E. R( ?+ P# o2 ^+ R

- `5 O+ b! s/ E; U/ u, B3 S/ Pmcuos.com另外,在H-Flasher里选择相应的flash.
, t0 Z2 I6 O- [  U1 G4 a; b" O( Q: Smcuos.commcuos.com1 P' @. d0 p" {1 B1 Z
2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。. N- n4 |; R6 t/ C  Q
其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% H% J8 H+ f& P3 X

: G7 r) J& l7 H) i8 J0 a8 p嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
- N. m% u' g- e3 b: G" |7 {) Y嵌入式开发联盟2.   以前使用ADS烧录的方法参考附件:   8 x! T" h: J" ~/ C9 e! G
嵌入式开发联盟6 T) K; `" O  a

; O: ]7 P4 J) C" m$ O* N% Z& u1 `
2 r; V6 M2 K3 a* ]本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
( u& m0 K. B, n本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。, M- B* Z) \+ A7 W  D
3, 在bootloader里升级bootloadermcuos.com! L6 G/ ?* p# W

$ B& {. X# G3 B- y- b+ \- 嵌入式底层驱动开发技术学习网站以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:mcuos.com0 m, ^" Q' [  \5 C

1.- 嵌入式底层驱动开发技术学习网站+ J5 F. d% f: V. x7 O! k* Q
在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000


$ g6 x0 k# |7 p' N3 U4 g" i4 Qmcuos.com

嵌入式开发联盟7 c6 T, b7 j' a$ Z, X8 G6 O, ^& t

2.
; Y. z1 g5 D0 I. x) n2 K7 l: i嵌入式开发联盟在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

嵌入式开发联盟& r/ s+ S$ A2 C3 @# V+ C" w

3.% J% [9 B8 l$ Q/ X  y* ?, U
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000

mcuos.com6 f2 _6 I- Y: c  V8 o2 w6 ~7 E

4.- 嵌入式底层驱动开发技术学习网站6 N- I1 U9 ], K; D# p
等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。

mcuos.com6 D3 @, e2 |2 d, @8 {6 J- y

$ V1 G8 c$ ]/ F本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。4, 为什么在bootloader里能使用updater.bin来升级bootloader?
" h/ ~- b* S% [. V# \+ [嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com6 `& A- K# v3 ]$ [; ]& V- x5 E3 }
以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:嵌入式开发联盟" K8 o+ ^$ |: C, }2 h1 T$ E

0 d6 D7 G& j5 f4 d我们来看updater/updater.c的main():
: Z4 G% o$ u2 A# d! R% \1 l
0 a( j( I. O+ k2 M本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
4 w1 W6 h3 ]3 M8 Q- v2 p$ W7 w+ Z本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
  1. int main(){    int size;    void * bin_entry, * bin_tail;#ifdef DEBUG    uprintf("Checksum: 0x%08x\n",cal_checksum((void *)0x8000,16));#endif
  2.     init_serial(0, ARM_BAUD_115200);    PrgInfo();    uprintf("The ROM code version in this update image : \n");    uprintf("\tW90p710 Boot Loader - Version 2.1\n");    uprintf("\n");    // check if boot rom environment    if( ((ROMCON&0xFF000000) == 0xFC000000) && ((int)&bootrom_entry != (int)&bootrom_entry) )    {        // check if the flash in EXTIO3 ? (double check )        if( (EXT3CON&0xFF000000) == 0xFE000000 )        {            uprintf("W90P710 platform is Found\n");            uprintf("WARNING: Re-configure the External I/O 3 to avoid conflict.\n");            EXT3CON=0x0;            uprintf("WARNING: Re-configure the ROMCON to update ROM code.\n");            ROMCON=ROMCON+0x2000000UL;            uprintf("WARNING: W90P710 Boot ROM will be updated!\n");            bin_entry=&bootrom_entry;            bin_tail=&bootrom_tail;        }        else        {            uprintf("ERROR: Unknown board configuraion!\n");            return -1;        }
  3.     }    else // Singel flash environment    {        // check if really the single flash environment (double check)        if( (ROMCON&0xFF000000) == 0xFE000000 )        {            uprintf("W90P710 board is Found\n");            bin_entry=&bootloader_entry;            bin_tail=&bootloader_tail;            uprintf("WARNING: W90P710 Boot Loader will be updated!\n");        }        else        {            uprintf("ERROR: Unknown board configuration!\n");            return -1;        }    }
  4.     uprintf("\n -- Press any key to continue -- \n");    if( ugetchar()=='b' ) // key char given,     {        uprintf("Key character detected! Press key 'r' to update WBR, 'l' to update WBL\n");        switch(ugetchar())        {            case 'r':                uprintf("WARNING: Force to update W90P710 Boot ROM!!\n");                bin_entry=&bootrom_entry;                bin_tail=&bootrom_tail;                break;            case 'l':                uprintf("WARNING: Force to update W90P710 Boot Loader!!\n");                bin_entry=&bootloader_entry;                bin_tail=&bootloader_tail;                break;            default:                break;        }    }    size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);    if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )    {        uprintf("ROM code update successed!\n");    }    else    {        uprintf("ROM code update failed!\n");        return -1;    }
  5.     uprintf("\n -- Press any key to reboot -- \n");    ugetchar();    CLKSEL=CLKSEL|0x1;
  6.     while(1); /* Avoid semihosted exit caused error */    return 0;}
复制代码

" r; K2 x7 E" F本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  @* Z+ g( r8 y& s- C" |
在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. D0 R: I, ?/ i) D% d! Z7 R! A

$ \' d6 @2 ^$ G6 \' E8 x' l' _- 嵌入式底层驱动开发技术学习网站

( Z/ ?& B. M% w# J4 _- 嵌入式底层驱动开发技术学习网站- 嵌入式底层驱动开发技术学习网站- `& j, ^# ~0 Y: B& k) q: f% |

: q, P8 D  ]# T& n; xmcuos.com我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:- 嵌入式底层驱动开发技术学习网站/ v1 [/ L* ~! Q0 x

# {. g9 p4 i8 V, G- 嵌入式底层驱动开发技术学习网站在updater/bin.s中有如下代码:$ k  Z: ~# f# @
    EXPORT  bootrom_entry嵌入式开发联盟8 x: l' p) @& N
    EXPORT  bootrom_tail
4 e" L& x" b5 O* V, t- 嵌入式底层驱动开发技术学习网站    EXPORT  bootloader_entry
$ r$ u: n8 Q7 a. Zmcuos.com    EXPORT  bootloader_tail
0 V* C& e* R- m  N- O* T+ |) e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
+ ~0 ^4 y3 z5 Y嵌入式开发联盟    AREA bin_section, CODE, READONLY嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 b7 Z* t: u1 G0 ?3 W7 E* R
bootrom_entrymcuos.com' \' w9 X3 u: F1 v' X9 o) u1 J
IF {ENDIAN} = "little"
% {0 H  c7 X; d, |;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin
, ]; h9 ?% M; m! f! b- 嵌入式底层驱动开发技术学习网站 ELSE
7 [! i- c: I& \9 g5 ^;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  s9 X7 c) ^) O0 I2 ?. l( R
ENDIFmcuos.com5 q5 f" p( E. U- j' m2 c
bootrom_tail
' W) b2 {% X+ E6 u' s, r6 |- 嵌入式底层驱动开发技术学习网站- n' b9 o  Y) G

9 u8 ^: |2 U: J- v" R- 嵌入式底层驱动开发技术学习网站
8 Q" a$ m# C$ ]bootloader_entry
( F3 ~( G4 K) c. a! _1 x) ?# d5 Omcuos.com IF {ENDIAN} = "little"
: h( f) @  S6 M2 ~6 Y: G, ?2 S    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin
% b2 k8 c! I# h' I* f: C;   INCBIN  E:\image\bootloader\little\bootloader.bin嵌入式开发联盟# x  q" O# o; t9 r! w! J3 v: s
ELSE- 嵌入式底层驱动开发技术学习网站/ u" o5 x, L1 j/ y5 |
    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin- 嵌入式底层驱动开发技术学习网站# L/ t; ~+ }" ^! ]3 G6 ~
;   INCBIN  E:\image\bootloader\big\bootloader.bin
* s- P0 |: K! C' y6 Z: Z) @本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 ENDIF嵌入式开发联盟% O9 n5 L' S% e' s% m6 m
bootloader_tail嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3 I3 f* f1 n/ p& o& p. N  D

* D' ]( Q! v7 m: Y) G. A- v! B- 嵌入式底层驱动开发技术学习网站' u6 m9 o% U6 S3 m  }5 [

1 b4 p, P9 W8 I- 嵌入式底层驱动开发技术学习网站原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。
+ J8 \3 [$ K2 n% I) [& R9 k嵌入式开发联盟 if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )mcuos.com. z) E4 S, Q0 v( l/ ]3 H

# B" v6 G' q* J! B- G; @  [' y本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。mcuos.com+ y9 ]# r: O& x# E2 m; T
根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服