打印
[Kinetis]

bootloader CAN 远程升级问题

[复制链接]
8280|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sltian09|  楼主 | 2015-11-24 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sltian09 于 2015-11-24 09:46 编辑

楼主及各位大神:
目前我keaz1284 mcu bootloader 是通过CAN 升级的,bootloader是FSL官方给的程序,目前我的APP程序在在codewarrior中生成的.s19文件可以实现升级,程序正常运行,那么我的bootloader和APP的地址跳转是没有问题的;但问题来了,由于我们用的是keil开发环境(主要是大家习惯用keil了,突然用codewarrior感觉灰常的慢,加上电脑配置低经常电脑卡死),同样的过程在keil下生成的.s19文件升级后程序不能运行,请看我的步骤如下:
1、keil环境设置:fromelf --m32combined --output=KEAZ1284.s19 .\Objects\SKEAZ128xxx4.axf
2、keil->target内存设置:  0x4800                0x1B800         18M        110M      方法一
                                     0x4000                0x1C000        16M        112M       方法二
                                     0x4004                0x1BFFC     128k-0x4004             方法三
三种设置都试过了,升级完胜后程序不能运行。
SRAM的地址,没有动过:0x1FFFF000         0x4000;
3、Common文件  CPU 文件 Platforms文件一样。
4、#define USE_BOOTLOADER
#ifdef USE_BOOTLOADER
#else
#define CONFIG_1  0xffffffff
#define CONFIG_2  0xffffffff
#define CONFIG_3  0xffffffff
#define CONFIG_4  0xfffeffff
#endif   也是一样的
麻烦问一下楼主,keil环境下哪里出了问题,升级完成后程序不能跑!!

相关帖子

沙发
FSL_TICS_ZJJ| | 2015-11-24 13:49 | 只看该作者
你keil中的偏移地址要和你的bootloader跳转后的地址一致,你看看你keil的偏移地址和bootloader的是否匹配?
生成后,查看下你的s19文件,是否偏移成功了?

使用特权

评论回复
板凳
Roderman_z| | 2015-11-24 13:59 | 只看该作者
没有玩过这个,帮楼主顶了

使用特权

评论回复
地板
sltian09|  楼主 | 2015-11-24 14:05 | 只看该作者
楼主请看我在keil里面的设置:

地址.jpg (158.74 KB )

keil 里面的地址设置

keil 里面的地址设置

keil内存地址设置.png (12.11 KB )

keil内存地址设置.png

使用特权

评论回复
5
sltian09|  楼主 | 2015-11-24 14:21 | 只看该作者
图片是生成.s19文件的地址

生成.s19文件.jpg (139.09 KB )

.s19文件 生成的地址

.s19文件 生成的地址

使用特权

评论回复
6
Tennasi| | 2015-11-24 17:37 | 只看该作者
有好多编译用Python,不知道是什么意思

使用特权

评论回复
7
sltian09|  楼主 | 2015-11-25 10:53 | 只看该作者
木有人解决我的问题了?

使用特权

评论回复
8
FSL_TICS_ZJJ| | 2015-11-25 12:21 | 只看该作者
sltian09 发表于 2015-11-24 14:05
楼主请看我在keil里面的设置:

你应用程序代码中,有没有直接定义地址到前面的地方?
你生成的s19看下,地址是否偏移成功了?

使用特权

评论回复
9
sltian09|  楼主 | 2015-11-25 19:47 | 只看该作者
本帖最后由 sltian09 于 2015-11-25 22:00 编辑

图片就是生成的.s19文件,请楼主提点建议,多谢:
楼主,不吝赐教

1.jpg (234.66 KB )

生成的.s19文件

生成的.s19文件

使用特权

评论回复
10
小猫爱吃鱼| | 2015-11-25 20:23 | 只看该作者
sltian09 发表于 2015-11-25 19:47
图片就是生成的.s19文件,请楼主提点建议,多谢:
楼主,不吝赐教

我现在也正在学习飞思卡尔的USB,也遇到了同样的问题,头大

使用特权

评论回复
11
sltian09|  楼主 | 2015-11-25 22:08 | 只看该作者
本帖最后由 sltian09 于 2015-11-26 10:55 编辑

楼主,
1、这是更改了 “const vector_entry  __vector_table[] __attribute__((at(0x4000)))“ 这个地址之后生成的s19文件格式;
但下载完成后程序依然未能运行,我晕乎乎了,是不是bootloader程序哪里你要更改一下,楼主帮忙分析分析,不胜感激!!

2、还有第一行为什么是 “S31500000400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF8 ” 而按照s19的格式第一行的地址应该是“00000000”吧?
请看如下更改后的s19文件:


11.jpg (338.89 KB )

11

11

使用特权

评论回复
12
FSL_TICS_ZJJ| | 2015-11-26 10:22 | 只看该作者
sltian09 发表于 2015-11-25 22:08
楼主,
1、这是更改了 “const vector_entry  __vector_table[] __attribute__((at(0x4000)))“ 这个地址之 ...

看你这个s19,你的中断向量表还是没有转过去,还是占着400的地址,而对于应用程序来说,需要把所有的数据全部偏移掉,你看看你中断向量表改的位置对不对,是不是改的IAR的地方,另外.s中也看看,是否地址固定了。

使用特权

评论回复
13
sltian09|  楼主 | 2015-11-26 11:01 | 只看该作者
楼主,
1、您说的.S文件我已经修改了,请看下面的截图
2、下图中还有两个s19文件一个是起始地址从0x4000开始的;一个是从0x40C0开始的,
两个文件地址应该跳转对了吧,还有就是我的APP地址究竟从0x4000开始还是从0x40C0开始呢?
3、是不是bootloader程序调转地址也要修改呢?
请楼主帮忙分析一下,谢谢!

.S文件.png (34.14 KB )

.S文件.png

0X40C0.jpg (412.34 KB )

0X40C0.jpg

0X4000.jpg (403.36 KB )

0X4000.jpg

使用特权

评论回复
14
FSL_TICS_ZJJ| | 2015-11-26 12:25 | 只看该作者
sltian09 发表于 2015-11-26 11:01
楼主,
1、您说的.S文件我已经修改了,请看下面的截图
2、下图中还有两个s19文件一个是起始地址从0x4000开 ...

APP跳转的地址倒是无所谓,只要flash放得下你的app,关键就是你的bootloader的跳转地址要和你APP的地址一致。现在看你的s19文件地址已经转过来了,你检查下你的bootloader跳转地址是多少?

使用特权

评论回复
15
sltian09|  楼主 | 2015-11-26 20:42 | 只看该作者
本帖最后由 sltian09 于 2015-11-26 20:54 编辑

楼主,您好:
1、我用的是keil的开发环境;
2、bootloader偏移量是你们给的程序的偏移量:   
      uint32_t *pNewAppEntry;
     pNewAppEntry = (uint32_t *)0x00004004; 最后程序就是跳转到这个地址,
     根据你们提供的文档介绍“(RELOCATION_VERTOR_ADDR), so the boot vector should beRELOCATION_VERTOR_ADDR plus 0x0004.
     这样设置有没有问题,因为我的APP是在keil下完成的S19文件;
3、从keil生成的.map来看,我的Image Entry point : 0x00004181 是这个地址,而我把入口地址改成:
     pJumpTo = (uint32_t *)0x00004181;
     pJumpTo();
    依旧不能实现跳转!!!!
    请看keil环境下.map文件的截图:
4、在解析S19文件发现,codewarrior生成的有用文件是S1开头的,而keil生成的文件是S3开头的,问题是你们的bootloader demo 程序是不是只能解析S1开头的文件呢,
那么S3开头的文件解析需要修改那些呢,因为我也修改了一些地方调试验证了,未能实现。请看下面文件对比:

5、bootloader中的这两句是什么意思:

srcd_t->addr = (srcd_t->addr<<8) + sdata;  //  左移8位是什么意思?

srcd_t->data[srcd_t->dtlen++]=(((uint16_t)sdata)<<8)|0x00FF;    //e.g. 0x8a -> 0x8aff 是什么意思?

S01300004B45413132385F4150505F312E6865783D
S11340000030002051740000857C0000857C000095
S1134010857C0000857C0000857C0000857C000098
S1134020857C0000857C0000857C0000857C000088
S1134030857C0000857C0000857C0000857C000078

S31500004000 50080020974100008F7700008F7700004E
S315000040108F7700008F7700008F7700008F77000082
S315000040208F7700008F7700008F7700008F77000072
S315000040308F7700008F7700008F7700008F77000062
S315000040408F7700008F7700008F7700008F77000052
请楼主,帮忙分析分析!谢谢!






使用特权

评论回复
16
sltian09|  楼主 | 2015-11-30 15:05 | 只看该作者
没有人解答了?!

使用特权

评论回复
17
FSL_TICS_ZJJ| | 2015-11-30 15:34 | 只看该作者
sltian09 发表于 2015-11-30 15:05
没有人解答了?!

刚看到你的更新,待会回复你。
下次你可以直接给我回复,这样我会收到提醒,否则帖子多了很容易被覆盖掉。

使用特权

评论回复
18
sltian09|  楼主 | 2015-11-30 16:04 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-11-30 15:34
刚看到你的更新,待会回复你。
下次你可以直接给我回复,这样我会收到提醒,否则帖子多了很容易被覆盖掉 ...

好的,还是楼主给力啊!!
这个bootloader拖太久了,压力很大啊!!

使用特权

评论回复
19
FSL_TICS_ZJJ| | 2015-11-30 16:35 | 只看该作者
sltian09 发表于 2015-11-26 20:42
楼主,您好:
1、我用的是keil的开发环境;
2、bootloader偏移量是你们给的程序的偏移量:   

楼主你好!没看到你的截图。
应用程序的偏移地址需要偏移到0X4000, 而不是0X4004.0X4004是复位向量地址。
但是首先,我需要确定一些问题:
1.你应用程序没编译之前,这个应用程序是否能够正确工作?
2.S3解析的问题,建议你debug测试下,看看接收到S3之后,解析出来是否正确。
3.左移8位是为了给flash编程相关寄存器写入地址以及数据,具体你可以看看参考手册的flash编程涉及到的寄存器命令控制。


使用特权

评论回复
20
sltian09|  楼主 | 2015-11-30 16:51 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-11-30 16:35
楼主你好!没看到你的截图。
应用程序的偏移地址需要偏移到0X4000, 而不是0X4004.0X4004是复位向量地址。 ...

楼主,
1、我的APP程序的启示地址是0x4000开始;而keil生成的.map文件是现实入口地址是:“Image Entry point : 0x00004181”
2、没有bootloader的情况下APP程序是不能运行的;
3、APP程序是正常运行的。
我的问题是,codewarrior生成的.s19文件是S113开头的,而keil生成.s19的文件是S315开头的;你们的bootloader怎么修改或者说不用修改?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

70

帖子

3

粉丝