打印
[Kinetis]

AN2295SW例程的对MCU型号不识别的问题

[复制链接]
1641|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adamdo001|  楼主 | 2015-5-11 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCU, AN, TI, sd, NET
我在AN2295SW例程的IAR工程基础上修改,打算做MK20DX256VLL7的bootloader工程。
我的目标板上使用8MHz外部晶体,把115200波特率调试输出正确后,连接目标板,运行AN2295SW\masters\release\win_hc08sprg.exe,
出现
Waiting for HC(S)08 reset ACK (timeout: 10s)...received 0xfc (good).
Calibration break pulse sent. Count: 3
Can't read MCU info. Could be protocol error.
(Or forgot to set single wire mode?)

在IAR工程里插入断点,观察SDID为0x2098,其中REVID=0x2,FAMID=0x1,PINID=0x8;
查阅文档K22P100M120SF5RM.pdf发现这三个值是正常的。


下面问题出来了:
在AN2295SW\masters\common_sources\prog.c(这里的prog.c是win_hc08sprg.exe的源码文件之一)发现
t_sdid sdidprops[]=
{
...
        {0x1D0,        BL_KINETIS,                "Kinetis K70",                                                -1                        ,-1},
        {0x140,        BL_KINETIS,                "Kinetis K60",                                                -1                        ,-1},
        {0x130,        BL_KINETIS,                "Kinetis K40",                                                -1                        ,-1},
        {0x120,        BL_KINETIS,                "Kinetis K30",                                                -1                        ,-1},
        {0x110,        BL_KINETIS,                "Kinetis K20",                                                -1                        ,-1},
        {0x100,        BL_KINETIS,                "Kinetis K10",                                                -1                        ,-1},
        {0x0480,BL_KINETIS,                "Kinetis KLxx",                                                -1                        ,-1},
        {SDID_UNDEF,BL_UNKNOWN,        "unknown derivative",                                -1                        ,-1}                // last entry

do not remove
};

在下面有
int sdid2index(short sdid)
{
        int i=0;

        if (bl_version == BL_KINETIS)
                sdid &= 0x0ff0;  // remove the lower 4 bits that has information about package & 4 bits about the revision Id

        do
        {
                if(sdidprops.sdid == sdid)
                        return i;
        } while(sdidprops[++i].sdid != SDID_UNDEF);

        return i;
}

也就是说win_hc08sprg.exe把读到的sdid与上0x0ff0,去掉版本ID号。
用0x2098 & 0x0ff0 = 0x0090,而不是t_sdid sdidprops[]里K20对应的0x110。

请各位高手看看这是怎么回事?

相关帖子

沙发
adamdo001|  楼主 | 2015-5-11 16:12 | 只看该作者
由于来不及安装Visial Stdio,所以只从代码上查了一下。

使用特权

评论回复
板凳
FSL_TICS_Jeremy| | 2015-5-12 09:16 | 只看该作者
adamdo001 发表于 2015-5-11 16:12
由于来不及安装Visial Stdio,所以只从代码上查了一下。

首先,我想说的是很多时候是bootloader代码的原因导致链接不起来,你可以参考此经验分享检查一下自己的修改是否正确。
https://bbs.21ic.com/icview-798996-1-1.html

使用特权

评论回复
地板
lovecat2015| | 2015-5-12 13:50 | 只看该作者
我也看看我自己的代码,是不是也是配置的不正确

使用特权

评论回复
5
FSL_TICS_Jeremy| | 2015-6-3 08:42 | 只看该作者
非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.

使用特权

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

本版积分规则

12

主题

91

帖子

0

粉丝