[Kinetis]

Kinetis 内部培训资料---Flash memory 模块

[复制链接]
16891|218
手机看帖
扫描二维码
随时随地手机跟帖
FSL_TICS_ZJJ|  楼主 | 2014-7-15 13:56 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-7-15 14:02 编辑

FLASH memory 模块篇
一,Kinetis flash模块特性与配置
1.jpg
2.jpg
    首先给大家介绍下FlexMemory,顾名思义,就是应用很灵活的存储器,这个灵活指的是结构和用途的灵活,支持FlexMemory的设备,除了从0x00000000起始的PFlash用于存放代码外,还提供了一块用作存放代码或数据的DFLASH, 并且这个DFLASH还能拿出一部分或全部的空间配合FlexRAM组成EEPROM。从而无需外部外部额外添加EEPROM,节省了成本,并且性能卓越,可擦写次数可达10M以上。
3.jpg
从上图可以看到,FlexMemoryFlexNVMFlexRAM和内置的固件firmware组成,firmware的作用是提供文件系统的管理功能,把flexNVMFlexRAM组合起来,仿真成EEPROM,可支持字节的读写擦等操作,并且支持代码在PFLASH里执行的时候同时访问EEPROM。而且FlexNVMFlexRAM也可单独使用,FlexNVM可以用来存放代码或数据,用来存放代码时请注意这块空间和通常存放代码的PFLAH在地址上是不连续的,所以不能把一个函数分开存放在PFLASHFlexNVM中。FlexRAM单独使用的时候可以作为系统RAM的一部分,或者在执行Flash Section Program命令时用作bufferFlexNVM可以在组成EEPROM的时候把一部分用作flash,但FlexRAM不能这么做,作为EEEPROM的时候就不能当RAM用了。
4.jpg
inetisflash一般有两种配置,一种是只有PFLash, 如上图,这种类型的flash能提供一种SWAP的功能,这种功能主要用在bootloader中,即bootloaderArray 0空间里,通过UART等通讯端口接收二进制文件并烧录到Array 1空间里,在完成后执行SWAP命令,就能在系统复位后直接运行应用程序,当需要更新代码时,可以让应用程序再执行一次SWAP,在系统复位后就直接运行bootloader了。要注意的是,每个Array里都要包括中断向量表等信息。
5.jpg
上图就是PFLASH only的示意图,可以看到Flash控制器的接口是64位的,和两块并联的32Flash之间无缝连接。
6.jpg
上图是支持FlexNVM的示意图,和PFLASH only的很相似,除了PFLASHFlexNVM之间地址不连续外,基本没什么区别。当然这里面SWAP就不支持了。



相关帖子

FSL_TICS_ZJJ|  楼主 | 2014-7-15 13:57 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-7-15 14:03 编辑

二, 安全与保护
7.jpg
8.jpg
Kinetissecure级别有三级,级别最高是只能通过backdoor的方式进行解锁,即必须通过用户的应用程序才能解锁,所以如果程序里面没有加入backdoor解锁的功能,慎用secure
9.jpg
那么如何进行解锁呢?这里提供了三种方法,backdoor key, 你可以理解为密码解锁,Debug access,通过JTAG/cJTAG/SWD接口解锁,或者通过EzPort进行全擦除操作来解锁,这里面backdoor解锁的权限最高,其它的两种都有一定的限制。
10.jpg
Kinetis还提供了三个寄存器对存储空间进行保护,分别对应PFLASH,DFLASH和EEPROM这三种类型的存储器。这里要注意的是DFLASH在使能EEPROM的情况下会被占用一部分空间,如果剩下空间的大小是2的N次方,那么就是对剩下空间8等分,由DPROT【7:0】进行保护,而对于非2的N次方的情况,像192KB和224KB,就是以32KB对剩下空间进行分区,这时候就不一定是8个分区,可能是6或者7个,那么只有DPROT【5:0】或DPROT【6:0】会起作用
11.jpg
这些保护信息会在复位的时候自动从Flash Configuration Field里加载到上述的三个寄存器里,所以客户需要预先定义好这几个数值,当然也可以动态修改这几个寄存器对相关分区进行临时的保护。
12.jpg
但是解除保护不能动态的进行,你只能通过flash编程来修改保护信息并将系统复位使之生效。当然如果你把存放保护信息的空间也保护起来的话,只能通过mass erase来取消保护了。

使用特权

评论回复
FSL_TICS_ZJJ|  楼主 | 2014-7-15 13:58 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-7-15 14:03 编辑

三, flash 配置域(flash configuration field
13.jpg
14.jpg
Flash中存放了一块16字节的配置信息,分布在0x4000x410的空间里,一般就在中断向量表的后面,在设备复位时,这部分的内容就会被加载到一些寄存器中,作为flash的默认配置。这些配置信息主要包含了:
PFLASHDFLASHEEPROM的写保护信息;
FLASH加密;
Backdoor Key
Flash Option信息
为了防止不必要的加密导致程序debug的问题,建议把0x400-0x410的内容设置为0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFE
15.jpg
上图就是Flash Option信息的详细内容,可以设置复位后是否使能EzPort,是否进入低功耗模式。在最新的版本里,还在bit2加入了了禁用NMI中断引脚的功能,更有效的防止外部干扰对NMI引脚的影响。

使用特权

评论回复
FSL_TICS_ZJJ|  楼主 | 2014-7-15 13:59 | 显示全部楼层
四, Flash 内存控制器
16.jpg 16
这里的Flash Memory Controller主要担当系统和flash存储器之间的接口。而且从前面的示意图可以看到,它到flash存储器的总线宽度是64位的,那么在连续读取数据时,第二个数据总是无需等待时间的。它还允许用户控制缓存的使用,这里一共提供下列几种缓存:
16_1.jpg 16_1
每个flash bank都有一个对应的控制寄存器来设置上述缓存的使用,但是系统复位后的默认设置已经能适用绝大多数情况了,所以如果不是应用有很特殊的要求的话,无需对它进行设置。

使用特权

评论回复
FSL_TICS_ZJJ|  楼主 | 2014-7-15 13:59 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-7-15 14:01 编辑

五, Flash 编程
17.jpg 17
18.jpg 18
Kinetis提供了多种方式对Flash进行编程和DebugJTAG类的接口是最通用的接口,不仅能进行编程,还能调试程序,而EzPortbootloader等软件只能下砸应用代码,不能debug

使用特权

评论回复
ar_m_cu| | 2014-7-15 14:00 | 显示全部楼层
好贴,顶一个

使用特权

评论回复
FSL_TICS_ZJJ|  楼主 | 2014-7-15 14:00 | 显示全部楼层
六, Flash memory lab/demo
19.jpg 19
20.jpg 20
EPROMFlexNVMFlexRAM组合而成,要组合成EEPROM,首先要进行一次分区操作,这是为了告诉系统EEPROM要多大的空间(即FlexRAM的大小以及A区和B区的比例),以及多少FlexNVM用来对这个EEPROM进行备份。这里要注意的是FlexNVM分配的空间是平均地从两个block里划分的,而FlexRAM的分区比例却是可选的,1/81/41/2。这个例子里用的是1/2
分区后就可以直接去这块空间进行操作了,无需额外的设置。具体操作如下:

20_1.jpg 20_1
21.jpg 21
KineitisRM里提供了一个计算公式来计算EEPROM的擦写次数,上图是根据这个样例的配置得到的结果,需要注意的是一块芯片最好只对EEPROM分区一次,如果多次分区,那上述公式就不适用了。
而且在这个样例中,A区和B区是大小相等的两个区,如果采用1/81/4的比例分区,A区的寿命更长,因为A区比B区小,而每个区的backup FlexNVM又是相等的,所以建议在使用中,更新频繁的数据存放在A区,一般的存放在B区,几乎不更新的数据放在DFLASHPFLASH里。


使用特权

评论回复
FSL_TICS_ZJJ|  楼主 | 2014-7-15 14:21 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-7-15 15:57 编辑

为了便于大家收藏,这里给出文档:
游客,如果您要查看本帖隐藏内容请回复

使用特权

评论回复
xinyinxing| | 2014-7-16 17:44 | 显示全部楼层
很好的资料,感谢分享!

使用特权

评论回复
caijun_2012| | 2014-7-21 08:49 | 显示全部楼层
:)

使用特权

评论回复
ictry_51| | 2014-7-28 15:25 | 显示全部楼层
支持

使用特权

评论回复
fyzhuhui| | 2014-8-1 22:22 | 显示全部楼层
MCG模块输出时钟可以用作系统时钟;

使用特权

评论回复
lxygl| | 2014-8-3 08:02 | 显示全部楼层
谢谢

使用特权

评论回复
hanqian3956| | 2014-8-7 23:04 | 显示全部楼层
期待看到文档

使用特权

评论回复
keenboyee| | 2014-8-16 17:09 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶

使用特权

评论回复
茫茫大士| | 2014-8-17 22:14 | 显示全部楼层
感谢楼主

使用特权

评论回复
TimHan| | 2014-8-22 15:46 | 显示全部楼层
好的培训,也是一种技术支持。

使用特权

评论回复
coslight| | 2014-8-29 13:04 | 显示全部楼层
必须学习的内容,收藏

使用特权

评论回复
csest| | 2014-9-2 13:09 | 显示全部楼层
梵蒂冈地方环境和法国

使用特权

评论回复
xdzz9| | 2014-9-9 14:21 | 显示全部楼层
新手报到,顶一下.

使用特权

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

本版积分规则

165

主题

5069

帖子

88

粉丝