2010 年 11 月,飞思卡尔开始提供K60 的样片,2011 年上半年K60 批量上市。MK60N512 VMD100 属于K60 系列的MCU,是Kinetis系列的代表芯片。本书以该芯片为主要蓝本阐述嵌入式开发所必备的硬件设计、软件设计及相关技术。
K60 系列微控制器具有IEEE 1588 以太网,全速和高速USB 2.0 On-The-Go带设备充电探测、硬件加密和防窜改探测能力,具有丰富的模拟、通信、定时和控制外设,从 100 LQFP封装 256 KB闪存开始可扩展到 256 MAPBGA 1 MB闪存。大闪存的K60 系列微控制器还提供可选的单精度浮点单元、NAND闪存控制器和DRAM控制器。
图 2-3 为K60 系列的模块结构框图。
图 2-3 K60 模块结构框图
K60 系列微控制器可选的芯片类型有MK60N256VLQ100、MK60X256VLQ100、MK60N512 VLQ100、MK60N256VMD100、MK60X256VMD100 和MK60N512VMD100。这些芯片的CPU频率与引脚数都一样,但是在封装、Flash容量、程序空间等方面还是有差别的。表 2-3 给出了可选芯片的MCU简要描述,供选型参考之用。
表2-3 K60 可选择的芯片类型
ARM Cortex-M4 为 32 位处理器内核。内部的数据是 32 位的,寄存器是 32 位的,存储器接口也是 32 位的。ARM Cortex-M4 采用哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行进行。这样一来数据访问就不再占用指令总线,从而提升了性能。为实现这一特性,ARM Cortex-M4 内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。
表 2-4 列出了CPU不同频率、不同封装的K60 系列微控制器的存储器大小。
表 2-4 K60 系列存储器大小、封装、频率列表
Flex存储器是飞思卡尔的新一代存储器技术,为需要片上EEPROM、额外程序或数据的开发者提供了多样化的解决方案。Flex存储器和SRAM一样简单快速,当用做高耐久性擦写EEPROM时,在完成程序运行和擦除功能时不需要用户或者系统干预。同时,Flex存储器能提供平行于主程序闪存的额外闪存(FlexNVM)用于数据或者程序存储。Flex存储器使用户能完全配置FlexNVM和FlexRAM模块,从而为应用提供最均衡的存储器资源。用户可配置的参数包括:EEPROM大小、擦写次数、写大小和额外程序/数据闪存的大小。FlexNVM可被用做EEPROM配置的一部分、额外的程序或者数据闪存,也可以一部分用做闪存同时另一部分被用做增强型EEPROM备份。FlexRAM能被用做EEPROM配置的一部分或者额外的系统RAM。
Kinetis系列的MCU内部有32根地址线,可寻址4 GB空间,地址范围为0x0000_0000~0xFFFF_FFFF。K60 系列微控制器的存储器空间地址映像如表 2-5 所示。从学习及应用角度,读者主要了解程序及变量等资源存放情况。
表 2-5 K60 系列的存储器空间地址映像
续表
中断向量表、程序代码及常量的存放于Flash中。K60 的中断向量表、程序代码及常量的存放区域是 0x0000_0000~0x0FFF_FFFF。K60 的程序代码编译链接后,中断向量表将从 0x0000_0000 地址开始存放,程序代码从 0x0000_0410 地址开始存放。存放完代码空间后,常量随其后。
MK60N512VMD100 芯片的实际Flash存储器大小是 512 KB。其地址范围是 0x0000_0000~0x0007_FFFF。中断向量表、程序代码及常量的实际存放地址、存放长度在链接命令文件(.lcf)中。关于链接命令文件(.lcf)的基本内容,参见 3.5.2 节。
全局变量及局部变量存放于RAM中。从表 2-5 中可以看出,K60 系列微控制器的RAM地址空间分为两个部分,第一部分被称为SRAM_L,地址范围是 0x1800_0000~0x1FFF_FFFF,共 128 MB;第二部分被称为SRAM_U,地址范围是 0x2000_0000~0x200F_FFFF,共 1 MB。
MK60N512VMD100 芯片的实际RAM存储器大小是 128 KB,其地址范围是 0x1FFF_0000~0x2000_FFFF。在链接命令文件(.lcf)可以看到RAM空间地址分配情况,参见 3.5.2 节。
K60 芯片初始化时将在Flash区域 0x0000_0000 位置开始的中断向量表复制到RAM的起始位置 0x1FFF_0000 中,长度为 0x410 个字节(包含 16 字节的Flash配置字段)。在此之后,RAM存放用户sdata、data、bss段等数据段,含义见链接命令文件(.lcf)。在这些数据段存放完后紧接着就是堆和栈的地址空间,堆默认大小是 4 KB,栈默认的大小 1 KB,用户可通过链接命令文件(.lcf)自行配置大小。
在链接命令文件(.lcf)中,应该将堆栈指针SP配置在实际RAM存储器的最高地址。进栈时,堆栈指针SP向RAM低地址方向移动。出栈时,堆栈指针SP是向RAM高地址方向移动。堆栈指针SP的最低两位永远是 0,这意味着堆栈总是 4 字节对齐的。