返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑 mcuos.com, N  t: C4 u, ]5 I" Z2 O1 M

2 b9 L; @  i8 Q, m& j$ O本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。1, H-JTAG烧录bootloader:
1 q) M$ O  R( N+ Q& l- 嵌入式底层驱动开发技术学习网站$ z$ X( t$ a( P: \1 q3 m
mcuos.com( |5 P% ~: n/ H2 |3 [
说明:mcuos.com! S: v" [6 ~' N% l' b& {
附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
$ O( c, d. ~" i, G8 j! p1 {嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1, 如果是4M的Norflash,则需将w90p710.hfc中的嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习) P( ^5 k+ E  A, V6 c# |
Setmem+32-Bit+0xFFF01004+0xFE050084
3 G/ ?/ c- a& v5 p: |- 嵌入式底层驱动开发技术学习网站改为
$ C2 D- u0 f+ C: R* p* c本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。Setmem+32-Bit+0xFFF01004+0xFE040084
8 z' a4 }7 o% Y本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。5 P$ g& t( E# `! F$ V
另外,在H-Flasher里选择相应的flash.嵌入式开发联盟" C& B8 G: x* K0 X
- 嵌入式底层驱动开发技术学习网站' P7 n% r: T; b- }& _. g
2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。- 嵌入式底层驱动开发技术学习网站' K! F$ H( |9 ^
其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin
9 @6 p% s2 [, i5 w5 k+ \) `5 F# d$ z% f嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习$ w& S. o8 M- Z5 p; ?

+ q6 L; o& p% n/ r/ V. X1 h本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2.   以前使用ADS烧录的方法参考附件:   
& [) X6 w' a9 C( b) X& \嵌入式开发联盟
& J% y6 K4 F2 U8 bmcuos.com
' ?; d" V/ I% B
% y. @# X7 G+ [1 j7 Q# {/ r嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
) {" U  g% Z, p) w% x
: _& j! j& y) u; p嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3, 在bootloader里升级bootloader: A0 x) P1 W4 p( @; y

- @$ a$ {) }- Z; K0 }5 h嵌入式开发联盟以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:
; R, f6 Q  ^: X% O* B; omcuos.com

1.
& ?, E! b* g! A- 嵌入式底层驱动开发技术学习网站在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000


; M7 `+ b3 R! u( `( o4 D) Mmcuos.com

嵌入式开发联盟" {; \9 |7 `$ W! E

2.
: F' k1 E2 s  I4 o+ J. ^在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习7 E4 t- V. k: e2 Y1 A

3.嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 Y4 C0 C: N* H1 n8 R. b. H+ A
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000

mcuos.com/ [" |5 ]% ]0 `6 w6 v; ?

4.
& w3 x5 G/ z+ |- 嵌入式底层驱动开发技术学习网站等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。


5 {2 H* H  F4 N本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式开发联盟6 e3 K$ x- E/ Y7 b3 s7 D
4, 为什么在bootloader里能使用updater.bin来升级bootloader?
8 \3 c# _! [6 ^" E$ Y" V0 y7 i嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习) J% T, T" O, \# a7 ]. B5 ~
以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:
( r* P! k; X9 G8 t0 r嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
8 I: {8 w* z4 h5 W, Tmcuos.com我们来看updater/updater.c的main():# S$ U% L  p+ @4 D8 v

$ \/ Q; x9 l: T% Z$ t8 f2 }! ?1 ]% J嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习# ?+ ]- u& ~2 p9 Q* u) l2 q
  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;}
复制代码
嵌入式开发联盟0 _$ m9 z5 v, `5 n/ z1 G

! |3 Z2 d( |$ t& l. C' K# \mcuos.com在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);
6 C8 F  S/ t4 I4 P6 _; i0 L* a本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习' @  ^6 a+ S* t$ Z0 h3 k
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习7 Q3 ]; S9 {8 G. X+ f3 D0 ^

3 b; ~$ A' j5 U$ N9 u: [6 y: g- g- 嵌入式底层驱动开发技术学习网站

8 @; R. s4 T. g3 M本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习" W+ s9 _0 a7 c  }4 f: _
- o" m# k7 Z, s" K: H8 q
在updater/bin.s中有如下代码:mcuos.com3 g8 C/ b0 d4 j+ F$ g: |  R
    EXPORT  bootrom_entry嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3 [) ^. c3 v1 m2 x
    EXPORT  bootrom_tail本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。6 U: ]0 C9 P) S6 T$ s9 Q  j, b
    EXPORT  bootloader_entrymcuos.com, n2 F$ |, B+ X
    EXPORT  bootloader_tail
6 E. k& U( d% M. P. V+ I本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- 嵌入式底层驱动开发技术学习网站6 ?4 Z6 I+ W: ^
    AREA bin_section, CODE, READONLY
1 b: i7 Y5 C0 w6 ~- |% r本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。bootrom_entry
' p' J. Q5 M2 G& U. u+ x/ m" } IF {ENDIAN} = "little"
1 j, T$ N- W, a" u4 V6 w嵌入式开发联盟;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin
8 a/ T( q8 I2 Z: {3 P' E. Q嵌入式开发联盟 ELSE
2 S" z3 ~: G4 A0 omcuos.com;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。+ @1 r# O4 o" y, R- _$ Y3 x* H- L
ENDIF
* e; O3 Z5 f+ M) i- `嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootrom_tail嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习! o  I, V. u: d9 c4 j
- 嵌入式底层驱动开发技术学习网站* _! d: C' \+ j# Q

7 B$ y* F2 |% s) B, \5 }嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com" z2 q/ R. F. E8 Q
bootloader_entry4 _0 z+ u7 N/ _- X1 |
IF {ENDIAN} = "little"本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。& y0 ^0 S% N% X- Q
    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin嵌入式开发联盟0 e5 @& i+ r) G& ~! U& Z3 A
;   INCBIN  E:\image\bootloader\little\bootloader.bin嵌入式开发联盟7 N8 g8 ^: W' P& F6 b
ELSE本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。, z4 F& f' e- a* |3 g5 G( n  I" m
    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin
& D& t5 N) b4 kmcuos.com;   INCBIN  E:\image\bootloader\big\bootloader.bin本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- g3 N' z( A1 o3 B7 ?4 K, U
ENDIF
: i) ~: c0 S) ?, X嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootloader_tail本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 L* W( k9 E! ~; S1 f! x, _; Z

# W3 j$ L7 b: W3 c- }- 嵌入式底层驱动开发技术学习网站7 q  r1 [7 F* Y: E/ ^* _. M! k: ^

. j) F: i7 |3 f& a6 ]- A3 t" Q原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。mcuos.com1 h+ L+ y/ M+ [6 n7 @* a9 P0 e$ [' c7 t
if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )
: V$ V% J0 C! I5 M本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
/ U9 I, ~3 @) w# F9 t9 W嵌入式开发联盟
7 x, K) x  ~- X: v' h. L9 L1 Nmcuos.com根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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