打印
[Kinetis]

【Kinetis分享】+个人的飞思卡尔Kinetis的奋斗之路

[复制链接]
楼主: 偏爱番茄酱
手机看帖
扫描二维码
随时随地手机跟帖
61
偏爱番茄酱|  楼主 | 2014-12-13 21:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
下面传一些K60的学习资料

Cortex-M4自学笔记-基于Kinetis K60.pdf

361.49 KB

使用特权

评论回复
62
偏爱番茄酱|  楼主 | 2014-12-13 21:43 | 只看该作者



K60 使用CM4内核的NVIC中断优先级洗系统。每个中断都可以配置自己的优先级
但是NVIC本身又比较复杂。首先要将优先级分组(整个芯片的优先级系统分组),可以分成4组
#define NVIC_PriorityGroup_0         ((uint32_t)0x7) /*!< 0 bits for pre-emption priority   4 bits for subpriority */                                               
#define NVIC_PriorityGroup_1         ((uint32_t)0x6) /*!< 1 bits for pre-emption priority   3 bits for subpriority */                                                  
#define NVIC_PriorityGroup_2         ((uint32_t)0x5) /*!< 2 bits for pre-emption priority   2 bits for subpriority */                                                   
#define NVIC_PriorityGroup_3         ((uint32_t)0x4) /*!< 3 bits for pre-emption priority   1 bits for subpriority */                                                   
#define NVIC_PriorityGroup_4         ((uint32_t)0x3) /*!< 4 bits for pre-emption priority   0 bits for subpriority */
复制代码
首先解释2个名词:
pre-emption priority  将占优先级: 比子优先级高端。。 也就是说,抢占优先级高的(0比1高,越小越高) 可以打断正在执行的低抢占优先级中断。


subpriority   子优先级。   只有2个中断具有相同的抢占优先级的情况下,才有意义。这种情况下,同时2个中断发生时,子优先级高的先发生。

说白了就是,我抢占优先级高的,我就是霸权~  比我抢占优先级低的,你们子优先级是多少也没用。我一律最优先。但是和我同属一个抢占优先级的中断我就搞不定了,那就看我们谁子优先级高谁先发生吧。。。

例子:
    printf("NVIC Test\r\n");
    uint32_t PreemptPriority, SubPriority;
    NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2);
    printf("SystemPrioirityGroup:%d\r\n", NVIC_GetPriorityGrouping());
   
    NVIC_SetPriority(PORTA_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 2, 1));

   
    NVIC_SetPriority(PORTB_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 2, 2));
复制代码
首先将系统NVIC分组设置为2. 即有2位抢占,2位子优先级。这“2位”的意思就是 2个二进制数,可以代表 0,1,2,3 对吧? 所以抢占可以配成0,1,2,3四个等级,子优先也可以配成0,1,2,3  四个等级。
NVIC_SetPriority(PORTA_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 2, 1));
复制代码
这句啥意思呢, NVIC_SetPriority 和 NVIC_EncodePriority 都是ARM系统库函数,EncodePrioirity 需要3个参数,原型如下
uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
复制代码
第一个参数,中断分组,直接用NVIC_GetPriorityGrouping() 获得即可,其实就是2.
PreemptPriority,SubPriority 我就不用说了吧, 他们每个的取值范围都是0-3  这里 PreemptPriority = 2;   SubPriority = 1;


使用特权

评论回复
63
zhous123| | 2014-12-14 11:37 | 只看该作者
楼主要不要这么叼?

使用特权

评论回复
64
偏爱番茄酱|  楼主 | 2014-12-20 19:32 | 只看该作者
今天就最后一次更新了,

使用特权

评论回复
65
偏爱番茄酱|  楼主 | 2014-12-20 19:35 | 只看该作者
今天就聊一下关于飞思卡尔kinetis单片机解锁的那些事儿

使用特权

评论回复
66
偏爱番茄酱|  楼主 | 2014-12-20 19:36 | 只看该作者
这次我干脆把网上的解决方法过滤一下,在此列出比较靠谱的几种解决办法(当然如果你想知其所以然的话可以查看Kinetis官方Reference Manual的Security那一章),方便大家查阅。

使用特权

评论回复
67
偏爱番茄酱|  楼主 | 2014-12-20 19:41 | 只看该作者
首先说说造成芯片被锁的原因(这是我解决问题的原则,凡事总想知道为什么,咳咳,有点刨根问底的倔),我把它归为以下几种:

1)电源不稳造成芯片被锁,这是芯片的一种自我保护机制,这个无可厚非,跟硬件环境有关;
2)调试过程中的不规范行为,初学者最常犯的错误就是带电插拔调试器,这是一个陋习,其实很多情况下的芯片被锁都是这个原因造成的。我按照规范模式调试了两年Kinetis,貌似只锁过两次,而且都顺利解锁了;
3)焊接Kinetis的时候电烙铁的温度过高造成芯片内部损坏,这种情况下的死锁一般很难再解开了,建议焊接过程中将温度保持在300度左右,一定不能超过400度;
4)人为的给芯片上锁,这个对量产后的产品是必须的,Kinetis提供了相当可靠地知识产权保护机制;
5)调试器与目标芯片连线过长,造成时序不同步或者不稳定,引起误擦写了芯片内部security的内存部分(0x400~0x40F),从而锁住了芯片;

   说完了被锁,下面该说说怎么解锁了,其实解锁的原理很简单,芯片被锁之后是不允许调试器再对其内部的flash进行读写了,但是Kinetis给我们还是留了条出路的(不然可就没救了,所以说万事还真得给自己留条后路,哈哈),在芯片被锁之后它是可以通过调试器对flash进行“mass erase”的,即整片擦写,擦写之后就可以还原其初始状态再继续读写了,不过如果芯片被锁到最高级别,即“mass erase”都禁能了,那就基本没救了,不过这种情况很少。下面罗列一下目前较为行之有效的解锁方法。
   目前最常用的是Jlink解锁方式,其实现在支持“mass erase”较好的主要有两种调试器,一个是Jlink,另一个是pgo的USBDM,这两个调试器都提供相对来说比较简单易用的整片擦写能力:

1)Jlink解锁方式有三种,其中一种最为简单,连接好硬件平台,然后打开J-Link Commander,在cmd环境下输入unlock kinetis即可,不过这种方式只适用于简单芯片被锁的情况下,如果芯片被锁级别较高,这种方法可能效果不大,但是由于这种方法简单,建议可以先试试;
2)打开Jlink自带的J-flash ARM解锁,其自带的Erase Flash选项
3)USBDM解锁,现在市面上较为流行的调试器(淘宝上大多数版本的Kinetis调试器都是基于USBDM的,剩下的是基于OSBDM的),这得归功于pgo大神的开源精神,硬件简单、固件代码开源且功能强悍,不火才怪呢,呵呵,不过可惜的是目前只支持Codewarrior,以后如果再能扩展到IAR、Keil等IDE那就火大了。USBDM的解锁方式也比较简单,安装好USBDM的软件套件之后,连接好硬件平台,打开USBDM自带的ARM Programmer上位机编程软件,然后再“Target”选项卡中随便选择好一个编译连接好的s19文件,然后再“Detect Chip”一下,最后在“Security”和“Device Oprations”中选择如下图所示,最后点击load and go即可解锁;

解锁.jpg (80.97 KB )

解锁.jpg

使用特权

评论回复
68
偏爱番茄酱|  楼主 | 2014-12-20 19:42 | 只看该作者
4)此外也可以通过一些开发环境解锁,有兴趣的可以自己探索一下。

使用特权

评论回复
69
偏爱番茄酱|  楼主 | 2014-12-20 19:42 | 只看该作者
Kinetis MCU 使用注意事项
Kinetis 系列 MCU 是 FSL 的最新的 MCU,在设计上由于追求了超低电压工
作环境,严谨的保密机制以及合理的观察等理念,因此在使用 Kinetis 系列 MCU
进行产品设计时要注意以下几点.
1,Kinetis 的复位 PIN 在任何复位后都会输出一段时间的低电平,这个信号可以
用来确认 MCU 是否复位.因此,如果想对 MCU 外接复位芯片,须提供 Open
Drain 模式的复位信号.在使用某些廉价工具时,尽量尝试使用不连接 Reset Pin
的方式.
2,由于 Kinetis 系列 MCU 可以设置将 MCU 完全锁死的模式,所以必须保证
调试接口工作稳定,以防止执行意外误操作而将 MCU 完全锁死.因此,设计
上需要使仿真接口的连接线尽量短.在仿真接口的连接线必需比较长的情形下,
在通讯线上加上 1-5 pf 的下拉电容.如果条件允许的话,可以用低容值的探头
测试一下调试接口的通讯波型.
3,同样由于 Kinetis 系列 MCU 可以设置将 MCU 完全锁死的模式的原因,请
务必对存放配置字的那块 Flash 设置合理的保护模式.
4,对于自制烧写器,在执行 Flash 操作的时,可以考虑增加命令回读的方法来
确保写数据无误.

使用特权

评论回复
70
偏爱番茄酱|  楼主 | 2014-12-20 19:49 | 只看该作者
感谢21ic能够提供这么大的舞台和机会来相互学习彼此的飞思卡尔kinetis开发经验,这将是自己飞思卡尔学习之路的一个美丽的节点

large_9OI7_0ca200005e18118e.jpg (87.33 KB )

large_9OI7_0ca200005e18118e.jpg

使用特权

评论回复
71
nora_fang1314| | 2015-10-13 15:30 | 只看该作者
楼主好牛,mark

使用特权

评论回复
72
大龙哥| | 2015-11-18 21:07 | 只看该作者
https://bbs.21ic.com/icview-793590-1-1.html
楼主,看了还是不知道这个具体是什么开发板呀!tb有么?

使用特权

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

本版积分规则