返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑
$ I8 a3 |& |4 L6 @" Zmcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。# P6 S3 Q6 ^: W4 P2 P$ }; ?
1, H-JTAG烧录bootloader:
3 \6 O8 E' }0 D6 dmcuos.com- 嵌入式底层驱动开发技术学习网站" j% N1 H$ U5 W, H) r

( J2 k# V$ D# l! t嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习说明:
, |: B4 c3 s# N% P0 l! d8 O嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
: u9 H+ @, T- }嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1, 如果是4M的Norflash,则需将w90p710.hfc中的
1 S: u! E; a, o/ Z$ g3 B- 嵌入式底层驱动开发技术学习网站Setmem+32-Bit+0xFFF01004+0xFE050084
5 N- V8 \' U. z$ U. a2 J本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。改为嵌入式开发联盟% m# G  ^2 b( P; g* ^4 ?3 K) S
Setmem+32-Bit+0xFFF01004+0xFE040084mcuos.com7 u( l+ ~9 g/ ]. X+ P6 T( ^
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习+ }/ U8 m) D5 ]# y4 T
另外,在H-Flasher里选择相应的flash.
8 p- T! L' z* Y$ E; R! H& f% W嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
) B6 P0 j6 j$ a; {5 U2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。
! T5 B2 O, z- h/ u# I其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin: a+ i; R% d, }. y* y1 H

" I3 q" C6 m% a8 c2 S- x0 L, k本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/ z9 w2 L) B% l9 y+ W
2.   以前使用ADS烧录的方法参考附件:   . V6 _4 @/ O  L

; g5 U- z+ s* F" x! I% a, R" h9 X! N: c* G* c8 y4 |
- 嵌入式底层驱动开发技术学习网站" _) a% b+ V/ i# s: {2 S

, @& N# p9 }  j2 A9 pmcuos.com- 嵌入式底层驱动开发技术学习网站" o+ w- X1 l; j! E! w
3, 在bootloader里升级bootloader嵌入式开发联盟8 {" M3 k8 g- }1 i, W9 ]! ]

3 W( ~2 C; l' d% @  F6 {* S嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习0 a2 T" @# O! \6 \7 G, O

1.
7 @  d# X/ |; d; @) z% k7 i本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000


: x& l  y$ h; `$ I, T嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习


  v: z, G8 f$ Y+ g

2.
' g& [6 J4 M, U! ~在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

- 嵌入式底层驱动开发技术学习网站6 q% n2 x% y) u, z

3.嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习: L" O2 V1 o$ R
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000


: [! k. b3 S; t, |% I) m: c- I嵌入式开发联盟

4.
/ a* u" l( S. N0 |. _. D6 V嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。

' Z7 B, k3 r6 z% V" K! Q& j
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。' e; ^4 a( _1 q. m, S' f; x/ d- f
4, 为什么在bootloader里能使用updater.bin来升级bootloader?
3 Z7 I7 e. A1 X( U本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
6 g  v# ^' e2 r6 U1 Z- 嵌入式底层驱动开发技术学习网站以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:
. Z$ I$ B  u/ |8 pmcuos.com
+ }' M: ^5 o& a" h嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习我们来看updater/updater.c的main():
4 e  }. p: u% |- 嵌入式底层驱动开发技术学习网站
7 |0 f' B& E) ]/ ~嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- 嵌入式底层驱动开发技术学习网站2 g1 {) @6 u+ c) B- B% H8 P
  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 p5 C0 ^' J6 N2 z  b: t
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习! F  M+ C1 X& E  c- J  K2 h
在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);mcuos.com- {) E2 o% K6 ?

. t; s8 |4 r+ f" l  s
  N, C9 v9 Z) U5 H2 l1 c& W0 j
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习5 o; `: {" \  Q- |

  b: R8 c% }7 Z6 q( ~7 {我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:
2 X" j) ^8 |. O/ o7 h6 I嵌入式开发联盟
/ T7 K6 Q. e9 r0 v0 v在updater/bin.s中有如下代码:
! n; _4 q3 ^4 y嵌入式开发联盟    EXPORT  bootrom_entry
' z$ g- ]  p6 J0 @5 ^# m嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习    EXPORT  bootrom_tail- H3 ]2 o  M1 G( C1 c, b, U- G, ?
    EXPORT  bootloader_entry
! U! o9 w* y* tmcuos.com    EXPORT  bootloader_tail嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. D( @) {0 r0 I
mcuos.com, \# X; s  H" w, Z! T
    AREA bin_section, CODE, READONLY
! V. w' A4 ^4 ~$ K8 m# O4 z! c0 o本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。bootrom_entry2 f9 o- @" m' {. W6 j$ n' i
IF {ENDIAN} = "little"- 嵌入式底层驱动开发技术学习网站$ v( P1 K! E' k1 y" w- r2 H- p4 L7 l
;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin
3 T$ @# d8 B# Y ELSE- 嵌入式底层驱动开发技术学习网站8 n, m; O9 |- b
;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin
9 X" S+ A8 c1 emcuos.com ENDIF
8 g# p) ^5 W) t, ^  n5 i3 F2 z1 j嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootrom_tail
% U% N$ J% H# j2 ]: R, X% }' Wmcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。, ]: ~+ t1 v# Z$ A! K: f

6 Z0 q3 }  t/ E  D! h% s! t$ J嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
3 l3 p  }! k5 E0 L7 _6 s嵌入式开发联盟bootloader_entry
9 B0 k3 t6 B- Y) n4 V8 L4 Z8 Imcuos.com IF {ENDIAN} = "little"
2 L3 i% s& O6 p+ f% b7 R# c% _嵌入式开发联盟    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。6 [6 t: o0 k! l- g1 ^
;   INCBIN  E:\image\bootloader\little\bootloader.bin, v# Y0 z- q6 [2 I$ c. D  u
ELSE
; h) ^7 N6 F' S4 E' Q4 N2 h" J+ Q- 嵌入式底层驱动开发技术学习网站    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin
% }) w& U" j# emcuos.com;   INCBIN  E:\image\bootloader\big\bootloader.bin
9 p9 m; _$ ~( N  ^5 T; b嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 ENDIF
0 W* l& _) }/ Smcuos.combootloader_tailmcuos.com0 R$ M" t* `8 @- `6 V/ ~

5 O. u$ I0 Z& Z0 H1 a$ \8 S嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com* G* _8 y* [' ]( l6 ?8 p; V7 g
- 嵌入式底层驱动开发技术学习网站6 t  v8 a: j9 D) S! G8 g! F
原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。嵌入式开发联盟: F' g  b  a3 ~; `: C& q/ t
if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。, j3 v5 S# ?$ h
嵌入式开发联盟, g8 r  ]# E6 a# I8 N

3 j% m+ L, d! p1 I; c0 d0 ^+ I根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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