返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑
, F, i$ |5 L4 j5 e$ _# q
7 ]9 b: J" K2 a嵌入式开发联盟1, H-JTAG烧录bootloader:
; I" S+ E7 g9 W& d) s嵌入式开发联盟mcuos.com- T! T8 a7 O6 y  t

4 i) R, V1 R9 b  u- 嵌入式底层驱动开发技术学习网站说明:
2 w2 |# P8 x3 P. B) `# _6 D附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:- 嵌入式底层驱动开发技术学习网站8 V  d( ]7 l* |
1, 如果是4M的Norflash,则需将w90p710.hfc中的
% r: F! x. I; ]$ `* K/ Z本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。Setmem+32-Bit+0xFFF01004+0xFE050084
/ O* f7 G3 \' T嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习改为嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习6 U2 h/ v7 }( Q1 h6 f' g& K
Setmem+32-Bit+0xFFF01004+0xFE040084
" H2 L% V- P, e+ b嵌入式开发联盟+ d* q0 \- W  D
另外,在H-Flasher里选择相应的flash.
# Z, w2 Q* c% T/ N- 嵌入式底层驱动开发技术学习网站/ w: {5 s9 {( m: `0 y
2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。: Q, Z% I2 w5 s, Q4 Z
其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin
' K4 l( L; z3 p. n1 l嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式开发联盟* b0 P" |- L& j$ ~

* _4 n" E3 E) @# ?. p嵌入式开发联盟2.   以前使用ADS烧录的方法参考附件:   
/ `/ d4 E5 Y1 x% U) Z+ Mmcuos.com
/ ~* j- w% B) M9 |mcuos.com
, @' s7 q* A$ ~+ Y0 Z4 S嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
' l5 T4 m- x3 x# Y8 ~/ ^1 T5 M9 r嵌入式开发联盟
- e. ^; b* d8 d1 M) ^- 嵌入式底层驱动开发技术学习网站1 @4 b7 {$ `, ]
3, 在bootloader里升级bootloader
/ ^7 T0 T* `4 b5 ^/ @2 }3 Fmcuos.com- 嵌入式底层驱动开发技术学习网站! Y* i; P0 n0 }  y0 B# |5 c
以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:
& K- M1 t% T, w. U# n& v/ G7 lmcuos.com

1.- 嵌入式底层驱动开发技术学习网站% O. g; R+ q2 a
在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000

本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 W. U  ^! b- w  o& Y

嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习# C9 t2 O7 f2 ]) w9 c

2.1 o9 t$ r- g1 a' z) X
在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin


1 U- G8 J& \: U* m本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。

3.- 嵌入式底层驱动开发技术学习网站. M) [0 I8 Y1 e7 B
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000


( x. @1 v' N2 K, S$ X  }/ ^. X% J嵌入式开发联盟

4.嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习; e5 z& t- F5 N; p
等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。


3 p5 z7 v7 a0 O$ \2 C  T' {8 Q嵌入式开发联盟嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% @$ C$ _8 j/ Y
4, 为什么在bootloader里能使用updater.bin来升级bootloader?
& C' `! P' N7 K0 e$ d  f嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
# n7 ^' G/ @/ `# Z% t嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:
$ X/ Q! @5 X- {mcuos.com- n7 J5 N$ |# O( R1 A: B+ n
我们来看updater/updater.c的main():# q4 ^" X# i: @2 A) \$ s0 S

& @( t# A( D" h嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习& g- ]5 h  K+ z' S% f
  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;}
复制代码

& O1 @; d1 a! _0 i* h" _' Y8 vmcuos.com
2 r( \. z5 a) K- 嵌入式底层驱动开发技术学习网站在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);
) s: A5 T0 R9 Y0 V* L/ o# j
9 p! c5 K, X$ A

4 E1 k9 n. L6 r! [4 l, j& w, q; h- jmcuos.com
3 x/ [* v/ Z7 y. z% z
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习" X; k* c5 v- H1 o
我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:mcuos.com. m0 p5 a7 A, [1 j
嵌入式开发联盟1 W5 ?- N' p5 W5 c( V
在updater/bin.s中有如下代码:嵌入式开发联盟2 L9 t% j4 @+ T* a! \2 p
    EXPORT  bootrom_entry
! _' u4 u, i9 s* e6 P    EXPORT  bootrom_tail
& o- W4 O: i! G- 嵌入式底层驱动开发技术学习网站    EXPORT  bootloader_entry
4 z( C5 q& U, v7 t7 ~本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。    EXPORT  bootloader_tail
8 B: q, ]( R! I: ~1 y0 J- e嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- 嵌入式底层驱动开发技术学习网站& q& j& O( ^/ _6 m+ ^& P7 P
    AREA bin_section, CODE, READONLY嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  O  U. a1 t0 \
bootrom_entry
9 f8 B0 g( K+ [, X IF {ENDIAN} = "little"5 J' G: x7 t/ m' O- s  P% ?
;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin# X) P2 e, {, \
ELSE嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习& J, G6 o2 H; i3 t, h( j/ f
;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin
* N& B8 n) t: |) E$ R1 }7 V嵌入式开发联盟 ENDIF/ F3 a) n- Z+ \8 q
bootrom_tail嵌入式开发联盟) A/ k7 D9 g6 s- _5 J  Y
嵌入式开发联盟) v$ f# }: j" N" N1 ~

0 Y, {6 c6 V- N本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
2 d4 ]3 w% p$ R8 ybootloader_entry
  j6 @4 d" j; j# D IF {ENDIAN} = "little"
0 t( Y2 ~6 |, N. r) p; a( l本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin
* D( R/ C7 a0 m4 u1 \- T& F嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习;   INCBIN  E:\image\bootloader\little\bootloader.bin
$ |0 V  m. e1 P" [4 w( @嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 ELSE
. T) n$ B" Y, L$ `mcuos.com    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin嵌入式开发联盟" T; y4 B, P% G, j5 n2 C
;   INCBIN  E:\image\bootloader\big\bootloader.binmcuos.com" d* j9 I  E8 v: [
ENDIF
  L  Q2 ^- r$ u# j嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootloader_tail
$ U0 Z8 U1 S  V% X- R% V8 g: ]mcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。6 W+ t! X4 Z0 f, \
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习& v& M9 H, Z' {
- 嵌入式底层驱动开发技术学习网站0 e$ {& U) o! ?, B* p/ ?! n
原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( Z3 i* W: a- i, K6 N
if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )
4 H6 `9 m% a7 m6 |' E, B3 Umcuos.com
( C. M6 U! p. ?1 Lmcuos.com嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习# O4 V% h. \' c; |  |$ `
根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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