1. 程式人生 > >ARM硬體知識和常見通訊協議

ARM硬體知識和常見通訊協議

ARM處理器

ARM(Advanced RISC Machines)一個32位元精簡指令集(RISC)處理器架構,ARM處理器廣泛地使用在許多嵌入式系統設計。ARM處理器的特點有指令長度固定,執行效率高,低成本等。

特點
1、體積小、低功耗、低成本、高效能;
2、支援Thumb(16位)/ARM(32位!)雙指令集,能很好的相容8位/16位器件;
3、大量使用暫存器,指令執行速度更快;
4、大多數資料操作都在暫存器中完成;
5、定址方式靈活簡單,執行效率高;
6、指令長度固定。

這裡寫圖片描述

如圖為ARM處理器的發展和產品:

①ARM Cortex™-A 系列應用型處理器可向託管豐富OS平臺和使用者應用程式的裝置提供全方位的解決方案,從超低成本手機、智慧手機、移動計算平臺、數字電視和機頂盒到企業網路、印表機和伺服器解決方案。—移動應用端

②ARM Cortex-R實時處理器為要求可靠性、高可用性、容錯功能、可維護性和實時響應的嵌入式系統提供高效能運算解決方案。—實時性處理器

③ARM Cortex™-M處理器系列是一系列可向上相容的高能效、易於使用的處理器,這些處理器旨在幫助開發人員滿足將來的嵌入式應用的需要。這些需要包括以更低的成本提供更多功能、不斷增加連線、改善程式碼重用和提高能效。Cortex-M 系列針對成本和功耗敏感的MCU和終端應用。—微控制器

ARM處理器的通訊圖(示例為ARM920T)

這裡寫圖片描述
詳細解說:
ARM9TDMI為處理器核心(速度400MHz),從MMU(Memory Management Unit的縮寫,中文名是記憶體管理單元,包括資料cache和指令cache)調取資料(當MMU中有資料為cache命中,當MMU中沒有資料為cache未命中),cache中沒有資料時從記憶體中調取資料。 —– 記憶體管理演算法。

BUS(匯流排)分為AHB BUS(高速匯流排)和APB BUS(外設匯流排)。
AHB BUS用來高速傳輸,如LCD ( Liquid Crystal Display 的液晶顯示器的簡稱)掛載在高速總線上(在ARM920T中為100MHz),USB Host,NAND Ctrl,Camera。
APB BUS上掛載USB Device,GPIO。
Ps:速度要匹配才能夠準確通訊。

匯流排(Bus)

這裡寫圖片描述

是計算機各種功能部件之間傳送資訊的公共通訊幹線,它是由導線組成的傳輸線束, 按照計算機所傳輸的資訊種類,計算機的匯流排可以劃分為資料匯流排地址匯流排控制匯流排,分別用來傳輸資料、資料地址和控制訊號。

詳細解說:
地址匯流排是CPU用來指定儲存單元(二進位制編碼),決定了CPU能訪問的最大記憶體空間,如10根匯流排能最大訪問1024位二進位制資料(1B),32位系統能最大訪問4GB(2^32-1)。
資料匯流排是CPU與其他器件之間的資料傳輸通道,資料匯流排的寬度決定了CPU和外界的資料傳輸資料。每條資料線一次只能傳輸一位二進位制資料,如8根資料線一次課傳輸一個8位二進位制資料(即1個位元組)。
控制匯流排是對外部器件進行控制,控制線的寬度決定了CPU對外部器件的控制能力。

匯流排通訊方式
①序列通訊和並行通訊
序列通訊是指使用一條資料線,將資料一位一位地依次傳輸,每一位資料佔據一個固定的時間長度。其只需要少數幾條線就可以在系統間交換資訊,特別適用於計算機與計算機、計算機與外設之間的遠距離通訊。(最低只需要1根資料線,資料按位傳輸)
並行通訊是指一組資料的各資料位在多條線上同時被傳輸,各資料位同時傳輸,傳輸速度快、效率高。並行資料傳輸只適用於近距離的通訊。
Ps:並行介面的資料傳輸率比序列介面快8倍,標準並口的資料傳輸率理論值為1Mbps(兆位元/秒)

②單工、半雙工和全雙工
資訊只能單向傳送為單工;
資訊能雙向傳送但不能同時雙向傳送稱為半雙工;
資訊能夠同時雙向傳送則稱為全雙工。

③同步通訊和非同步通訊
同步通訊是一種bit同步通訊技術,要求發收雙方具有同頻同相的同步時鐘訊號,只需在傳送報文的最前面附加特定的同步字元,使發收雙方建立同步,此後便在同步時鐘的控制下逐位傳送/接收。
非同步通訊在傳送字元時,所傳送的字元之間的時隙可以是任意的。但是接收端必須時刻做好接收的準備。傳送端可以在任意時刻開始傳送字元,因此必須在每一個字元的開始和結束的地方加上標誌,即加上開始位和停止位,以便使接收端能夠正確地將每一個字元接收下來。

串列埠匯流排通訊
DB9串列埠示意圖

這裡寫圖片描述這裡寫圖片描述
Ps:DB9屬於序列(按位傳輸),非同步(沒有時鐘線),全雙工(分為RXD和TXD)。

電腦上常見的DB介面有:
序列通訊介面RS232 9針 –DB9
顯示器 VGA 15針 – DB15
並行印表機 LPT 25孔 -DB25

串列埠通訊時序

這裡寫圖片描述
這裡寫圖片描述
詳細解說:
Baud rate(波特率):單位時間內載波引數變化的次數,如每秒鐘傳送240個字元,而每個字元格式包含10位(1個起始位,1個停止位,8個數據位),這時的波特率為240Bd,位元率為10位*240個/秒=2400bps。
Data bits:一次傳輸的位數,兩者一定要匹配,在一次傳輸之後有校驗位,不包含校驗位;
奇校驗(Odd Parity): 就是讓原有資料序列中(包括你要加上的一位)1的個數為奇數;
偶校驗(Even Parity):就是讓原有資料序列中(包括你要加上的一位)1的個數為偶數;
只能檢查奇數個位的變化,當一次變化偶數變化就檢查不出來。
Row Control:流控
DTR(Data Terminal Ready):資料終端準備
DSR(Data Set Ready):資料傳送準備
RTS(Request To Send):請求傳送
CTS(Clear To Send):清除傳送
XON/XOFF(通訊速率匹配協議):非同步通訊中,用於資料傳輸速率大於等於1200b/s時進行速率匹配,方法是控制傳送方的發速率以匹配雙方的速率。

過程:起始位->地位…高位->校驗位->停止位

TTL、RS232、RS485(電平標準)

微控制器CPU一般都提供TTL電平的UART(Universal Asynchronous Receiver and Transmitter,通用非同步收發器)通訊介面,它是一種通用的資料通訊協議,它包括了RS232、RS499、RS423、RS422和RS485等介面標準規範和匯流排標準規範。

▶TTL電平:輸出低電平要小於0.8V,高電平要大於2.4V;輸入低於1.2V就認為是0,高於2.0V就認為是1;

▶RS232電平:邏輯1的電平為-3~-15V,邏輯0的電平為+3~+15V,介於-3~+3V之間的電壓無意義;

▶RS485電平:差分訊號-2500mv~-200mv為邏輯0;差分訊號+2500mv~+200mv為邏輯1;-200mv~+200mv為高阻狀態。

這裡寫圖片描述
MAX232晶片是 TTL電平與RS232電平的專用雙向轉換晶片,可以TTL轉RS-232,也可以RS-232轉TTL。

TTL電平一般用於晶片與晶片之間的通訊;RS232採用了正負邏輯電平,提高線路的抗干擾性最遠可以達到15米左右;如果更遠的距離會取樣RS485,它使用兩線制的差分訊號傳輸,最遠可至1200米;RS232全雙工只支援點對點通訊(1:1),RS485半雙工或單雙工支援匯流排形式通訊(1:N)。

I2C匯流排(序列,半雙工,同步)

這裡寫圖片描述這裡寫圖片描述

I2C是由Philips公司發明的一種序列資料通訊協議,僅使用兩根訊號線:SerialClock(簡稱SCL)和SerialData(簡稱SDA)。
I2C是匯流排結構,1個Master,1個或多個Slave,各Slave裝置以7位地址區分,地址後面再跟1位讀寫位,表示讀(=1)或者寫(=0),所以我們有時也可看到8位形式的裝置地址,此時每個裝置有讀、寫兩個地址,高7位地址其實是相同的。—地址+讀(1)/寫(0)
系統中可能有多個同種晶片,為此addr分為固定部分和可程式設計部份,具體可以看相應晶片的datasheet。

I2C匯流排通訊時序

這裡寫圖片描述

過程:起始訊號->地址(選址)->資料->應答訊號(ack/nack)->結束訊號

詳細解說:
①空閒狀態
 I2C匯流排匯流排的SDA和SCL兩條訊號線同時處於高電平時,規定為匯流排的空閒狀態。此時各個器件的輸出級場效電晶體均處在截止狀態,即釋放匯流排。

②起始位與停止位的定義
起始訊號:當SCL為高期間,SDA由高到低的跳變;啟動訊號是一種電平跳變時序訊號,而不是一個電平訊號。
停止訊號:當SCL為高期間,SDA由低到高的跳變;停止訊號也是一種電平跳變時序訊號,而不是一個電平訊號。

③資料的有效性
I2C匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定(鎖死),只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。
Ps:SCL高,傳輸資料有效; SCL低,SDA才能變化

④ACK/NACK
傳送器每傳送一個位元組,就在時鐘脈衝9期間釋放資料線,由接收器反饋一個應答訊號。 應答訊號為低電平時,規定為有效應答位(ACK簡稱應答位),表示接收器已經成功地接收了該位元組;應答訊號為高電平時,規定為非應答位(NACK),一般表示接收器接收該位元組沒有成功。 對於反饋有效應答位ACK的要求是,接收器在第9個時鐘脈衝之前的低電平期間將SDA線拉低,並且確保在該時鐘的高電平期間為穩定的低電平。 如果接收器是主控器,則在它收到最後一個位元組後,傳送一個NACK訊號,以通知被控傳送器結束資料傳送,並釋放SDA線,以便主控接收器傳送一個停止訊號P。

SPI匯流排(序列,半雙工,同步)

這裡寫圖片描述

SPI全稱是序列外設介面(Serial Peripheral Interface),是由Motorola提出的一種全雙工同步序列通訊介面,通訊波特率可以高達5Mbps,但具體速度大小取決於SPI硬體。SPI介面具有全雙工操作,操作簡單,資料傳輸速率較高的優點,但也存在沒有指定的流控制,沒有應答機制確認是否接收到資料的缺點。
SPI匯流排只需四條線(如圖所示)就可以完成MCU與各種外圍器件的通訊:
▶MOSI – Master資料輸出,Slave資料輸入
▶MISO – Master資料輸入,Slave資料輸出
▶SCK – 時鐘訊號,由Master產生
▶/CS – Slave使能訊號,由Master控制,片選。

SPI通訊採用主從模式(Master-Slave)架構,一般為一個Master和多個Slave的應用模式。
SPI主要特點有:可以同時發出和接收序列資料;可以當作主機或從機工作;提供頻率可程式設計時鐘;傳送結束中斷標誌;寫衝突保護;匯流排競爭保護等。

SPI匯流排通訊

這裡寫圖片描述
SPI是[單主裝置(single-master )]通訊協議,這意味著匯流排中的只有一支中心裝置能發起通訊。當SPI主裝置想讀/寫[從裝置]時,它首先拉低[從裝置]對應的SS線(SS是低電平有效),接著開始傳送工作脈衝到時鐘線上,在相應的脈衝時間上,[主裝置]把訊號發到MOSI實現“寫”,同時可對MISO取樣而實現“讀”。

這裡寫圖片描述

詳細解說:
SPI模組為了和外設進行資料交換,根據外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響,SPI主模組和與之通訊的外設音時鐘相位和極性應該一致。
▶如果CPOL=0,串行同步時鐘的空閒狀態為低電平;
▶如果CPOL=1,串行同步時鐘的空閒狀態為高電平;
時鐘相位(CPHA)能夠配置用於選擇兩種不同的傳輸協議之一進行資料傳輸。
▶如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)資料被取樣;
▶如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)資料被取樣;
一般根據從裝置配置,需要兩邊相同。

SPI工作原理
這裡寫圖片描述這裡寫圖片描述

詳細解說:
SPI介面在內部硬體實際上是兩個簡單的移位暫存器,傳輸的資料為8位,在主器件產生的從器件使能訊號和移位脈衝下,按位傳輸,高位在前,低位在後。如上右圖所示,在SCLK的下降沿上資料改變,上升沿一位資料被存入移位暫存器。SPI介面沒有指定的流控制,沒有應答機制確認是否接收到資料。

記憶體

根據記憶體的工作原理劃分出的兩種記憶體:SRAM(Static Random Access Memory)與DRAM(Dynamic Random Access Memory)
▶DRAM是一種以電荷形式進行儲存的半導體儲存器,每個儲存單元由一個電晶體和一個電容器組成。資料儲存在電容器中。電容器會由於漏電而導致電荷丟失,因而DRAM器件是不穩定的。為了將資料儲存在儲存器中,DRAM器件必須有規律地進行重新整理。
▶SRAM每個儲存單元需要四到六個電晶體和其他零件,接通代表1,斷開表示0,並且狀態會保持到接收了一個改變訊號為止。這些電晶體不需要重新整理,但停機或斷電時,它們同DRAM一樣,會丟掉資訊。SRAM的速度非常快,通常能以20ns或更快的速度工作。
Ps:除了價格較貴外,SRAM晶片在外形上也較大,與DRAM相比要佔用更多的空間。SRAM的高速和靜態特性使它們通常被用來作為Cache儲存器。

SDRAM(Synchronous Dynamic Random Access Memory)在一個時鐘週期內只傳輸一次資料,它是在時鐘的上升期進行資料傳輸;
DDR(Double Data Rate SDRAM)記憶體則是一個時鐘週期內傳輸兩次次資料,它能夠在時鐘的上升期和下降期各傳輸一次資料;

在嵌入式MCU中,cache一般是SRAM,外接記憶體一般都支援SDRAM,現在的ARM處理器普遍都可以支援DDR記憶體。SDRAM單片大小一般最大到64MB左右,而DDRAM可以到GB。

S3C2440 記憶體對映

這裡寫圖片描述

詳細解說:
S3C2440對外引出了27根地址線ADDR0~ADDR26,它最多能夠定址128MB,而S3C2440的定址空間可以達到1GB,這是由於S3C2440將1GB的地址空間分成了8個BANKS(Bank0~Bank7),其中每一個BANK對應一根片選訊號線nGCS0~nGCS7,當訪問BANKx的時候,nGCSx管腳電平拉低,用來選中外接裝置, S3C2440通過8根選訊號線和27根地址線,就可以訪問1GB。

FL2440原理圖

這裡寫圖片描述

詳細解說:

將兩片32M記憶體的SDRAM串聯,構造成64M記憶體的SDRAM。
SDRAM的內部是一個儲存陣列,陣列就類似於表格一樣,有行、列之分,這樣我們要訪問(讀、寫)一個單元,就要先指定一個行地址,一個列地址,這樣就找到了該單元,這就是SDRAM的定址的基本原理。這裡的單元我們一般稱為儲存單元,而整個表格稱為邏輯BANK(Logical Bank , L-BANK),一般每個SDRAM都會有4個L-BANK。SDRAM的邏輯結構如下圖所示:

  1. 地址線從addr2~addr14、資料線data0~data31
  2. BA0、BA1
  3. 資料掩碼訊號DQM0,DQM1,DQM2,DQM3;
  4. SDRAM的時鐘有效訊號SCKE;
  5. SDRAM的時鐘訊號SCLK0,SCLK1;
  6. SDRAM片選訊號nSCS0(它與nGCS6是同一引腳的兩個功能);
  7. SDRAM行地址選通脈衝訊號nSRAS;
  8. SDRAM列地址選通脈衝訊號nSCAS;
  9. 寫允許訊號nWE(它不是專用於SDRAM的)。

過程:SCKE->SCLKn->nS3C->BANK->nSRAS,nSCAS->讀2位元組

Flash儲存器

這裡寫圖片描述

詳細解說:
Flash Memory中文名字叫快閃記憶體,是一種長壽命的非易失性(在斷電情況下仍能保持所儲存的資料資訊)的儲存器。按功能特性分為兩種:一種是NOR型快閃記憶體,以編碼應用為主,其功能多與運算相關;另一種為NAND型快閃記憶體,主要功能是儲存資料,如數碼相機中所用的記憶卡。Intel於1988年首先開發出Nor flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結結,強調降低每位元的成本,更高的效能,並且象磁碟一樣可以通過介面輕鬆升級。

NorFlash 有自己的資料和地址匯流排,因此可採用類似RAM的隨機訪問。NorFlash的特點是晶片內執行(XIP: eXecute In Place),這樣應用程式應用程式可以直接在flash快閃記憶體內執行,不必再把程式碼讀到系統RAM中。如果uboot中的ro段就可以直接在 NorFlash上執行,只需要把rw段和zi段拷貝到RAM中執行即可。
Nand Flash器件使用複雜的I/O口來序列的存取資料,8個引腳用來傳送控制,地址和資料資訊。由於時序較為複雜,所以一般CPU最好整合NAND控制器。 另外由於NandFlash沒有掛接在地址總線上,所以如果想用NandFlash作為系統的啟動盤,就需要CPU具備特殊的功能。

NandFlash和NorFlash的共性首先表現在向晶片中寫資料必須先將晶片中對應的內容清空,然後再寫入,也就是通常說的“先檫後寫”。只不過NorFlash只用檫寫一個字,而NandFlash需要擦寫整個塊。

(1)應用程式對NorFlash操作以“字”為基本單位。為了方便對大容量NOR快閃記憶體的管理,通常將NOR快閃記憶體分成大小為128KB或者64KB的邏輯塊,有時候塊內還分成扇區。讀寫時需要同時邏輯塊號和塊內偏移。
(2)應用程式對NandFlash操作是以“塊”為基本單位。NandFlash的塊比較小,一般是8KB,然後每塊又分成頁,頁的大小一般是512位元組。要修改NandFlash中一個位元組,必須重寫整個資料塊。
(2)Nandflash出於成本的考慮,出廠時允許有壞塊,使用過程中也可以產生壞塊,所以在進行資料讀寫時通常都會進行資料ECC檢測。而Norflash則不存在壞塊問題,這也導致不同flash今後選擇的檔案系統也不一樣。

Ps:
1 Device = 2048 Block
1 Block = 64 Page
1 Page = 2048 + 64 B (此處的64B空間是判斷2048 B是否存在壞塊 —– CRC迴圈冗餘校驗)
擦除的最小單位是 1 個 Block (128KB)
寫的最小單位是 1 個 Page (2KB—–0x20000)
NAND FLASH
這裡寫圖片描述

參考網頁資料