返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑
$ l+ Y  [' s( }& W( b9 q( J本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
8 o5 W0 T+ N% v  B! {. r7 V嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1, H-JTAG烧录bootloader:
$ Y1 m5 |/ G/ E( Q- o嵌入式开发联盟本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。4 y- w, c8 o, |( D7 L

( C; ]0 T! T& c0 v* [& e- 嵌入式底层驱动开发技术学习网站说明:/ K* J5 {  R$ K6 O' J5 `
附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- v% x4 g8 [3 `" U
1, 如果是4M的Norflash,则需将w90p710.hfc中的
; x0 k; n7 [! d8 j, }: omcuos.comSetmem+32-Bit+0xFFF01004+0xFE050084
3 A- S# U4 ~5 B# pmcuos.com改为本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; }" }' O7 O/ e. C2 K( ~: f# ^
Setmem+32-Bit+0xFFF01004+0xFE040084
: t' d: O1 p, D. emcuos.com' Q/ |8 a5 L4 }4 F) Q( W
另外,在H-Flasher里选择相应的flash.
* }5 c5 S4 ~5 ]) P嵌入式开发联盟
9 i' q& B8 U- Kmcuos.com2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。
, ?; {% t" s2 T2 u* ?mcuos.com其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin- 嵌入式底层驱动开发技术学习网站" h0 v) s# s; e* [. V3 S8 o
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。, _. x7 q# W+ I1 U7 `6 C1 g: [
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习4 |% v1 F7 ~; x
2.   以前使用ADS烧录的方法参考附件:   
2 z, }6 p* d! _( p/ b* @- 嵌入式底层驱动开发技术学习网站3 u6 V. j7 v8 L: I

2 r. u* p) o' ]mcuos.com) i0 c. u8 I! G3 n1 }- k- c$ @# y; X  r
* ?! J( y8 D1 C/ @6 ^8 B

. E/ K  g5 m; h9 O2 n6 y  d嵌入式开发联盟3, 在bootloader里升级bootloader
+ [1 k! ^6 ?5 b  v' q/ V7 E嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
, d/ ^, U$ D  d# a本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。4 |9 I  d/ |0 ?" y" u! b9 z6 Y

1.& o. Y( \- A6 ^, V
在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000


: j% J' T) W' z* F嵌入式开发联盟


: b! p* z+ m8 o4 u7 n' y5 W嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习

2.
8 N% [* G8 k( k" H* D% E# x本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

嵌入式开发联盟6 t6 K$ i$ n6 t& U' y+ y- r

3.mcuos.com  q8 e4 {( ]3 P* @* |9 T
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000


% w; _/ E  k- j6 y$ [$ rmcuos.com

4.: Y' [& M( e3 M. Q# I3 u+ D' Q7 f. W
等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。

$ ?3 m! w; S; k0 I

0 h* X8 ^$ x( J2 S2 n& H% O嵌入式开发联盟4, 为什么在bootloader里能使用updater.bin来升级bootloader?
# x3 y  [6 q% b& S# p0 z- 嵌入式底层驱动开发技术学习网站
) A4 ^; [5 K# p  a+ F8 hmcuos.com以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 @5 {2 B/ r  p  W7 O

  t7 R5 j7 G& t0 r/ s嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习我们来看updater/updater.c的main():嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习, t# j7 o8 t2 L9 B6 W9 i

3 H; ?/ a; x) H+ e
; D3 I9 |; j/ K# n. h; H% Z. u- 嵌入式底层驱动开发技术学习网站
  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 [* p0 e' T0 o4 q+ f, t
嵌入式开发联盟& ~/ h% ~6 ?5 G1 Y
在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);
% U/ D4 d6 g( j; q  e3 i嵌入式开发联盟
) x/ r" d  h, n3 B  z" B% t- 嵌入式底层驱动开发技术学习网站
: e5 ]: w& e$ Q+ {3 N/ k- v
嵌入式开发联盟& i4 E2 p; i: z0 }3 C" D* S
mcuos.com* T2 k: C/ X, _5 r. r3 ^
我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:- 嵌入式底层驱动开发技术学习网站/ d" S* p1 k- Q$ ]; r. v, J
- 嵌入式底层驱动开发技术学习网站1 G  N: n7 ^# b! f% p% _
在updater/bin.s中有如下代码:
! \! b" Z+ j# f. q7 I  t& @+ Y嵌入式开发联盟    EXPORT  bootrom_entry嵌入式开发联盟; N' s: w/ `; z- @& b
    EXPORT  bootrom_tailmcuos.com& e4 L  U5 r. m
    EXPORT  bootloader_entry
0 W0 k% v9 {! S/ ]/ r; G9 f    EXPORT  bootloader_tail嵌入式开发联盟% _  j. f* s7 k4 \3 Z1 L
mcuos.com6 O& p/ ?. a; ^: ?; w. d8 g) y
    AREA bin_section, CODE, READONLY嵌入式开发联盟/ e0 D3 R( h9 @% @; c: Y- ^+ X
bootrom_entry嵌入式开发联盟4 i' Z9 u9 g6 x1 [+ K8 D
IF {ENDIAN} = "little"
! X& p) k( a, D: [6 c- 嵌入式底层驱动开发技术学习网站;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。3 O7 s8 j( ^* B# y
ELSE
: D! Q8 B$ o3 N, L4 emcuos.com;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin
/ c( ?- U, @' b: G. d! r嵌入式开发联盟 ENDIF
, Z' x* O. f( U/ U9 ?* P嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootrom_tail
+ j% x& S3 q, k3 y: d- K嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
8 |" e" r0 \: Q  b2 l嵌入式开发联盟
6 I; F* F  M& p: omcuos.com
; t: c/ Y1 W1 G: G. _' O# J8 Ybootloader_entry
  p, N0 ~' n+ L9 B, E嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 IF {ENDIAN} = "little"
5 Q; d1 r4 t- i' A, `本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin) }) q: [4 r9 y9 Z0 Q
;   INCBIN  E:\image\bootloader\little\bootloader.bin
) S9 T! `" U$ @本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 ELSE0 B/ d/ m* w' r
    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习7 ?9 x' Q9 ]& C; B  w$ d  F- o
;   INCBIN  E:\image\bootloader\big\bootloader.bin- 嵌入式底层驱动开发技术学习网站4 d7 ^! _+ B- Y2 y9 E* A* y+ y+ f+ N
ENDIF6 P3 Q5 f: @& y! g
bootloader_tail嵌入式开发联盟2 {; m% b- g4 P6 W

! T4 `, s7 S. }- j* J( t/ H- 嵌入式底层驱动开发技术学习网站嵌入式开发联盟" b" h) H3 m( \5 M6 G# z- J

/ z& b5 r7 a1 \# _' u/ ^嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。( S1 i( }4 _7 L: J/ l2 _; E
if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )5 {1 V5 l5 ~( V- ~4 K( O- N5 U  s

+ A8 L; |% Y; O* r, G7 E: {本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。. ~' S1 x* ?( W
根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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