各品牌ARM SoC技术比较分析
本文将介绍三个常见的ARM SoC,包含ARM7和ARM9,并试着分析与比较它们的性能。 ARM7族群
低耗电量和低成本是ARM7的优点。不过,ARM7的最大执行速率不到100 MHz,因此,在应用上,它和8051之类的微控制器(MCU)类似,但在功能上,ARM7通常优于MCU。
由于一般的MCU都是8-bit,而且不支持操作系统(O.S.),所以使用MCU开发应用产品的成本通常会比使用ARM7来得便宜。然而,就简单的应用而言,ARM7也可以不需要操作系统,只使用纯粹的韧体,照样可以达到和MCU一样或优于MCU的效能。 TI的TMS470
它的CPU核心是ARM7TDMI,16/32-bit RISC。其正常模式的系统时脉是28 MHz、管线模式是48 MHz。内含128K Bytes的FLASH和8K Bytes的SRAM。其它电路单元还包含: 零脚位锁相回路(ZPLL)时脉模块。
模拟的看门狗定时器(analog watchdog timer;AWD)。 实时中断模块(real-time interrupt;RTI)。 两个”序列外围接口”(SPI)模块。 两个”序列通讯接口”(SCI)模块。
标准的”控制局域网络”(control area network;CAN)控制器(SCC)。 第二类序列界面(C2SIa)。
10-bit、16个输入信道多重缓冲”模拟数字转换器”(MibADC)。 高阶定时器(high-end timer;HET),控制16个输出入端口(I/O)。 外部时脉预分频器(external clock prescale;ECP)。 共49个I/O脚位,1个只能输入的脚位。 TMS470的系统功能有: 地址译码。 保护内存。
监督内存和各外围的总线。
重置(reset)和取消(abort)的例外管理。 所有内部中断源的排序(prioritization)。 装置的时脉控制。
平行的特性记号(signature)分析(PSA):是一种自动检测故障的功能,可以利用多个输入的特性记号来检测数据流。这个特性记号可以用来判定处理器是处于好的或坏的状态。 上述的ZPLL、HET、MibADC是TMS470的特殊功能。ZPLL包含了一个PLL、一个时脉监督(clock-monitor)电路、一个时脉致能(clock-enable)电路和一个预分频器(预分频值是从1~8)。ZPLL的功能是将外部的参考电压乘以预分频值,以获得较高的频率,供给TMS470内部使用。ZPLL提供ACLK给TMS470的系统模块,之后,系统模块会产生系统时脉(SYSCLK)、实时中断时脉(RTICLK)、CPU时脉(MCLK)、外围接口时脉(ICLK)。所谓”零脚位”是指ZPLL没有提供外部滤波器的接脚,亦即不需要连接外部滤波器的意思。 许多不熟悉TI芯片的硬件工程师,经常不知道要如何将石英振荡器(crystal oscillator)或外部的时脉信号连接到TI芯片上。其实,TMS470内部已经具有一个振荡器电路(在ZPLL内),但若要启动它,外部需要连接一个4MHz~20 MHz的石英或谐振器(resonator),并且要在OSCIN和OSCOUT脚位之间连接负载电容,。这个负载电容的大小应该由石英振荡器的供货商提供,如果施予不正确的载电容值,可能无法使TMS470正常开机和工作。 此外,如果不使用TMS470内部的振荡器,而改用外部的参考时脉或外部的振荡器输出信
号,此时要将1.8V的时脉信号连接到OSCIN脚位,并将OSCOUT脚位保持开路的状态,如附图2(b)所示。当然,不同厂牌的芯片的时脉来源之连接方式不尽相同,硬件工程师事先应仔细查阅它们的技术手册。
HET是一种先进的智能型定时器,它为实时的应用提供精确的计时功能。此定时器是由软件控制的,使用精简的指令集、特殊的微电路架构、I/O端口。它可以应用于数据比较、采集,或当成GPIO,尤其适用于对多个传感器(sensor)的输入数据做比较,或输出复杂的和精确的时间脉冲(如:PWM脉冲)来驱动起动器(actuator)。
HET的周边具有”XOR—分享”的功能,此功能可以让两相邻的HET通道被XOR在一起,和HET的标准输出脉冲相比,这能够输出更小的脉冲信号。
为了让使用者可以为FLASH、RAM、HET RAM寻址,TMS470有提供“内存选择”(memory selection)的功能。每一个“内存选择”具有它自己的“内存基本地址缓存器(memory base address register)”—MFBAHRx和MFBALRx(分别是高位和低位元),用来定义各个内存区块的起始(基本)地址、区块大小和保护方式。每一个“内存选择”的基本地址是透过缓存器来设定的,它们应该要符合附图3中的映像地址之边界值—必须是区块大小的整数倍。图4是TMS470的“内存选择”的分配情形。
MibADC接受一个模拟信号,并将它转换成一个10-bit的数字信号。MibADC具有两个模式:相容vs.缓冲模式。在兼容模式中,TMS470的“程序模型”(programmer‘s model)和TMS470的ADC模块兼容,而且MibADC的数字输出是储存在“数字输出缓存器”(digital result register)中;“程序模型”包含:缓存器、寻址模式(addressing mode)和中断。兼容模式能让ADC的程序设计工作变得比较容易,因为只要直接读取数字输出缓存器即可取得转换后的数字数据。在缓冲模式中,数字元输出缓存器被3个FIFO缓冲存储器取代—分别表示不同的转换群组(事件、群组1、群组2)。在兼容模式中,MibADC的FIFO是被“中断服务例程(ISR)”读取。
Philips的LPC2214
它的CPU核心是16/32-bit ARM7TDMI-S,S是“可合成”(synthesizable)的意思,可让SoC设计业者能将ARM7TDMI核心快速地和灵活地与其它IP合成。LPC2214的主要特性如下: 内建有256 Kbytes的FLASH、16 Kbytes的SRAM,工作速率60 MHz。128-bit的“内存加速模块”(memory accelerator module;MAM),能使CPU快速攫取到(prefetch)下一个ARM指令,因此,执行速率可以达到60 MHz。
透过芯片内的开机加载软件(boot loader),可以达到“系统内编程”(In-System Programming;ISP)和“应用中编程” (In-Application Programming;IAP)的功能。
所谓”系统内编程”是指利用JTAG和软件,可以在很短的时间内(约30秒~40秒),将使用者系统程序写入FLASH中,或清除FLASH的所有内容;在这过程中,并不需要从主机板中将处理器或FLASH拆除,因此可以节省成本和时间。这有利于产品的开发;或能让技术人员到客户端更新软件或参数,且不需要拆机壳大翻修。目前大多数的MCU、SoC、DSP、FPGA/CPLD都有提供类似的工具和功能。
所谓“应用中编程”是指利用两组FLASH,可以在远程将韧体版本升级。当将第一组FLASH的程序代码被清除或被重新写入时,处理器使用第二组FLASH的程序代码来执行。当第一组FLASH的写入作业完成之后,系统可以马上切换去执行第一组FLASH里面的程序代码。这个功能对网络通讯设备而言,是很重要的,因为当韧体版本升级时,这些设备
的操作系统是不能停止的。
支持EmbeddedICE-RT和Embedded Trace接口,透过RealMonitor软件可以进行实时除错。
8个通道的10-bit ADC,转换时间小于2.44μs。
2个32-bit定时器(4个采集信道和4个比较信道),1个PWM单元(6个输出)、1个实时时脉产生器(real time clock)、1个看门狗定时器。
多种序列接口,这包含:2个UART、1个快速I2C(400 Kbps)、2个SPI。 1个向量式中断控制器(可设定中断的优先级和中断向量的地址)。
可设定的外部内存接口,最多可设定4个内存排组(bank),每排最长16M-bit和8/16/32-bit的数据宽度(因此,支持的最大内存空间是64 MBytes)。 最多112个GPIO脚位(5V)。9个外部中断脚位(边缘或水平触发)。 内建有PLL,支持的最大CPU时脉为60 MHz。
内建有石英振荡器,工作频率范围是1 MHz~30 MHz。 两种低功率模式:闲置(Idle)和功率下降(Power-down)。
透过外部中断,可以将处于“功率下降模式”的处理器唤醒。 为了使功率的利用能够达到最佳化,可以开启(enable)或关闭(disable)个别的周边功能。 LPC2214也和TMS470一样有支持ADC的功能,因此,它们都很适合用来开发数据采集用途的装置,例如:条形码扫描机等。不过,TMS470的MibADC可以支持16个通道,但LPC2214只支持8个通道。
其实,LPC2214的PWM的运作原理和定时器一样。定时器是依照7个比较缓存器(match register)来计算外围装置的时脉周期数目,并产生中断;或当定时器的计数数目达到特定值时,系统就会去执行指定的工作。因为它能够分别控制上升缘和下降缘的位置,所以应用较广。例如:多相(multi-phase)马达的控制通常需要3个不重迭的(non-overlapped)PWM输出,分别控制3个脉冲宽度和位置。7个比较缓存器能够提供最多6个单边(single edge)控制的,或3个双边(double edge)控制的PWM输出脉冲。 LPC2214的内存映像(图4)是固定的,在重新映像时,不需要再设计其它复杂的程序代码,以便在不同的地址区块执行。其中,CPU中断向量可以被重新映像,好让中断向量能储存于芯片内的FLASH中(默认值为0x00000000),或储存于芯片内的SRAM中。藉由设定MEMMAP缓存器的值,就可以进行重新映射,重新映射完成后,开机码区块(boot block)将被搬移(relocate)至芯片内存储器映像的最上方。
LPC2000系列的SoC都具有下列三种工作模式或开机状态:
开机加载模式:被硬件重置启动,之后,开机加载程序会被执行。开机码区块里的中断向量会被映像至内存映像(FLASH)的最下方,以便于在开机加载过程,能够处理例外和中断请求。
使用者FLASH模式:当开机加载程序发现FLASH里有使用者程序存在时,而且开机加载程序不需要再执行时(没有被强制执行),就进入此模式。(这很像PC的BIOS开机过程,若一直按F1或DEL键,就会进入BIOS模式;若不按此键,则操作系统会正常运作。)在此模式中,中断向量不会被映射,仍然位于FLASH的最下方。
使用者RAM模式:被使用者程序启动。中断向量被重新映射至SRAM的最下方。 ARM9族群
ARM9大约可以达到180MHz~200 MHz的工作速率。因此,它能驱动的周边装置比ARM7多,应用范围也比较广。下面举Atmel的AT91RM9200来说明。 Atmel的AT91RM9200
它的CPU核心是16/32-bit的ARM920T,其主要功能简述如下:
内建有16 Kbytes的SRAM和128 Kbytes的ROM。
外部总线接口(External Bus Interface;EBI):可以支持SDRAM、SRAM、“暴量传输的(burst)”FLASH(亦即NOR FLASH)、能直接(glueless)和CompactFlash、SmartMedia、NAND FLASH连接。
7个外部中断来源,1个快速中断来源。
4个32-bit可程序I/O控制器,122个可程序I/O脚位,每个I/O脚位具有输入变动中断和”开路泄极”(open-drain)的功能。“开路泄极”是指在芯片内部的MOS FET输出电路上的泄极没有连接任何组件(电阻)。通常,它可以用来驱动高电流或高电压的负载;或者说,多个外部装置可以和此单一线路做双向通信。 具有20个信道的周边装置控制器(DMA)。 4个可程序外部时脉信号。
内建2个振荡器,以及2个PLL。 软件控制的功率最佳化功能。
实时时脉产生器具有警报中断功能。
中断控制器具有8个不同等级的优先级。能个别屏蔽的向量式中断来源,可抑制寄生信号对中断信号的干扰。
支持以太MAC 10/100 Base-T、MII或RMII,整合了28-byte的FIFO和专属的DMA传收通道。
支持USB 2.0(12 Mbps)主机端口(host port)和装置端口(device port)。主机端口有整合FIFO和专属的DMA。
多媒体记忆卡接口(multimedia card interface;MCI):支持自动的通信协议控制、和自动化的数据快速传输;与MMC和SD标准兼容,最多可支持2个SD记忆卡。
3个同步的序列控制器(SSC):每个传送器和接收器都具有独立的时脉和讯包同步信号。支持I2S模拟接口,采用分时多任务技术。
4个万用同步/异步接收传送器(USART):可支持RS485、IrDA、调制解调器(modem)、ISO 7816的T0/T1 Smart Card。
主从式序列外围接口(SPI):8到16-bit的可程序数据长度,可以选择4个外部外围芯片。
2组3-通道、16-bit的定时器/计数器(TC):3个外部输入时脉、每个通道具有2个多用途I/O脚位。能够产生双PWM信号。 双线路界面(two-wire interface;TWI):支持主控模式(master mode),支持Atmel所有的双线路EEPROM。
所有数字脚位都支持IEEE 1149.1 JTAG边界扫描。
AT91RM9200算是性能非常强大的SoC,它可以用来开发通信、储存、控制等产品。由于它的功能很多,所以本文无法逐项详细说明,在此仅介绍它的USB 2.0主机端口。
它的USB 2.0主机端口支持“开放式主机控制器接口”(Open Host Controller Interface;OHCI) v1.0规格,以及USB v2.0全速(12 Mbps)和低速(1.5 Mbps)规格的信讯协议。它整合了1个“根部集线器”(root hub)和下游的2个USB传收器。标准的OHCI USB通讯堆栈驱动程序可以轻易地移植到此架构中,不需要顾虑硬件的兼容问题;可以执行现有全部的USB类别驱动程序,这表示所有标准的USB类别装置(class device)都能被自动侦测,让使用者应用。图5是其内部架构图。
在主机控制器和主机控制器驱动程序之间,有两个通信信道。第一个信道使用主机控制器内部的作业缓存器组,这个信道的通信对象(目的地)就是主机控制器。这组缓存器包含了控制、状态、串行指针(list pointer)缓存器。它们都被映像至系统总线(ASB)的映像区域内。
其中有一个指标是指向处理器的地址空间—称为“主机控制器通讯区域”(Host Controller Communication Area;HCCA)。HCCA正是第二个通信信道。在此信道内,主机控制器是通信主控(主导)者。HCCA包含一些起始指标(head pointer),分别指向中断模式的“端点描述者”(Endpoint Descriptor)串行、已处理完毕的队列(done queue),和“讯框起始”(start-of-frame;SOF)所代表的状态信息。 此接口的基本建构区块包含:端点描述者(ED)和传输描述者(Transfer Descriptor;TD)。主机控制器对系统内的每一个端点各别分配一个ED,TD队列连结至特定的ED上。
虽然有了硬件的USB 2.0主机端口,但是USB的软件驱动程序仍然是不可或缺的。图7是它的USB驱动程序架构。USB的数据处理作业是透过下列的通信层完成的:
主机控制器硬件和序列引擎(serial engine):在总线上,传送和接收USB数据。 主机控制器驱动程序:驱动主机控制器硬件和处理USB通信协议。
USB总线驱动程序和集线器驱动程序:处理USB命令和“列举”(enumeration)。提供一个硬件的独立接口。 迷你驱动程序(mini driver):处理USB装置特有的命令。不同厂牌的USB装置可能具有不同功能的特殊命令。
类别驱动程序:处理标准的装置及其命令。某一标准类别的USB装置之类别驱动程序都具有共同的特性,或类似的程序代码和逻辑;例如:人机接口装置(HID)的驱动程序。 性能比较分析
目前在国外市场上TMS470、LPC2214、AT91RM9200等ARM SoC很受到欢迎。当然,还有其它厂牌的ARM SoC也很受欢迎,譬如:Samsung、Analog等。虽然在价格上它们不见得是最便宜的,但是由于它们的性能优异、容易应用,所以拥有许多忠实的用户。