赞
踩
本文首先介绍ARM公司及ARM架构发展史,NXP公司的I.MX6ULL内部的硬件资源、架构等、最后是对这一段时间学习I.MX6ULL裸机开发的感想。
英国ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件,ARM公司通过出售芯片技术授权,建立起新型的微处理器设计、生产和销售商业模式。ARM 的商业模式主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务,ARM已成为全球性RISC标准的缔造者。
图 1 ARM公司内核架构分类、各架构基本用途
图 2 ARM架构发展史
I.MX6ULL是NXP基于ARM Cortex-A7架构的单核处理器家族,主频可以高900MHz。I.MX6ULL是一个高功效、高性价比应用处的理器系列,运行速度高达528 MHz。I.MX6ULL应用处理器包括一个集成的电源管理模块,降低了外接电源的复杂性,并简化了上电时序。这个系列的每个处理器提供多种存储器接口,其中包括16位LPDDR2、DDR3、DDR3L、原始和管理的NAND闪存、NOR闪存、eMMC、Quad SPI和各种其他接口,用于连接外围设备,如WLAN、Bluetooth®、GPS、显示器和摄像头传感器。
表 1 I.MX6ULL特点
CPU复合器件 | Cortex-A7内核,运行频率900 MHz,128 KB L2缓存 |
显示 | 并行LCD显示,分辨率高达WXGA (1366x768) 8/10/16/24位并行摄像头传感器接口 电泳显示屏控制器支持直接驱动E-Ink EPD面板,分辨率高达2048x1536,工作频率106 Hz |
存储器 | 16位LP-DDR2, DDR3/DDR3L 8/16位并行NOR FLASH / PSRAM 双通道Quad-SPI NOR FLASH 8位原始NAND FLASH与40位ECC |
数据连接 | 2个MMC 4.5/SD 3.0/SDIO端口 2个USB 2.0 OTG,HS/FS,器件或主机,带PHY接口 音频接口包括3个I2S/SAI, S/PDIF Tx/Rx 2个10/100以太网,支持IEEE 1588协议 2个12位ADC,高达10个输入通道,以及电阻式触摸控制器(4线/5线) |
安全性 | 安全模块:TRNG,加密引擎(带DPA的AES,TDES/SHA/RSA),安全引导 |
封装 | 14x14 289 MAPBGA 0.8mm间距 9x9 272 MAPBGA 0.5 mm间距 |
Cortex-A7 MPCore是一款基于高性能、低功耗处理器ARMv7-A架构的处理器。Cortex-A7 MPCore处理器在带有一级缓存子系统、可选集成GIC和可选的二级缓存控制器。Cortex-A7 MPcore 处理器支持 1~4 核,通常是和 Cortex-A15 组成 big.LITTLE 架构的,Cortex-A15 作为大核负责高性能运算,Cortex-A7 负责普通应用,因为 Cortex-A7 省电。Cortex-A7 本身性能也不弱,不要看它叫做 Cortex-A7 但是它可是比 Cortex-A8 性能要强大,而且更省电。ARM 官网对于 Cortex-A7 的说明如下:“在 28nm 工艺下,Cortex-A7 可以运行在 1.2~1.6GHz,并且单核面积不大于 0.45mm 2 (含有浮点单元、NEON 和 32KB 的 L1 缓存),在典型场景下功耗小于 100mW, 这使得它非常适合对功耗要求严格的移动设备,这意味着 Cortex-A7 在获得与 Cortex-A9 相似性能的情况下,其功耗更低”。
处理器包括的功能 | 完全实现ARMv7-A架构指令集与架构 具有直接和间接分支预测的有序管道。 带内存管理单元(MMU)的哈佛1级(L1)内存系统。 2级(L2)内存系统。 APB调试接口,支持整数处理器时钟比率高达并包括1:1。 通过嵌入式跟踪宏单元(ETM)接口提供跟踪支持。 可选VFPv4-D16 FPU,带无陷阱执行或媒体处理引擎(MPE) 采用NEON技术 |
外部接口 | ACE、APB、ETM、测试设计(DFT)、内存内置自检(MBIST)控制器。 |
调试体系结构 | Cortex-A7 MPCore处理器实现ARMv7.1 ARM调试架构符合CoreSight架构。 |
以前的 ARM 处理器有 7 中运行模型:User、FIQ、IRQ、Supervisor(SVC)、Abort、Undef和 System,其中 User 是非特权模式,其余 6 中都是特权模式。但新的 Cortex-A 架构加入了TrustZone 安全扩展,所以就新加了一种运行模式:Monitor,新的处理器架构还支持虚拟化扩展,因此又加入了另一个运行模式:Hyp,所以 Cortex-A7 处理器有 9 种处理模式。
User(USR) | 用户模式,非特权模式,大部分程序运行的时候就处于此模式。 |
FIQ | 快速中断模式,进入 FIQ 中断异常 |
IRQ | 一般中断模式。 |
Supervisor(SVC) | 超级管理员模式,特权模式,供操作系统使用。 |
Monitor(MON) | 这个模式用于安全扩展模式。 |
Abort(ABT) | 数据访问终止模式,用于虚拟存储以及存储保护。 |
Hyp(HYP) | 用于虚拟化扩展。 |
Undef(UND) | 未定义指令终止模式 |
System(SYS) | 系统模式,用于运行特权级的操作系统任务 |
图 3汇编中定义中断向量表
除了 User(USR)用户模式以外,其它 8 种运行模式都是特权模式。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。大多数的程序都运行在用户模式,用户模式下是不能访问系统所有资源的,有些资源是受限的,要想访问这些受限的资源就必须进行模式切换。但是用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。当中断或者异常发生以后,处理器就会进入到相应的异常模式种,每一种模式都有一组寄存器供异常处理程序使用,这样的目的是为了保证在进入异常模式以后,用户模式下的寄存器不会被破坏。
ARM 架构提供了 16 个 32 位的通用寄存器(R0~R15)供软件使用,前 15 个(R0~R14)可以用作通用的数据存储,R15 是程序计数器 PC,用来保存将要执行的指令。ARM 还提供了一个当前程序状态寄存器 CPSR 和一个备份程序状态寄存器 SPSR,SPSR 寄存器就是 CPSR 寄存器的备份。ARM 架构提供了 16 个 32 位的通用寄存器(R0~R15)供软件使用,前 15 个(R0~R14)可以用作通用的数据存储,R15 是程序计数器 PC,用来保存将要执行的指令。ARM 还提供了一个当前程序状态寄存器 CPSR 和一个备份程序状态寄存器 SPSR,SPSR 寄存器就是 CPSR 寄存器的备份。
每一种运行模式都有一组与之对应的寄存器组。每一种模式可见的寄存器包括 15 个通用寄存器(R0~R14)、一两个程序状态寄存器和一个程序计数器 PC。在这些寄存器中,有些是所有模式所共用的同一个物理寄存器,有一些是各模式自己所独立拥有的。(浅蓝色标注即为该模式独立拥有的)
最近在学习正点原子的Linux开发板,已经学习完了I.MX6ULL对应的裸机教程。在学习裸机教程的这段时间我对ARM-CortexA7内核、I.MX6ULL的基本外设有了基本了解。与学习STM32不同的是,I.MX6ULL裸机开发过程中几乎都是查阅参考手册,基本没有使用NXP的SDK包中的API函数,都是查询外设对应的寄存器、查看对应的寄存器的位,进而对寄存器进行操作实现外设的使能和其他配置。这么做目的是更好地了解I.MX6ULL的内部资源,裸机开发的学习不仅是我对32学习的巩固,也是我从32开发转向Linux驱动开发的一个过渡。在Linux下开发不像在Windows中有IAR、MDK等集成开发环境点点鼠标就能完成编译,大型的项目都是要使用Makefile,其中涉及到了Shell编程等内容。因为不像学习STM32调用ST现成的标准库函数,裸机开发的过程中学习得更加底层,我也感受到了C语言能力的提升,我对C语言的结构体指针、函数指针、结构体数组、栈等数据结构、对地址内存的操作有了更深的理解。分析I.MX6ULL启动方式(bin文件还需添加IVT、DCD);学习硬件资源SRAM、SDRAM、DDR、emmc、nand;中断嵌套和中断的具体实现过程等都是我在32的学习中没有涉及到的,这段时间的学习也算是对32学习的一个补充,花时间重点学习了32没有重视的部分。在这期间还尝试了ARM汇编、C语言的混合编程、Makefile的书写、基本Linux指令也得到了巩固,代码调试独立解决bug的能力也得到了锻炼,这些都为之后uboot、Linux内核的移植、根文件系统的构建打下基础。
参考:
2、List_of_ARM_microarchitectures维基百科
3、Cortex-A7 Technical ReferenceManua
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。