bootloader CAN 远程升级问题
本帖最后由 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_10xffffffff
#define CONFIG_20xffffffff
#define CONFIG_30xffffffff
#define CONFIG_40xfffeffff
#endif 也是一样的
麻烦问一下楼主,keil环境下哪里出了问题,升级完成后程序不能跑!!
你keil中的偏移地址要和你的bootloader跳转后的地址一致,你看看你keil的偏移地址和bootloader的是否匹配?
生成后,查看下你的s19文件,是否偏移成功了? 没有玩过这个,帮楼主顶了 楼主请看我在keil里面的设置:
图片是生成.s19文件的地址
有好多编译用Python,不知道是什么意思 木有人解决我的问题了? sltian09 发表于 2015-11-24 14:05
楼主请看我在keil里面的设置:
你应用程序代码中,有没有直接定义地址到前面的地方?
你生成的s19看下,地址是否偏移成功了?
本帖最后由 sltian09 于 2015-11-25 22:00 编辑
图片就是生成的.s19文件,请楼主提点建议,多谢:
楼主,不吝赐教
sltian09 发表于 2015-11-25 19:47
图片就是生成的.s19文件,请楼主提点建议,多谢:
楼主,不吝赐教
我现在也正在学习飞思卡尔的USB,也遇到了同样的问题,头大 本帖最后由 sltian09 于 2015-11-26 10:55 编辑
楼主,
1、这是更改了 “const vector_entry__vector_table[] __attribute__((at(0x4000)))“ 这个地址之后生成的s19文件格式;
但下载完成后程序依然未能运行,我晕乎乎了,是不是bootloader程序哪里你要更改一下,楼主帮忙分析分析,不胜感激!!
2、还有第一行为什么是 “S31500000400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF8 ” 而按照s19的格式第一行的地址应该是“00000000”吧?
请看如下更改后的s19文件:
sltian09 发表于 2015-11-25 22:08
楼主,
1、这是更改了 “const vector_entry__vector_table[] __attribute__((at(0x4000)))“ 这个地址之 ...
看你这个s19,你的中断向量表还是没有转过去,还是占着400的地址,而对于应用程序来说,需要把所有的数据全部偏移掉,你看看你中断向量表改的位置对不对,是不是改的IAR的地方,另外.s中也看看,是否地址固定了。
楼主,
1、您说的.S文件我已经修改了,请看下面的截图
2、下图中还有两个s19文件一个是起始地址从0x4000开始的;一个是从0x40C0开始的,
两个文件地址应该跳转对了吧,还有就是我的APP地址究竟从0x4000开始还是从0x40C0开始呢?
3、是不是bootloader程序调转地址也要修改呢?
请楼主帮忙分析一下,谢谢!
sltian09 发表于 2015-11-26 11:01
楼主,
1、您说的.S文件我已经修改了,请看下面的截图
2、下图中还有两个s19文件一个是起始地址从0x4000开 ...
APP跳转的地址倒是无所谓,只要flash放得下你的app,关键就是你的bootloader的跳转地址要和你APP的地址一致。现在看你的s19文件地址已经转过来了,你检查下你的bootloader跳转地址是多少? 本帖最后由 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=(((uint16_t)sdata)<<8)|0x00FF; //e.g. 0x8a -> 0x8aff 是什么意思?
S01300004B45413132385F4150505F312E6865783D
S11340000030002051740000857C0000857C000095
S1134010857C0000857C0000857C0000857C000098
S1134020857C0000857C0000857C0000857C000088
S1134030857C0000857C0000857C0000857C000078
S31500004000 50080020974100008F7700008F7700004E
S315000040108F7700008F7700008F7700008F77000082
S315000040208F7700008F7700008F7700008F77000072
S315000040308F7700008F7700008F7700008F77000062
S315000040408F7700008F7700008F7700008F77000052
请楼主,帮忙分析分析!谢谢!
没有人解答了?! sltian09 发表于 2015-11-30 15:05
没有人解答了?!
刚看到你的更新,待会回复你。
下次你可以直接给我回复,这样我会收到提醒,否则帖子多了很容易被覆盖掉。 FSL_TICS_ZJJ 发表于 2015-11-30 15:34
刚看到你的更新,待会回复你。
下次你可以直接给我回复,这样我会收到提醒,否则帖子多了很容易被覆盖掉 ...
好的,还是楼主给力啊!!
这个bootloader拖太久了,压力很大啊!! sltian09 发表于 2015-11-26 20:42
楼主,您好:
1、我用的是keil的开发环境;
2、bootloader偏移量是你们给的程序的偏移量:
楼主你好!没看到你的截图。
应用程序的偏移地址需要偏移到0X4000, 而不是0X4004.0X4004是复位向量地址。
但是首先,我需要确定一些问题:
1.你应用程序没编译之前,这个应用程序是否能够正确工作?
2.S3解析的问题,建议你debug测试下,看看接收到S3之后,解析出来是否正确。
3.左移8位是为了给flash编程相关寄存器写入地址以及数据,具体你可以看看参考手册的flash编程涉及到的寄存器命令控制。
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怎么修改或者说不用修改?