返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑
7 l) q* ]! ^/ n# b4 N& u( ?
9 }2 V/ ]* j& a9 e" o( U: Q3 A- 嵌入式底层驱动开发技术学习网站1, H-JTAG烧录bootloader:嵌入式开发联盟- k( b4 T, E$ u% c  `
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。. a/ a* w* x: Q

9 d" }! z, L/ B嵌入式开发联盟说明:
& U3 r# I: t7 y. J2 }3 _* I" r嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
$ J8 [" X# b9 o7 H/ C9 ]5 [嵌入式开发联盟1, 如果是4M的Norflash,则需将w90p710.hfc中的本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。  }0 z$ M  f! Q
Setmem+32-Bit+0xFFF01004+0xFE050084
" U, G, `4 R, K* w! M  Y+ U4 ?- 嵌入式底层驱动开发技术学习网站改为嵌入式开发联盟0 k$ w9 k0 F6 H- S% ?+ a# m) p  D- L
Setmem+32-Bit+0xFFF01004+0xFE040084- 嵌入式底层驱动开发技术学习网站5 m9 S" ^8 p& [2 W% `! e
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 r, M  l( t3 C1 ]1 ]- I
另外,在H-Flasher里选择相应的flash.
+ c2 W9 \0 a- p% l$ amcuos.com
8 p. \; M: g. k$ [7 `5 b$ J* k嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。
2 g) B8 E+ D) @! i) x本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 J, z' D, S" l- i, e0 T% h" e0 B: f8 c

  k9 ?9 h7 N( }) U本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
; f- w- A; @* x. c& d5 p& T% Q! imcuos.com2.   以前使用ADS烧录的方法参考附件:   mcuos.com4 P5 q' U2 r3 |! N& H% @# ^6 v
- 嵌入式底层驱动开发技术学习网站( S1 o4 c6 N# ^7 {# C9 K- h

3 _8 L$ c8 {5 x2 D7 }2 T4 z* q
4 ?2 c7 [+ U7 I! i' F- _嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 u, Q  ?3 }3 U& H: O# L
- 嵌入式底层驱动开发技术学习网站  R3 y  |: Z; r* P. ~
3, 在bootloader里升级bootloader本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。4 Y- i0 \, T; n4 S" h. L

6 z) W0 P: }# k. L* D本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:mcuos.com; _- ?' ^" t, {/ s& C7 e1 Z8 |/ B

1.
8 ~7 X. J8 U2 N1 Q: i在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000


* S9 y- _! l: G% C0 n5 y: s本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。


$ [  O: z, v: y% W3 O1 Qmcuos.com

2.
' r4 w! |- M- L: [1 b( u$ G- 嵌入式底层驱动开发技术学习网站在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

嵌入式开发联盟; U* |5 _, F/ S/ V8 n5 ~; n+ e2 n9 G

3.
* J- J" m! W  d; b, `嵌入式开发联盟使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000


! W' a# p7 ]0 T- 嵌入式底层驱动开发技术学习网站

4.本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 H6 t$ v- `/ G8 p8 ~4 P: \. \6 t
等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。

本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。5 o6 y, u; W5 ]& L: |
mcuos.com2 s, x; e" x, q" y2 a  h9 A
4, 为什么在bootloader里能使用updater.bin来升级bootloader?
0 ~, G" j; g, f+ x" I! H5 a- 嵌入式底层驱动开发技术学习网站mcuos.com, {3 T9 `0 ]  v3 y
以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:mcuos.com% b! ?( o4 o; q- _

  e1 n9 |& G4 Y1 I1 a嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习我们来看updater/updater.c的main():
6 k' Q* o. y2 |1 _$ C5 ^# U5 T本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 }& P0 R( t4 ]% o3 z
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习9 F& `/ D: J$ i- G
  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" f5 W1 B% N) U/ mmcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。' s! q% Y. t) v4 e
在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);
& }* l3 p8 D: l) s/ m- 嵌入式底层驱动开发技术学习网站: }7 f. w2 z/ U+ I; z6 o* ?

9 |) h' X* g) y2 W3 I3 h; D6 a& ^7 J嵌入式开发联盟
/ ^) l+ K! u- u本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
mcuos.com! s) z  |% C3 Q( y  }; q) p
我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  t0 S( C, n  I: i/ m& d

, S4 l# Z* _1 X) z5 M在updater/bin.s中有如下代码:嵌入式开发联盟5 _0 m( d) Y. X) a& @9 S
    EXPORT  bootrom_entry嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习; E- J4 h5 M' T4 l. N1 [+ v
    EXPORT  bootrom_tail
' N/ o: L$ _+ X+ [! h9 A' V2 Y8 u1 P本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。    EXPORT  bootloader_entry
7 `0 l% b3 d) o, W- B0 n嵌入式开发联盟    EXPORT  bootloader_tail- 嵌入式底层驱动开发技术学习网站; ?! o9 w9 T! I7 }* ~2 k2 ~, A2 {& {

6 v6 N6 F: j6 s. s  [8 s; v本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。    AREA bin_section, CODE, READONLY* ^/ `) S+ H* e( S8 y8 m
bootrom_entry+ E& t! j: E+ r% g0 W7 L
IF {ENDIAN} = "little"
) ]8 ]0 U# P: [' i& e;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin- 嵌入式底层驱动开发技术学习网站/ t5 p  k8 V' b* V9 @
ELSE嵌入式开发联盟, X0 b! w$ Y, N# T4 N
;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.binmcuos.com7 Z4 g) h6 F# n
ENDIF
) p7 w( V7 H; e2 S; m& @mcuos.combootrom_tailmcuos.com' r( Q. f  r6 a5 w8 r
- 嵌入式底层驱动开发技术学习网站# M) C  {& m8 Y/ O. s) e
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。# ^! Z0 B1 B8 j9 \
嵌入式开发联盟) ]- x+ c4 i3 K
bootloader_entry- 嵌入式底层驱动开发技术学习网站% C" _. g. ~# [" l7 Z9 x
IF {ENDIAN} = "little"嵌入式开发联盟6 k: W8 A+ G9 Q! d& y
    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习) P# l( E0 e" k9 B1 O& o
;   INCBIN  E:\image\bootloader\little\bootloader.bin- 嵌入式底层驱动开发技术学习网站8 v/ e* o/ j, B1 Y. ~0 O
ELSE
/ B- a) U* t% C4 e, h  H5 o7 v3 @mcuos.com    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin嵌入式开发联盟* R9 V% u! E- u/ o  Z
;   INCBIN  E:\image\bootloader\big\bootloader.bin
% ?# e2 r0 c  W( h1 a, A- 嵌入式底层驱动开发技术学习网站 ENDIF本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。) ]) T# \& U3 \4 h1 u  V- _
bootloader_tail- 嵌入式底层驱动开发技术学习网站$ c# r. V" o' h# K$ v0 e' {8 w8 X

$ `' s5 U( S% q8 Q  K3 q嵌入式开发联盟  u6 K! K1 ?6 n* l0 N+ J
嵌入式开发联盟" V4 x5 |- z$ v( b0 V* Y/ {( Z
原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。mcuos.com9 [/ ?9 n% G$ G$ d* k$ p) i
if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )mcuos.com# s% K: y0 z7 g5 w7 R7 u

& L! {+ l2 ?  F$ l/ _! q$ Vmcuos.com
) N3 ~; |2 N. j/ W2 R- 嵌入式底层驱动开发技术学习网站根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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