- Android底層開發實戰
- 周慶國
- 5625字
- 2018-12-31 21:06:25
1.1.4 基于ARM的移動電話硬件結構
1.ARM處理器簡介
ARM架構是32位元精簡指令集中央處理器架構,廣泛地使用在許多嵌入式系統設計中。由于節能這一特點,ARM處理器非常適合應用于移動通信領域,符合移動設備低耗電的設計目標。
截至2009年,ARM架構處理器占據了市面上32位嵌入式RISC處理器90%的份額。ARM處理器可以在很多消費類電子產品中看到,從便攜式設備(PDA、移動電話、多媒體播放器、掌上型電子游戲和計算機)到電腦外設(硬盤、桌面型路由器),甚至在導彈的彈載計算機等軍用設施中都有應用。同時還有一些基于ARM設計的派生產品,例如Marvell的XScale架構和德州儀器的OMAP系列。
2011年,ARM的客戶報告了79億ARM處理器出貨量,占有了當年智能手機市場的95%,硬盤驅動器市場的90%,數字電視和機頂盒市場的40%,單片機市場的15%和移動電腦市場的20%。2012年,微軟與ARM科技生產了新的Surface平板電腦,同年,AMD宣布將于2014年開始生產基于ARM核心的64位服務器芯片。
現行的(基于ARMv6、7、8架構)ARM處理器分為以下3類別:
·用于應用處理器的Cortex-A系列
·用于實時控制器的Cortex-R系列
·用于高級單片機的Cortex-M系列
ARM處理器支持多核計算,可以有多個核同時執行不同的指令,從而加快系統運行的速度。常見的多核系統有雙核Cortex A9、四核Cortex A15等。同時,ARM也支持異構多核,即多個不同的ARM核所構成的多核系統,通常是由Cortex-A7和Cortex-A15構成的面向低功耗、高性能的異構多核系統。最近,TI公司推出了基于雙核Cortex-R4的Hercules系列實時處理器。
在任何時刻,CPU只能運行在一種模式,但由于外部事件(中斷)或編程方式,能夠切換到其他的模式。CPU ARM架構指定了以下的CPU模式:
·用戶模式,唯一的非特權模式。
·系統模式,通過非異常的方法進入的特權模式。
·SVC模式,執行SWI指令或處理器復位后進入的模式。
·Abort模式,緩存沒有命中時進入的模式。
·未定義模式,執行非法指令時進入的模式。
·干預模式,處理IRQ的模式。
·快速干預模式,處理FRQ(快速IRQ)的模式。
·Hyp模式,Cortex-A15專用的虛擬化模式。
ARM架構包含了以下精簡指令集處理器的特性:
·讀取/存儲架構。
·正交指令集。
·大量的16×32位寄存器陣列。
·固定的32位操作碼長度,降低編碼數量所產生的耗費,減輕解碼和流水線化的負擔。
·大多均為一個CPU周期運行。
·大部分指令可以條件運行,降低在分支時產生的負重,彌補分支預測器的不足。
·算術指令只會在要求時更改條件碼。
·32位筒型位移器可用來運行大部分的算術指令和尋址計算,而不會損失性能。
·強大的索引尋址模式。
·精簡但快速的雙優先級中斷子系統,具有可切換的暫存器組。
ARM處理器支持豐富的指令集,包括傳統的ARM指令集、高密度的Thumb/Thumb2指令集、為浮點運算優化的VFP指令集等,部分ARM處理器甚至能直接執行部分Java字節碼,這就為以Java作為主要編程語言的Android系統帶來了極大的便利。
2.ARM SoC架構及選型
ARM雖然性能強大,但是ARM僅僅是一種處理器核,要組成一個通用處理器,還需要有總線系統、存儲系統、I/O系統等部件的配合。為了協調各種部件,ARM公司推出了為ARM處理器定制的、行業標準的AHB和APB總線。常見的基于ARM的SoC包含至少一個ARM內核、一個AHB總線控制器、一個內存控制器、一個閃存控制器、至少一個APB總線控制器和一些外設。ARM SoC的性能取決于ARM核和RAM子系統,ARM SoC的功能取決于外設的種類和數目。
基于Cortex-M系列核的SoC通常主頻不超過200MHz,內置Flash與RAM,Flash不超過1MB,RAM不超過256KB,面向傳統的單片機市場以及PLC、現場總線等控制類應用。基于Cortex-M系列核的SoC因直接與外部I/O打交道,所以擁有豐富的片內外設,如大量的定時器、豐富的ADC和DAC以及比較器等模擬外設、UART總線和CAN總線等。這類單片機對外部電路依賴小,低功耗,低成本,可以使用復雜的、大型的實時操作系統,能處理復雜的網絡協議,目前正在取代傳統的8位單片機。Cortex-M家族中的Cortex-M0面向低功耗市場,Cortex-M1面向FPGA嵌入式軟核市場,Cortex-M3面向通用控制和通信市場,Cortex-M4有可選的FPU,并能運行在高達200MHz的頻率下,面向高性能控制、通信和人機接口市場。
面向高可靠性、高可用性、低延時的關鍵類應用,ARM公司推出了Cortex-R系列實時控制器。與Cortex-M系列相比,該類產品擁有雙機備份的能力,即在一個芯片內實現兩個CPU核,雙機同時工作,另有一個獨立的模塊負責監督,在發生故障時屏蔽出錯的核,由另一個核繼續工作。這種熱備份、冗余的結構使得Cortex-R系列的可靠性非常高,又因為Cortex-R系列的總線、RAM控制器和Flash控制器都支持高級的ECC等校驗機制,使得SEU在多數情況下不會對系統造成嚴重的影響。另外,基于Cortex-R系列內核的實時控制器擁有更大的片內Flash和片內RAM以及更高的運行頻率,為冗余、安全操作系統和控制程序提供了更好的運行環境,在軟件層面上也加強了系統的可靠性。與Cortex-M系列核的微控制器相同的是,Cortex-R核的實時控制器也包含豐富的外設,因為片內外設的可靠性一般來說比片外外設要高,而且很多集成外設也包含一定程度的安全特征。
Cortex-A系列核代表了當今性能最強的ARM處理器,該系列包含Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15等多款處理器核。所有的Cortex-A系列核都是為高性能而設計的,因而都可以用作移動設備或者瘦客戶機等高性能設備的處理器核。其中,Cortex-A8是最早發售的型號,被用作通用應用處理器;Cortex-A9、Cortex-A15因良好的多核支持,被用于高性能系統,如手機和ARM服務器。后來的Cortex-A7則是精簡版的Cortex-A8,擁有與Cortex-A8相似或略高的性能和更小的硅片面積,同時支持多核,并且耗電更少。Cortex-A5則是ARM公司對ARM9、ARM11產品推出的升級產品,與Cortex-A8、Cortex-A8和Cortex-A9完全應用兼容,是ARM公司的低成本、低功耗產品。所有的Cortex-A系列核均含有MMU等系統管理模塊,因此都可以運行Linux等大型操作系統。部分處理器還有可選的NEON單元、Java虛擬機、虛擬化等高級功能,這些功能為ARM作為高性能移動處理器或高能效服務器處理器打下了堅實的基礎。通常,Cortex-A系列的處理器都能運行在至少800MHz的頻率上,有的甚至能超過2000MHz。
3.ARM指令集
ARM處理器屬于精簡指令集處理器(RISC),這是ARM與x86處理器最大的不同。實際上,幾乎所有的x86兼容處理器以外的處理器都是RISC處理器,只有x86、x86-64等傳統的、面向桌面市場的處理器還在使用復雜指令集處理器(CISC)。以常用的Intel桌面處理器為例,傳統的CISC處理器指令集支持豐富的操作,指令可以訪問內存,提供大量的內存緩存,因此可以在同樣的指令周期內執行更多的命令。然而,CISC處理器的結構臃腫,需要很大程度的手工優化和工藝優化來提升運行頻率,由于內部邏輯單元和緩存太多,耗電量也遠高于RISC處理器。
RISC處理器旨在使用簡單的指令集實現與CISC一樣的功能。因為指令集的減少,很多操作需分步進行,從而減少了相同周期內執行指令的個數。盡管如此,RISC處理器因為結構簡單,可以在設計階段使用自動化工具進行邏輯綜合、布局和布線,從而大幅度降低了設計門檻。又因結構簡化,RISC處理器可以在同樣的工藝和優化成本上實現更高的運行頻率和更低的電能消耗。舉例來說,一顆Intel的、基于Ivy Bridge架構的至強處理器(E3-1230v2)擁有4個核,每個核運行頻率為3.3GHz,耗電69W。而同一時期的三星公司生產的ARM SoC,Exynos 5420,擁有4個能運行在1.9GHz的核和4個能運行在1.3GHz的核,而耗電不超過3W。雖然指令集效率可能沒有基于CISC且擁有SSE/SSE/AVX的至強處理器高,但是每瓦特性能(即能效)遠高于后者,因此RISC處理器常用于移動設備、嵌入式設備等對功耗有嚴格要求的領域。
ARM處理器支持ARM和Thumb指令集。以最新、最簡單的Cortex-M0為例,該處理器占用硅片面積小,在90納米工藝下約0.04平方毫米,功耗低至16微瓦MHz,是理想的8位或16位單片機的替代品。在低功耗的同時,Cortex-M0處理器還集成了豐富的指令,支持ARM v6Thumb指令集,包括Thumb II擴展指令集。該處理器的高性能版本甚至還支持單周期32位乘法。Cortex-M0處理器共支持56條指令,分為本原指令(Intrinsic Instructions)、內存操作指令(Memory Access Instructions)、通用數據處理指令(Generic Data Processing Instructions)、分支和控制指令(Branch and Control Instruments)和其他指令(Miscellaneous Instruments)。
本源指令和其他指令是標準C語言不用的,但是在操作系統或應用程序中可能用到用于控制CPU工作的指令。為了在C語言中使用這些CPU相關的擴展指令,可以使用CMSIS接口或者內嵌匯編代碼。以下是Cortex-M0核所支持的本源指令和其他指令。
CPSIE i:使能IRQ
CPSID i:禁止IRQ
ISB:代碼緩存同步
DSB:數據緩存同步
MSB:內存同步
NOP:等待一個周期
REV:32位按位反轉
REV16:16位按位反轉
REVSH:32位低半字反轉
SEV:發送中斷
WFE:等待事件
WFI:等待中斷
MRS:從特殊寄存器移動至通用寄存器
MSR:從通用寄存器移動至特殊寄存器
BKPT:設置斷點
SVC:調用SVC例程
內存操作指令用于讀、寫內存、生成地址和堆棧管理。以下是Cortex-M0支持的內存操作指令。
ADR:生成相對PC的地址
LDM:裝載多個寄存器
STM:存儲多個寄存器
LDR系列:裝載一個寄存器
STR系列:存儲一個寄存器
PUSH:入棧
POP:出棧
通用數據處理指令對數據進行算術運算。Cortex-M0支持如下通用數據處理指令。
ASRS:算術右移
LSLS:邏輯左移
LSRS:邏輯右移
ROR:循環右移
ADCS:帶進位加法
ADDS:無進位加法
ANDS:邏輯與
BICS:位清除
CMN:負數比較
CMP:比較
EORS:異或
MOVS:復制數據
MULS:乘法
MVNS:取非并移動
ORRS:邏輯或
RSBS:取反相減
SBCS:帶進位減法
SUBS:無進位減法
SXTB:設置擴展字節
SXTH:設置擴展雙字節
UXTB:取消擴展字節
UXTH:取消擴展雙字節
TST:按位與并比較
分支控制指令改變PC中的值,從而實現代碼跳轉。跳轉可以是有條件的,也可以是無條件的。有條件跳轉的條件存放于狀態寄存器。Cortex-M0支持如下分支控制指令。
B:條件跳轉
BL:帶返回跳轉
BX:交換指令跳轉
BLX:帶返回的交換指令跳轉
4.ARM處理器的外圍電路
ARM處理器通常作為SoC的核存在,本節中所采用的ARM處理器都是基于ARM處理器的SoC。近年來常用的ARM核為ARM7、ARM9、ARM11、Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-R4、Cortex-R7、Cortex-A5、Cortex-A6、Cortex-A8、Cortex-A9和Cortex-A15等。由于處理器市場定位、性能區間和設計的相似性,本節將ARM7、Cortex-M0、Cortex-M1、Cortex-M3和Cortex-M4稱為微控制器系列,將Cortex-R4和Cortex-R7稱為實時處理器系列,將ARM9、ARM11、Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9和Cortex-A15稱為應用處理器系列。
通常微控制器系列的ARM處理器不需要外接Flash和RAM,其內部的Flash和RAM存儲器能夠滿足絕大部分應用需求。有些早期的ARM7處理器支持外接SDRAM,如三星公司的S3C44B0,此類處理器定位于高端工控而非微控制器,本書不介紹。一般的微控制器集成度很高,僅需要提供合適的電源即可工作。有的芯片可能還需要輸入一個外部復位信號。多數的處理器支持電路編程,即芯片在安裝之后通過ISP/ICP接口進行編程。
綜上所述,多數微控制器類的ARM處理器的電路設計十分簡單,最小系統僅需要電源穩壓器、退耦電容以及ISP/ICP相關電路即可。如圖1-7所示為一個實際的應用電路——STM32F103T8U6Cortex-M3處理器為例。

圖1-7 STM32F103T8U6Cortex-M3處理器應用電路
實時處理器,即Cortex-R4和Cortex-R7等,因為面向高可靠市場,所以一般集成Flash與RAM,用法與微控制器類似。由于對可靠性的要求高,所以配備相應的片外監控芯片與更可靠的電源供應。常見的片外外設有看門狗定時器、電源監控和復位芯片、電平轉換與靜電防護芯片等。供電方面應該配備多重可并聯的冗余供電,以防止因供電問題導致可靠性降低。
應用處理器定位高性能市場,內部集成的Flash和RAM不能滿足需求。幾乎所有應用處理器都要外加代碼存儲器和RAM。代碼存儲器通常由Flash閃存提供,也可以是硬盤等其他存儲介質。為了保證高峰值運算能力與低平均功耗,應用處理器一般會采用復雜的電源管理系統,因此外圍電路非常復雜,可能需要六層或八層電路板來實現。雖然有些應用處理器通過封裝疊加或多芯片封裝的方法把Flash和RAM集成到一個封裝內,目的在于降低布線的難度,但其外設電路仍然復雜。下面將專門介紹應用處理器在Android智能設備上的硬件架構。
5.基于ARM的Android智能設備硬件架構
常見的Android手機/平板架構,其中包含應用處理器、基帶處理器和射頻前端、內存、閃存、音頻Codec、電源管理、傳感器、觸摸屏幕等組件。
應用處理器通常是一個ARM處理器或MIPS處理器,負責運行Android程序代碼。一般情況下,應用處理器集成了圖形處理器、浮點運算協處理器和Java字節碼處理器。圖形處理器用于通過OpenGL ES接口提供高速的圖像渲染、3D場景重構。浮點運算協處理器和Java字節碼處理器能在降低CPU負載的情況下完成復雜的運算和Java字節碼的執行,實現快速的Java虛擬機。這種組合決定了基于Java的Android幾乎可以和基于C++的移動系統一樣快。
基帶處理器一般是一個高性能的DSP處理器,它負責無線通信的基帶算法。所有的基于蜂窩系統的通信均通過基帶系統實現。射頻前端分為接收和發射兩大部分:接收部分包含低噪聲放大器、射頻混頻器、本機振蕩器、帶通濾波器和模數轉換器;發射部分包含數模轉換器、本機振蕩器、射頻混頻器和功率放大器。其中模數轉換器和數模轉換器一般被集成在一個芯片里,叫做模擬前端。模擬前端直接與基帶處理器連接,由基帶處理器負責通信信號的處理。基帶處理器還負責語音的處理,包括消回音算法、信噪比增強和AMR/ADPCM編解碼等。通過基帶處理器與應用處理器通信,實現了完整的蜂窩系統設備。
內存、閃存是支撐應用處理器和基帶處理器的必需部件。內存提供臨時、高速的數據緩沖,用以支撐高速的處理器數據請求。一般通過DDR3、LPDDR3或LPDDR2與處理器連接。DDR3的優勢是高性能,LPDDR3的優勢是低功耗,LPDDR2的優勢是在功耗較低的前提下提供快速的突發訪問能力。閃存則提供永久的數據保存,用來存儲程序和數據。傳統上分為NOR Flash和NAND Flash。NOR Flash一般用來存儲系統程序,而NAND Flash用來存儲用戶程序和數據。由于NAND Flash的成本下降、性能提升,現在的手機幾乎完全使用NAND Flash。一種新型的基于NAND Flash的eMMC/iNAND正在慢慢占領新的市場,這種新的閃存器件需要更少的I/O資源,擁有不低于傳統閃存的性能,從而獲得更多的青睞。
音頻Codec,全稱是音頻編解碼器,負責采集來自話筒的音頻信號以及從耳機接口或揚聲器輸出的音頻信號。由于包含了數模轉換和模數轉換,所以被稱為Codec,即編碼器和解碼器。
電源管理部分負責電池的充放電、電池電量、壽命監測,并為各種處理器等系統部件提供穩定的電源。手機等移動設備需要高度省電,因此很多電源管理系統都需要配合應用處理器實現各種低功耗功能,比如動態電壓頻率調節、低功耗模式等。
傳感器與觸摸屏提供了最直觀的輸入輸出功能。通常智能手機包含加速度傳感器、陀螺儀、溫度傳感器、光線傳感器、接近傳感器和地磁傳感器等多個傳感器部件。這些傳感器會占用大量的I/O資源。為了節約I/O資源,會用一個單片機將全部的傳感器數據匯總,一并發給應用處理器。這個單片機就是Sensor Hub。觸摸屏可以分成觸摸控制器和液晶顯示屏。觸摸控制器一般與各種傳感器一起連接至Sensor Hub,而液晶顯示屏直接連接至應用處理器的LCD接口。
- Windows Server 2019 Cookbook
- 零起點學Linux系統管理
- Learning Windows Server Containers
- 循序漸進學Docker
- Extending Bootstrap
- Python基礎教程(第3版)
- Linux服務器配置與管理
- 計算機系統的自主設計
- Social Data Visualization with HTML5 and JavaScript
- 統信UOS應用開發進階教程
- VMware vSphere 5.1 Cookbook
- Learn OpenShift
- Linux系統管理初學者指南:基于CentOS 7.6
- Linux網絡操作系統項目教程(RHEL 6.4/CentOS 6.4)(第2版)
- Drupal 7 Mobile Web Development Beginner’s Guide