返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑 - 嵌入式底层驱动开发技术学习网站: ~( H  E) u0 U; F7 N! h

5 l# q/ a) m  m2 ^1, H-JTAG烧录bootloader:  L1 x$ z. a6 C1 \2 f1 \
mcuos.com" I- ?( C) M3 g' w9 w, Y9 p. u- d
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。+ u5 B0 K" s) z9 J4 k
说明:
$ p" C4 z7 ?7 g+ M% b- |" [- 嵌入式底层驱动开发技术学习网站附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
8 O0 W( m) d- j. r- 嵌入式底层驱动开发技术学习网站1, 如果是4M的Norflash,则需将w90p710.hfc中的嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习5 \+ _1 i/ K0 R6 ^: i; V- ^0 a! U8 ]% n
Setmem+32-Bit+0xFFF01004+0xFE050084: p5 z1 w7 Y+ B4 k9 ^' L
改为- 嵌入式底层驱动开发技术学习网站/ B+ c& E: [2 C8 T: ]
Setmem+32-Bit+0xFFF01004+0xFE040084
0 e0 T1 U- q' c/ Z# o5 J嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习5 c& ^* i1 T" Y$ _* b" I& P* L
另外,在H-Flasher里选择相应的flash.本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。  p' @5 o% p$ o/ N
+ `* ~4 j8 X9 [' c
2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。+ M$ N7 ?# Y+ H! u& K5 t
其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin
! X+ y# N% D; ]+ ]' o7 i1 Q" W嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
& D% \: j8 Z( r4 G0 j1 L本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习( ^0 U! T; m! m" T! i9 o/ t
2.   以前使用ADS烧录的方法参考附件:   / ^1 C7 y$ M# `7 L! B/ U3 ^0 C9 x

4 F, I0 I" W' z- ]mcuos.com
* G5 V3 ~8 }. s+ O5 m2 T
' ~$ h5 V& J1 d# U- 嵌入式底层驱动开发技术学习网站- 嵌入式底层驱动开发技术学习网站* w2 a' M  d" D* S

" i' [# t. r3 E6 q. K3, 在bootloader里升级bootloader嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习2 H2 Y) v( a8 k: y. m
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。: z% r' \; I+ O' w* a5 B
以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3 u1 p7 Y% O, Y4 U

1.嵌入式开发联盟4 q& S" P3 e$ b  h6 A+ m
在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000

嵌入式开发联盟: g& k# B+ a1 |7 x9 l


' v1 V' x7 V$ x3 F嵌入式开发联盟

2.
  Q: j* t" f( W& g. k! l# B- 嵌入式底层驱动开发技术学习网站在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin


, J6 g5 |" ^* T3 @+ K- 嵌入式底层驱动开发技术学习网站

3.本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。: A3 E: i, H' A+ S- A, f& Z7 L7 z
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000


$ u0 Q' D  W" S9 y

4.
' g7 `" ~$ |9 A; h8 D- 嵌入式底层驱动开发技术学习网站等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。


$ |+ F7 u' P+ Z) \/ Z8 [: ]. g本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
" C: |  ]# T8 A* @1 j4, 为什么在bootloader里能使用updater.bin来升级bootloader?
6 P/ Q0 K8 M- B/ t3 I9 E9 l; k本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
- I3 n& ?: F: o+ E) t' Xmcuos.com以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( M0 p* `, @& w: z2 \
- 嵌入式底层驱动开发技术学习网站9 E. Z* Q, `8 w8 P- X# T; }+ R
我们来看updater/updater.c的main():
9 \0 r) ~) r; z) q! x本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 Q1 B, M. R/ A4 Y- x% ?

3 N  q$ ~& R9 [) D7 J3 X* A- W$ R0 a嵌入式开发联盟
  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;}
复制代码

+ N" }" T4 b. z. [/ H. P本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
9 I# }1 }- r% O. F2 ~  M" ^; m% @嵌入式开发联盟在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);嵌入式开发联盟! k/ l' x6 Q- r1 Y+ ^

+ O# @, U+ _3 L+ w( K
嵌入式开发联盟+ @7 \  k1 P* m4 V6 @6 G
mcuos.com" {* f( j5 J6 b* Y8 V

  |% k% M2 U/ U本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:
1 A/ C9 f; r0 Y) G$ L1 k5 d嵌入式开发联盟
$ c. o  u4 j/ L: t' L在updater/bin.s中有如下代码:mcuos.com5 ?, R7 v( f2 p" \
    EXPORT  bootrom_entry
, e9 S  a9 \* G" ~; O    EXPORT  bootrom_tail本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( k! W, |9 K. @3 ?
    EXPORT  bootloader_entry
9 a  A/ q) `, ^嵌入式开发联盟    EXPORT  bootloader_tail
, A& E! g  }! E嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- 嵌入式底层驱动开发技术学习网站- d6 e$ |+ V% J5 a/ H
    AREA bin_section, CODE, READONLYmcuos.com* U2 i1 F: m6 Z& U& F7 o
bootrom_entry2 C  y3 d, m2 k$ U0 s
IF {ENDIAN} = "little"mcuos.com, ?' W& V7 X/ d! o. v9 g3 W
;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin
! d  W1 O8 r& G5 t ELSE
" h2 ^. Z& K) ?+ J: e- 嵌入式底层驱动开发技术学习网站;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.bin
) h$ M6 ~$ g' C' X9 d7 z* _4 s  u嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 ENDIF; z. y) v# d7 q# K( r9 T* u
bootrom_tail
4 T* P. _; [. ~8 k3 emcuos.com
% m& e- ]+ @  u) [5 \) @- 嵌入式底层驱动开发技术学习网站
5 G2 D2 h& [1 \- 嵌入式底层驱动开发技术学习网站4 B* v4 F: W. I) G6 `6 T
bootloader_entry- 嵌入式底层驱动开发技术学习网站; F7 \; ^0 X' |) I; o
IF {ENDIAN} = "little"本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% q& ^1 s" g9 C; V
    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin
7 o) u7 c- K, v& P嵌入式开发联盟;   INCBIN  E:\image\bootloader\little\bootloader.bin
. w& S. m$ M8 o; e' |" H# D ELSE
+ e3 C' f% J) ?! z- @7 a9 Hmcuos.com    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin
0 F. l, |9 T( r! E  y: u嵌入式开发联盟;   INCBIN  E:\image\bootloader\big\bootloader.bin本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。$ Y( e  D3 n9 W$ A
ENDIF
, M+ g! }$ S3 L4 i嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootloader_tail
- |+ I8 G  T7 O) W& ]- X( Z本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- 嵌入式底层驱动开发技术学习网站9 M# a( c- g- G7 V" G; l1 R
- 嵌入式底层驱动开发技术学习网站" u$ S3 Y- R% R8 N6 J4 }6 X4 A

2 ^( ^6 q+ ?: |mcuos.com原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。
5 w  m% v' ^& h% u# Y" y嵌入式开发联盟 if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )- 嵌入式底层驱动开发技术学习网站4 k' f- N- ^6 g# P! ^3 @# j

" T9 f% H' N. w嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式开发联盟  k" ~& I5 w& ~
根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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