返回列表 发帖

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

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

本帖最后由 dglwx 于 2011-6-16 16:47 编辑 嵌入式开发联盟0 o/ s1 S4 W* w& |

! X% U( j4 [# T, k3 y1 `嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1, H-JTAG烧录bootloader:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习' s+ b1 D/ V. z# P+ l. M& f

( j, ]4 \# j) Y1 ]嵌入式开发联盟
' T; y( [3 h: p5 Gmcuos.com说明:
  Z0 }3 o' B8 Q7 l' x& C8 a) f附件中图片提到的L200使用的是w90p710,带有8M的Norflash(S29GL064N),如果大家使用其他型号的Flash,请作相应的修改:
. a( G6 j. j% D1 h2 |# H# c嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1, 如果是4M的Norflash,则需将w90p710.hfc中的
# B( L7 n# p& p0 ?- 嵌入式底层驱动开发技术学习网站Setmem+32-Bit+0xFFF01004+0xFE050084
3 }4 D8 T. |% f9 U0 F; U) C$ ?- 嵌入式底层驱动开发技术学习网站改为
2 q+ ]9 k' ?. k3 c& K# J& u! |Setmem+32-Bit+0xFFF01004+0xFE040084- 嵌入式底层驱动开发技术学习网站, C" f% a9 r& _
- 嵌入式底层驱动开发技术学习网站& J0 i. ]/ E1 s: ]) @+ d; o
另外,在H-Flasher里选择相应的flash.
: F5 _, t+ N: O  ^5 X7 M, p- 嵌入式底层驱动开发技术学习网站- 嵌入式底层驱动开发技术学习网站8 p/ s; L, X- x4 W
2,H-JTAG官方的w90p710的配置Norflash的起始地址为0xFF000000,这里我改为了0x7F000000(应该是这个值吧,参考 0xFFF01004(ROM/FLASH(ROMCON) Control Register  )的值的配置。嵌入式开发联盟( S) \  d' c+ G" r% x/ W" Y% j
其中的bootloader.bin编译后在这个路径下:WBLv1_1\image\bootloader\little\bootloader.bin嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- G6 K3 x/ p7 H

' E% q" E% T$ z4 @' t6 x" |嵌入式开发联盟
$ \6 \: `+ J# G2 }: H" J$ t嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习2.   以前使用ADS烧录的方法参考附件:   
0 r1 V3 W# A$ \9 A9 N. ^本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。: I& K) j5 R# M  j* }3 `, K* [
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- s! K; ?- n2 }- ]% }, e$ }
嵌入式开发联盟. D2 {) [1 p9 C# v: R

1 U; E- Y8 F$ r& d' q; V本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
/ L0 X4 i9 _7 g0 y8 v3 a嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3, 在bootloader里升级bootloader
! Z8 m6 j* a  }嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com  Z8 u0 y0 b0 G- E8 x
以前,在bootloader里升级bootloader时,可以使用使用下面两个命令来实现:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习* i# n7 B( p' s$ e* A( j$ w

1.9 r3 O5 u2 o5 \! A
在bootloader的命令提示符下输入mt 0x8000,该命令用来将ADS编译出来的updater.bin下载到内存的0x8000处:

     bootloader>mt 0x8000

本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 f$ {5 g$ C: M# ^! s( B7 n

嵌入式开发联盟- r) c- Q. d3 p4 c

2.- 嵌入式底层驱动开发技术学习网站" P/ y% v& C& D5 Z
在PC windows的命令提示符下使用tftp命令上传updater.bin文件到L200的内存中去:

      winxp_cmd> tftp -i 192.168.1.218 put updater.bin

嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  s  l& W4 C% u9 L

3.- 嵌入式底层驱动开发技术学习网站# w2 v, K# ^1 I" U- l
使用g命令运行下载下来的updater.bin文件:

     bootloader>g 0x8000

嵌入式开发联盟3 @( n. |/ c! S6 ^! q$ `

4.mcuos.com; g! ]( |+ Q% C1 M! X: C  h
等updater.bin程序运行一会后,按几下回车键。这时bootloader升级OK。

嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习+ ]# f$ ]4 a7 |( S

( ~3 v0 w6 U; V8 U, N: ]8 D- 嵌入式底层驱动开发技术学习网站4, 为什么在bootloader里能使用updater.bin来升级bootloader?mcuos.com$ q! g, L8 @5 Q- z( ^

( w8 b4 a9 }3 k5 e3 [! D以前一直没搞命令updater.bin究竟是怎么回事。最近认真阅读了一下代码才发现,确实设计挺巧妙的:
: Q. Y: Z% ?) m4 M2 c嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% R) z- X3 s5 N7 k# X6 ?- s
我们来看updater/updater.c的main():本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。9 Z4 e, o9 r1 s' \: t! a

) B0 a, W& s$ l, b  kmcuos.com- 嵌入式底层驱动开发技术学习网站8 s$ ~4 y' q" z
  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;}
复制代码
mcuos.com8 J7 x2 C! d9 I" T) C& e. R

+ ?6 f2 V( l3 d2 l' p; P& }+ {3 u本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。在上面的源码中我们可以看到,要烧录的文件的起始地址为bin_entry(&bootloader_entry),终止地址为bin_tail(即&bootloader_tail),而文件的大小为: size=(int)((unsigned int)bin_tail-(unsigned int)bin_entry);
0 F$ b% Q& l2 F* r+ g嵌入式开发联盟
# y7 |" a7 A' X  ~+ Y& i5 w本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。

8 n# M8 E; |6 [+ K2 k: Y嵌入式开发联盟
0 A- V9 ^/ P- {( \5 m

8 |0 |: e& {* l+ H- 嵌入式底层驱动开发技术学习网站我们在使用ADS调试updater.axf时,烧录的文件究竟从哪里来呢?这样,我们跟踪bootloader_entry和bootloader_tail的定义:- e* J' y3 H( f+ G' ~; Z$ Y

, e- ]% p) m: M. m( V: C. p- `mcuos.com在updater/bin.s中有如下代码:
! }! {1 ?5 D- |% P! a0 D8 G嵌入式开发联盟    EXPORT  bootrom_entrymcuos.com9 G0 a) M% v1 X$ [' M$ I
    EXPORT  bootrom_tail
- H& O2 z  j! z1 }' l    EXPORT  bootloader_entry
% q' A. o* w9 u; }/ [4 F% e& j嵌入式开发联盟    EXPORT  bootloader_tail
0 G8 n3 d: H; Y" s, F1 P- 嵌入式底层驱动开发技术学习网站
2 J& L+ ^, z; U嵌入式开发联盟    AREA bin_section, CODE, READONLY
3 w. ?2 Q* z9 b% k本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。bootrom_entry
7 j  Z! X, E1 x& e+ H本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 IF {ENDIAN} = "little"嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习* d; f8 ^1 R3 O" Y2 S
;   INCBIN  ..\WBRv1_1\image\bootrom\little\bootrom.bin
  W2 k! n$ @9 H7 I* @! x# R2 |本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 ELSE
$ X' s+ f5 O# g1 J' M# ?3 B9 V嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习;   INCBIN  ..\WBRv1_1\image\bootrom\big\bootrom.binmcuos.com% }" \1 h" T: E. g' B. A- v/ G
ENDIF嵌入式开发联盟4 d  L/ ]- T: l- @8 Y5 E
bootrom_tail
/ X$ m4 W. }. G0 K8 I8 I: }嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习: e/ n! h9 G4 \) d1 W/ J
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 G$ v* [2 j5 p. N, n' U% i# _
mcuos.com+ t( e; _  |+ s9 F/ d; n
bootloader_entry本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; y* }6 ~0 t4 m) I8 Z
IF {ENDIAN} = "little"
: z1 d1 R( Z5 t: [% l嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习    INCBIN  ..\WBLv1_1\image\bootloader\little\bootloader.bin
  K$ B9 h" e. C' J3 h- q本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。;   INCBIN  E:\image\bootloader\little\bootloader.bin- 嵌入式底层驱动开发技术学习网站& c, e7 O( w5 V3 M
ELSE嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% v* O7 @7 N4 Y/ l2 I0 B2 [
    INCBIN  ..\WBLv1_1\image\bootloader\big\bootloader.bin
5 D% n; q9 U( ]/ b. O0 @8 `9 T/ g;   INCBIN  E:\image\bootloader\big\bootloader.binmcuos.com: g" e4 V7 Y. `: V6 L
ENDIF
: H3 f0 j% b6 f6 ~0 ^/ Y& h9 ^嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习bootloader_tail
) p1 Z& o7 U3 i* k, v% z嵌入式开发联盟
! {& d/ d5 a* p7 G6 m% \mcuos.com
( X4 R( e! K, j嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com4 j, Q  ?! u( W% v: g$ ^+ N# M
原来updater.bin是在bin.s中把bootloader.bin包含在自己的image中,并导出bootloader.bin的起始地址和结束地址。然后,在我们在运行updater.bin,并按任意键时,他将bootloader.bin烧录到Norflash的0x7F000000地址上了。- 嵌入式底层驱动开发技术学习网站. c; X$ b/ ^: ]4 Z4 l5 j
if( flash_raw_write(bin_entry, (void *)0x7F000000, size) == 0 )嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习2 N# r% B* V9 S/ U! ~

  j3 G' |5 X5 H' V8 s4 b本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。mcuos.com, J' k( T. q' j8 X( g$ ~
根据上面的这个分析,也就知道怎么使用H-JTAG烧录w90p710的bootloader了。
附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码

好帖,置顶!加精!

TOP

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