[原创] 通过以太网bootloader下载程序的方法

academic   2010-11-22 13:20 楼主

     很多芯片出厂的时候在开始地址处放有bootloader。比如在0x0~0x1000处。只不过经过我们烧写一次之后,就把这个位置的bootloader给擦掉了。

先简单说下步骤,然后再说程序该怎么改:

1.先下载以太网的bootloader到0x0处,当然这个bootloader中要指定应用程序的起始地址,比如我们给bootloader留下4k的空间,则应用程序的起始地址是0x1000.

2.找到要下载的应用,修改其*.sct文件,是应用的下载地址为0x1000,注意修改后别忘了编译一下。

LR_IROM 0x00001000 0x0003f000
{
    ;
    ; Specify the Execution Address of the code and the size.
    ;
    ER_IROM 0x00001000 0x0003f000
    {
        *.o (RESET, +First)
        * (InRoot$$Sections, +RO)
    }

    ;
    ; Specify the Execution Address of the data area.
    ;
    RW_IRAM 0x20000000 0x00010000
    {
        ;
        ; Uncomment the following line in order to use IntRegister().
        ;
        ;* (vtable, +First)
        * (+RW, +ZI)
    }
}

3.连接网线,如果是第一次下载应用,会自动去执行bootloader,然后打开LM Flash Programer,当然如果C++够好的话,你也可以自己编写一个。

如果已经下载过,你可以指定一个引脚,这里以LM3S8962开发板为例,指定为PF1的select 按钮,在复位前,先按住这个按钮,松手复位键后会自动去执行bootloader(此时OLED上什么也没有),而不是应用程序。


1.jpg

按图中所示指定开发板的IP地址(不要和网内其它主机冲突并要和PC在同一个子网内)和填入开发板MAC(这个MAC地址必须事先烧写好的固定的MAC地址,而不是随便填一个)。

4.然后切换到Program选项卡,选择要下载的应用,这里你可以选在boot-demo1,boot-demo2,boot-demo-eth,或者其它任何修改过sct文件的例程的bin文件。点击Program即可。

 

[ 本帖最后由 academic 于 2010-11-26 10:34 编辑 ]

回复评论 (26)

回复 楼主 academic 的帖子

在boot_eth的bl_config.h里进行的相关设置。

 #define ENABLE_UPDATE_CHECK

#define FORCED_UPDATE_PERIPH SYSCTL_RCGC2_GPIOF

#define FORCED_UPDATE_PORT GPIO_PORTF_BASE

#define FORCED_UPDATE_PIN 1 //使用Select按钮来把引脚拉低。

#define FORCED_UPDATE_POLARITY 0

#define FORCED_UPDATE_WPU

#define ENET_ENABLE_UPDATE

[ 本帖最后由 academic 于 2010-11-22 13:24 编辑 ]
点赞  2010-11-22 13:23

回复 沙发 academic 的帖子

加油!在电子行业默默贡献自己的力量!:)
点赞  2010-11-22 13:25

顶一下

:P在有JLINK的情况下我看就不用了,毕竟调不了程序

[ 本帖最后由 ddllxxrr 于 2010-11-22 13:28 编辑 ]
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2010-11-22 13:26

回复 沙发 academic 的帖子

当然,我们还可以不使用拉低引脚的方法来通知应用程序把CPU的控制权交给bootloader,就是采用在应用程序中加入swupdate.c模块,这样我们通过不断地去检测是否有这样的一个Magic Packet包到来而决定是否把控制权交给bootloader。这个Magic Packet:AA AA AA AA AA +4次开发板MAC地址。

 

还可以通过

 (*((void (*)(void))(*(unsigned long *)0x2c)))();

也直接去执行在flash开始位置的bootloader,等待升级。

[ 本帖最后由 academic 于 2010-11-24 11:04 编辑 ]
点赞  2010-11-22 13:36

回复 4楼 ddllxxrr 的帖子

请教个问题,bootloader是要被复制到Ram中去执行的,那么怎么使用Stellaris ICDI来单步跟踪Ram中的程序呢?我看好像不太行得通,不知道你试过没有?
点赞  2010-11-22 13:38

bootloader 问题

1.    请问bootloader 怎样通过串口升级程序?因为应用中经常会用到很多板子通过485走总线的方式连接,如果能通过 bootloader  走总线方式,让板子一块一块的自动升级,将是很不错的方案。
2.    还有就是,芯片bootloader 被擦点后,到哪里可以找到 bootloader 代码,以及怎样修改为自己所用芯片的对应代码?

    好久没泡这里了,突然间发现好东西很多,呵呵
点赞  2011-2-24 14:57

可惜

这个帖子沉了。。。:(
点赞  2011-2-26 14:05
,你提到的第一点我个人觉得是一个很好的想法,只是在实际中是否真的需要这样做或者是还有更好的办法,我不知道。
对于Bootloader,我知道的也不太多,主要是经验不丰富啊,呵呵。
如果感兴趣,可先看看下面这个ISP与ISA的区别。
在TI M3中 Bootloader 的做法是这样的,bootloader这段小程序,放在Flash中最开始的位置或者ROM中,在升级的时候呢,通过升级命令,先把这段小程序复制到RAM中,这段程序在RAM中执行,在通过各种通信方式把接收到得fireware烧写到bootloader的后边,完了之后,就复位,这个时候就会去执行新烧写的fireware。
点赞  2011-2-26 18:07

回复 8楼 forestboy 的帖子

顶!
点赞  2011-2-26 18:10
我用LM3S6911用网口下载程序怎么不能用,请帮帮忙
点赞  2011-2-27 15:47

回复 11楼 jiasen 的帖子

具体问题出在哪里呢?是否先把 Boot_eth 先下载进去呢?
点赞  2011-2-27 18:28
你好,我已下载的Boot_eth 程序,通过网口升级也正常,就是升级后程序不运行,请指点
点赞  2011-2-28 10:23

回复 13楼 jiasen 的帖子

你升级的是什么程序呢?
点赞  2011-2-28 12:20

回复 13楼 jiasen 的帖子

应用程序的起始地址没有设对吧,去看下引导程序里面的设置,根据那个设置更改你的应用程序的设置
点赞  2011-2-28 12:35
应用程序的起始地址0x1000
点赞  2011-2-28 17:32

回复 16楼 jiasen 的帖子

程序能下载进去但是不执行,说明bootloader是能正常工作的,只是复位的时候,没有正常跳转到firmware部分,建议试试stellarisware中的例程。
点赞  2011-2-28 21:11

回复 16楼 jiasen 的帖子

不是所有的版本芯片应用程序的起始地址都是0X1000
所以还是去看看引到程序里面的设置最保险

举个例子,假如我没记错的话 C3版本的芯片 默认应该是0x1800
而且这个是可以根据情况修改的,所以还是去确认下
点赞  2011-3-1 08:51

回复 18楼 yytdragon 的帖子

对,是这样的。
点赞  2011-3-1 08:54
这两个地址我都用过,一样不能复位
点赞  2011-3-1 13:59
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复