返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑
1 F: Q& [& G8 ^: F9 A嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- 嵌入式底层驱动开发技术学习网站4 v, Q* E! a3 U$ X8 j4 B3 Q
1, H-JTAG烧录bootloader:
" R4 g- c% P1 Y" I  Y! n* i本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
4 \1 R7 D7 @3 E; A( s$ }/ C7 P- 嵌入式底层驱动开发技术学习网站
! X7 z. a) E' O5 I. j嵌入式开发联盟说明:
% U8 F$ ]0 J- L  V+ w本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
# e! l+ h! v4 _* y( u0 P# U1, 如果是4M的Norflash,则需将w90p710.hfc中的mcuos.com" M- @5 f1 p& }7 [, S( H: {
Setmem+32-Bit+0xFFF01004+0xFE050084嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. P- i* O/ O- }1 r: `. h- h
改为mcuos.com7 a/ s: A2 h+ _7 h% x: r
Setmem+32-Bit+0xFFF01004+0xFE040084嵌入式开发联盟' |* z' s& |: z( E; M) }; L6 y$ N: x

( G  i: M" U) T/ Z+ l8 i& c嵌入式开发联盟另外,在H-Flasher里选择相应的flash.mcuos.com$ L; t& j1 A8 v* H7 }

9 _7 {9 u' p8 I0 @& ^2 I9 \1 G& |. x% z* Y本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习4 N1 N4 q2 f( v8 b# S- f0 Y6 K$ d
其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin
5 C2 z; T. ?7 [9 g1 amcuos.com
1 x& `4 F" ], emcuos.com, t2 A3 C4 n! }
2.   以前使用ADS烧录的方法参考附件:   
' ~1 }! s& ^' P; s4 K
( C4 b( T' F. S0 Q' F) J  I本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
. i0 C7 o1 W+ W: W7 U- 嵌入式底层驱动开发技术学习网站嵌入式开发联盟7 r2 X2 H/ M$ z5 w

* q* T. U" ?. ?' p0 U" t# v( y  U' b0 ]嵌入式开发联盟
2 j* n! F) J7 ^' n嵌入式开发联盟3, 在bootloader里升级bootloadermcuos.com7 o* j3 ~' _$ V9 Y: a

" a9 m$ i7 {6 s6 Q- 嵌入式底层驱动开发技术学习网站以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:- 嵌入式底层驱动开发技术学习网站7 V& j8 [4 h- p7 s7 v' H- r) c

1.
# I/ D9 V7 [, \在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000

本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。6 s9 u( l. ^/ d# s0 ^

嵌入式开发联盟0 l  x; S9 ]; T3 ~, d6 _% S: X; O# y

2.
4 r& j+ @6 [8 y+ T  }mcuos.com在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

mcuos.com  N- K3 a2 d( |, u( V

3.嵌入式开发联盟' B. N8 t, ^2 G% Z$ P3 K  D- m% V, R' d2 @
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000


9 y3 _7 D1 `: e' R$ {" H# V嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习

4.+ r' x% [3 y6 a: j) x
等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。

9 x5 F9 `) L6 u$ w# _$ u% Y

9 D8 O  {7 g$ Q4 g1 o7 L  ?- 嵌入式底层驱动开发技术学习网站4, 为什么在bootloader里能使用updater.bin来升级bootloader?
. d: Y- T% X( ^0 A, {( t3 }( A5 H- 嵌入式底层驱动开发技术学习网站
$ i: b% ?! J: C8 A" a) J3 c嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:
' |3 G' h8 d; v3 i本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
2 }" E3 Y# x) |( Z5 z- 嵌入式底层驱动开发技术学习网站我们来看updater/updater.c的main():
: b) H5 S- |) h5 c  ?本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。9 m/ a1 y2 V0 x' j8 z' \

& ^' e* U4 k8 E- {' b# @本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
  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;}
复制代码

  }$ T5 [7 j% l; [) V6 }嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
7 y4 \( J8 t: l! V' a- i! ~本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);mcuos.com6 g& H5 @3 G9 D% }& X1 n9 q% y
嵌入式开发联盟8 }1 x, R1 l' w0 \' R6 p

* l; F% E  }7 G. d6 r  U- 嵌入式底层驱动开发技术学习网站
& t- [+ T+ n: ]& a& z% R本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
* m4 M3 a+ B' o  l' i
我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:- 嵌入式底层驱动开发技术学习网站# Y/ O% X: W) }* H! C+ ^

! p% p- V7 F1 a2 e( B0 x嵌入式开发联盟在updater/bin.s中有如下代码:
* ^& ]; ~6 R' u) g& |# F/ b3 n6 y# wmcuos.com    EXPORT  bootrom_entry
' }% C+ `* c$ M0 i  i    EXPORT  bootrom_tailmcuos.com/ Z/ b& Y* U# e& }7 |9 z
    EXPORT  bootloader_entry本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。4 G8 [& N) C! E, N0 w
    EXPORT  bootloader_tail- 嵌入式底层驱动开发技术学习网站9 Q+ H* U( p' R4 U/ Y7 r) f
嵌入式开发联盟4 w- [; q- o5 u+ @) a- R8 X
    AREA bin_section, CODE, READONLY嵌入式开发联盟' z4 S$ @  A6 L/ F. J
bootrom_entry
& {! |5 c$ K, Rmcuos.com IF {ENDIAN} = "little"" v9 H) w' @7 F# W
;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin
7 w0 v. E' ?5 i; P! |1 I嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 ELSE本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。& @9 y$ I% X( v* O
;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin
* ~5 R" V- S# g6 M本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 ENDIF
" I& g/ j7 _( z" q  N- 嵌入式底层驱动开发技术学习网站bootrom_tail- 嵌入式底层驱动开发技术学习网站0 |- a- Y2 I1 N, @2 X0 u3 ^

- k" t; r) z; h6 @6 o嵌入式开发联盟
5 J4 `1 K5 R) J! X  N, V4 j嵌入式开发联盟嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1 K) `1 Q: o5 z: _$ `9 ]
bootloader_entry8 H2 }" |5 M" D# ]& q& _
IF {ENDIAN} = "little"- 嵌入式底层驱动开发技术学习网站4 k. i) N$ q; O, i; v
    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin
9 z' _5 l9 i  Q6 {- 嵌入式底层驱动开发技术学习网站;   INCBIN  E:\image\bootloader\little\bootloader.bin嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习2 U0 f+ Z8 _/ x0 z" g" F
ELSE- 嵌入式底层驱动开发技术学习网站5 a# ~0 ^" z" {1 D/ e' t+ M
    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin
" P4 B# j" _9 Z; W;   INCBIN  E:\image\bootloader\big\bootloader.bin
9 I/ V- r! F$ {+ ^% M" C- 嵌入式底层驱动开发技术学习网站 ENDIFmcuos.com2 f, I- r. z5 c6 @2 N' A9 t
bootloader_tail
5 ~$ q# V/ P: N( A# _( ]0 K0 \3 Hmcuos.com
% B" t6 V  i. i3 k% A/ k' b7 vmcuos.com- [( i( r* q! E& K' p

, E. C3 }' e5 P! a% v- 嵌入式底层驱动开发技术学习网站原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。
% Y* R/ w4 }4 R; n嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )- 嵌入式底层驱动开发技术学习网站1 E- k! l: O  ^+ i
嵌入式开发联盟( o, B/ i* g5 b6 U. S' f- ]2 k
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 T7 v& F/ t: |( ^0 z3 U& `0 q
根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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