[Kinetis]

bootloader CAN 远程升级问题

[复制链接]
楼主: sltian09
手机看帖
扫描二维码
随时随地手机跟帖
sltian09|  楼主 | 2015-11-30 17:01 | 显示全部楼层
sltian09 发表于 2015-11-30 16:51
楼主,
1、我的APP程序的启示地址是0x4000开始;而keil生成的.map文件是现实入口地址是:“Image Entry p ...

楼主在keil下生成的s19文件,通过bootloader CAN BUS 升级,你们试过没有呢?

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-11-30 17:11 | 显示全部楼层
sltian09 发表于 2015-11-30 16:51
楼主,
1、我的APP程序的启示地址是0x4000开始;而keil生成的.map文件是现实入口地址是:“Image Entry p ...

1.你不用关心image entry point, 只要保证本身APP程序不偏移之前就正确,然后偏移之后地址对的就行了。
程序关系的是4004这个地址,对应的是应用程序复位向量的地址。
2.没有bootloader的时候,你不偏移地址,应用程序应该也是能运行的,如果不能运行,说明你的APP程序有问题,我建议你找个本身能用的MDK应用程序,然后偏移地址后测试下。
3,你说的APP程序正常运行是不偏移能在MDK中运行吗?
你现在Bootloader的程序也被你移植为MDK工程,还是直接烧了本身好用的bootloader,只是改APP到MDK有问题?
我现在不确定是否bootloader中也解析了s315文件,所以让你把文件烧录,然后debug测试下解析的数据是否正确,如果不正确,我会帮你找写这个bootloader的AE帮忙修改的。

使用特权

评论回复
sltian09|  楼主 | 2015-11-30 17:24 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-30 17:11
1.你不用关心image entry point, 只要保证本身APP程序不偏移之前就正确,然后偏移之后地址对的就行了。
...

楼主,
1、我的APP 是没有问题的了
#ifdef KEIL  const vector_entry  __vector_table[] __attribute__((at(0x4000))) =  当__((at(0x00))) 时那么APP久从0开始运行,不需要跳转;若果把__((at(0x4000))) 时是需要跳转的,这时候就需要bootloader跳转到我的APP里面来
2、bootloader程序我没有移植到keil里面来,我还是用codewarrior来烧写的;
3、你们codewarrior版本的bootloader程序起始地址就是0x4004;

使用特权

评论回复
sltian09|  楼主 | 2015-11-30 17:26 | 显示全部楼层
本帖最后由 sltian09 于 2015-11-30 17:29 编辑
sltian09 发表于 2015-11-30 17:24
楼主,
1、我的APP 是没有问题的了
#ifdef KEIL  const vector_entry  __vector_table[] __attribute__( ...

楼主,
我的APP程序生成的S19文件格式如下:
S3150000400050080020974100008F7700008F7700004E
S315000040108F7700008F7700008F7700008F77000082
S315000040208F7700008F7700008F7700008F77000072
S315000040308F7700008F7700008F7700008F77000062
...................................................................................
由此看来我的APP程序生成的s19文件是符合0x4000这个地址开始的

通过bootloader升级后程序都不能运行了,怎么debug?

使用特权

评论回复
sltian09|  楼主 | 2015-11-30 17:38 | 显示全部楼层
sltian09 发表于 2015-11-30 17:26
楼主,
我的APP程序生成的S19文件格式如下:
S3150000400050080020974100008F7700008F7700004E

楼主;
请看下面我的分析
1、S1 13 4000 0030002051740000857C0000857C0000 95
    s1开头的地址数据左移8位

2、S3 15 00004000 50080020974100008F7700008F770000 4E
S3开头的文件地址是占用8个字符的,而且数据也比S1开头的文件长,所以刚刚我上面说的左移8位是否正确呢,我觉得应该左移12位吧;

3、srcd_t->data[srcd_t->dtlen++]=(((uint16_t)sdata)<<8)|0x00FF;    //e.g. 0x8a -> 0x8aff 是什么意思?
后面或上0x00ff,表示什么,既然左移不对是不是后面或的数据也不对!?


使用特权

评论回复
FSL_TICS_ZJJ| | 2015-12-1 10:31 | 显示全部楼层
sltian09 发表于 2015-11-30 17:38
楼主;
请看下面我的分析
1、S1 13 4000 0030002051740000857C0000857C0000 95

你好!
1,2.你可以能理解错误了,我刚看了下bootloader 中的函数:SRcdCvt
其实这个函数主要获取s19每行的地址,以及数据。

        line+=2;
      
                          for(srcd_t->addr=0,i=0; i<adrlen; i++,line=line+2) { //get the address
                              sdata=hex2value(line);
                                    srcd_t->addr = (srcd_t->addr<<8) + sdata;
                                    checksum+=sdata;
                          }
这句中的左移8位, 是为了获取整个地址,这里以你提到的s1为例。
S1 13 4000 0030002051740000857C0000857C0000 95
获取地址的意思就是:首先获取0x40,但是实际地址是0x4000,所以需要0x40<<8+0x00.
对于S3也是一样的,s3的地址长度为4,所以需要多左移几次,其实就是一个字节一个字节的累加进来。

3,其实是用于数据长度不是偶数的情况。
s3的数据大小为0x15-(3+1)-1=0x10,所以不会出现oddflag=1的情况,这句可以忽略。
这句的意思就是把最后一个奇数的字节数据刷为0xff,其实这句对你是没有用的。
这样,你把你的应用程序工程发上来,我这边试下。
你自己也可以试下,我说的debug是debug 你的CW CAN bootloader工程,看看接收s19文件时候,s3文件的解析是否正确,而不是烧录了s19文件之后的情况,是过程中测试。

使用特权

评论回复
sltian09|  楼主 | 2015-12-2 00:29 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-12-1 10:31
你好!
1,2.你可以能理解错误了,我刚看了下bootloader 中的函数:SRcdCvt
其实这个函数主要获取s19每行 ...

楼主;
1、附件是基于keaz1284开发板的keil v5 工程,我在.s文件和vectors.c文件均做了修改,详细请看工程文件;
2、keil的系统配置也是从0x4000起始地址开始的,添加了生成.s19的命令,工程可以生成.s19文件;
3、没有bootloader时候,vectors.c的向量地址改为0x00作为起始地址程序正常运行。
请楼主,帮忙调试一下,不胜感激!!

SKEAZ1284xxx4_newlibrary_CAN.rar

2.11 MB

使用特权

评论回复
sltian09|  楼主 | 2015-12-2 15:00 | 显示全部楼层
sltian09 发表于 2015-12-2 00:29
楼主;
1、附件是基于keaz1284开发板的keil v5 工程,我在.s文件和vectors.c文件均做了修改,详细请看工 ...

楼主,
现在怎么样了

使用特权

评论回复
sltian09|  楼主 | 2015-12-4 11:10 | 显示全部楼层
sltian09 发表于 2015-12-2 15:00
楼主,
现在怎么样了

楼主,我这边还是木有成功啊,你哪里怎么样了呢?

使用特权

评论回复
sltian09|  楼主 | 2015-12-9 09:03 | 显示全部楼层
sltian09 发表于 2015-12-4 11:10
楼主,我这边还是木有成功啊,你哪里怎么样了呢?

楼主,在?

使用特权

评论回复
猪猪斌哈哈| | 2015-12-21 15:29 | 显示全部楼层
请问这个程序入口地址的代码具体在什么位置,我找了好几遍都没有找到,谢谢!

使用特权

评论回复
猪猪斌哈哈| | 2015-12-21 15:31 | 显示全部楼层
请问这个程序入口地址修改具体在什么位置,我找了好几遍都没有找到,我的开发环境是CW10.6,谢谢!

使用特权

评论回复
sltian09|  楼主 | 2015-12-23 09:18 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-12-1 10:31
你好!
1,2.你可以能理解错误了,我刚看了下bootloader 中的函数:SRcdCvt
其实这个函数主要获取s19每行 ...

楼主不管了?!

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-12-28 15:38 | 显示全部楼层

不好意思,我这个月被派到其他论坛了。
刚看到你的消息,我会帮你调看看的。
你有没有看你解析之后的s文件是否正确?

使用特权

评论回复
sltian09|  楼主 | 2016-1-4 16:29 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-12-28 15:38
不好意思,我这个月被派到其他论坛了。
刚看到你的消息,我会帮你调看看的。
你有没有看你解析之后的s文 ...

版主,现在是KEIL生成的S19文件不能用于上位机升级,codewarrior生成的S19文件是可以的,你看我的附件就是一个KEIL工程,您可以直接生成S19文件,然后用你的上位机试试看,我这里是不行的,已经更改了好多地方了,依然不行,所以发帖给你。谢谢。

使用特权

评论回复
sltian09|  楼主 | 2016-1-5 09:38 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-12-28 15:38
不好意思,我这个月被派到其他论坛了。
刚看到你的消息,我会帮你调看看的。
你有没有看你解析之后的s文 ...

楼主,现在情况怎样了,你是否调试出我反应的问题了?

使用特权

评论回复
deadpig| | 2016-3-1 13:24 | 显示全部楼层
sltian09 发表于 2016-1-5 09:38
楼主,现在情况怎样了,你是否调试出我反应的问题了?

楼主你好,我最近在研究这个问题,你说你用CW编译的S19文件能成功,可否把Bootloader工程分享给我参考下?你说在官网下的?官网没找到啊。请不吝赐教,非常感谢。我邮箱 642338673@qq.com

使用特权

评论回复
num573| | 2016-3-9 19:41 | 显示全部楼层
楼主,我问一下,我把freescale 给的keaz128的bootloader can例程下进去后,全速运行后,总是卡在vectors.c中的default_isr()函数中,所以我再用can 升级程序的时候,一直没成功。
我感觉是它给的bootloader 程序有问题,楼主能给一个吗?CW工程下的。谢谢。

使用特权

评论回复
num573| | 2016-3-9 19:44 | 显示全部楼层
楼主,我的邮箱是‘chen_renj@163.com’或者“573888316@qq.com”,方便将你成功的CW工程下的bootloader 程序给我发一下吗?我用freescale 给的例程,下进去,全速运行总是卡在同一个地方。

方便的话,可以指导一下你调这个的过程

使用特权

评论回复
num573| | 2016-3-9 19:46 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-24 13:49
你keil中的偏移地址要和你的bootloader跳转后的地址一致,你看看你keil的偏移地址和bootloader的是否匹配? ...

你好,我用freescale 提供的CW下的bootloader 程序下进去,全速运行总是卡在vectors.c中的default_isr()函数,这是什么问题呢?是程序问题吗?还是?

使用特权

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

本版积分规则