打印
[Kinetis]

0.037版本 AN2295 Kinetis 串口 Bootloader的问题和解决方法

[复制链接]
898|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
capturesthe|  楼主 | 2016-1-23 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遇见问题:
在下载官网的AN2295后(MCU软件版本是0.037,上位机软件版本为10.0.13),使用过程中发现总是提醒如下图的错误,大致的意思就是协议错误。



问题分析:
基于以上提示,对两个版本的代码做了对比如下图,左边是AN2295老版本0.032的MCU代码,右边是AN2295新版本0.037的MCU代码。可见两版本的在BOOT_CMD_IDENT命令向上位机发送的数据是有区别的,老版本的代码只向上位机发送两个字节的SDID,即SDID的低16位,CRC校验使用的是CRC_AddByte对SDID的低16bit进行了校验,而新版本的代码则是向上位机连续发送了四个字节的SDID,即SDID寄存器的整个32位,CRC检验也是使用CRC_AddLong对SDID的整个32bit进行了校验。



其中,SDID寄存器的定义如下图,它是芯片的类型识别寄存器,记录了芯片的系列(K10、K20或者K60等)、引脚个数、版本。考虑到新版本AN2295和老版本AN2295使用的上位机版本都是同样10.0.13,也就理解为什么会出现错误了。





为印证这一点,打开新版本AN2295代码中上位机visual studio 的工程,找到prog.c文件与MCU通信相关的代码,如下截图,可以看到,其只对SDID的低16bit进行了处理。



解决办法:
1.继续使用官网下载代码的MCU软件部分(0.037版本),但是上位机软件部分使用如下10.0.18的软件(官网下载默认附带的是10.0.13版本)。10.0.18的源文件见附件1,
2.使用老版本的AN2295,其MCU软件版本是0.032,上位机版本为10.0.13,整个工程见附件2。
3. 分别修改0.037版本MCU代码,去匹配10.0.13上位机。这种方式相对来说比较麻烦,不提倡,但是对打算深入理解AN2295的用户,可以尝试。



一点提醒:
除了以上问题,在使用过程中,还发现使用TWR-K60板子上虚拟的串口作为Bootloader更新的接口时,很难建立通讯,使用正常的物理串口正常,具体原因暂未没有深入分析。

相关帖子

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

本版积分规则

22

主题

136

帖子

1

粉丝