工作知識學(xué)習(xí)及總結(jié)系列文檔
本文主要記錄學(xué)習(xí)嵌入式軟硬件編程過程中的一些硬件基礎(chǔ)知識
嵌入式微控制器MCU ,又稱單片機,一般以某微處理器內(nèi)核為核心,芯片集成多種部件,功能和外設(shè),如8051系列。其最大的特點是單片化,體積大大減小,功耗和成本下降,可靠性提高,計算能力較為有限,主要用于控制等領(lǐng)域,因此成為微控制器。代表的有51系列,STM32,多種RAM芯片等。接下來將從幾個方面來詳細介紹MCU
1,存儲器
1.1 概念
存儲系統(tǒng)是計算裝置中用于存放數(shù)據(jù)和程序的記憶性子系統(tǒng),用以滿足計算裝置不同類型數(shù)據(jù)的臨時/永久存儲需要。
? 分級的存儲體系
? 不同類型數(shù)據(jù)存儲、訪問要求具有差異,數(shù)據(jù)訪問在時間、空間和順序上的局部性原理;
? 通用計算機采用了Cache、主存儲器(RAM,內(nèi)存)、外部存儲器組成的三級存儲體系;
? 多級存儲體系的計算裝置主要圍繞主存儲器來組織和運行;
? 對于體積、重量、功耗、可靠性以及成本等方面有特定要求的各類嵌入式系統(tǒng)而言,存儲子系統(tǒng)的設(shè)計具有定制和多元的特征與要求。
兩種典型存儲體系:
1,以CPU為核心的、片內(nèi)和片外存儲資源相融合的存儲體系;
2,與通用計算機相似的存儲體系;
其中,嵌入式系統(tǒng)存儲體系如下圖所示:
1.2,存儲器結(jié)構(gòu)模型
? “存儲體 + I/O接口電路 + 信號線”的基本結(jié)構(gòu);
? 存儲體:用于存儲的介質(zhì);
? I/O接口電路:用于訪問存儲體;
? 信號線(對外構(gòu)成訪問接口):地址線、數(shù)據(jù)線、控制線(讀、寫)、片選線、輔助線(時鐘、復(fù)位等)
1.3,存儲器性能指標(biāo)
? 只讀性
? 若存儲器中寫入數(shù)據(jù)后,只能被讀出,但不能用通常的辦法重寫或改寫,這種存儲器為只讀存儲器,即ROM;
? 若存儲器在寫入數(shù)據(jù)后,既可對它進行讀出,又可再對它寫入,為可讀/寫存儲器, 或隨機訪問存儲器。
? 易失性
? 若存儲器在斷電之后,仍能保存其中的內(nèi)容,則稱為非易失性存儲器;否則,為易失性存儲器;
? 只讀存儲器(ROM)是非易失性的,隨機存儲器(RAM)是易失性的。
? 位容量
? 存儲能力;
? 不同地址線、數(shù)據(jù)線寬度的存儲器,位容量可能相同。
? 速度、功耗、價格等
1.4,嵌入式存儲器類型
嵌入式系統(tǒng)多使用半導(dǎo)體類型的存儲器;
1.4.1,只讀存儲器
可分為掩模ROM,PROM, EPROM(可擦除可編程ROM),EEPROM(電子可擦除可編程存儲器)
按照向其中寫入新數(shù)據(jù)的方法及其可以重寫的次數(shù)來劃分。反映了ROM從掩膜到一次性可編程,再到可擦寫可編程的演化過程。
1.4.2,隨機存儲器
隨機存儲器可被隨機讀/寫,與磁盤不同,允許以任意次序讀/寫;
可分為兩大類,主要差別為所存儲數(shù)據(jù)的壽命
? SRAM:只要芯片有電,內(nèi)容存在,掉電后內(nèi)容丟失;
? DRAM:數(shù)據(jù)壽命短,通常不超過0.25s,即使連續(xù)供電;
特點比較
? SRAM比DRAM快;
? 工作時,SRAM比DRAM耗電多;
? DRAM的存儲密度大于SRAM,在一個芯片上可以置放更多的DRAM;
? DRAM需要周期性刷新,需要使用專用的DRAM控制器(嵌入式處理器通常集成了DRAM控制器)。
1.4.3,雙端口RAM
雙端口RAM(Dual-Port RAM, DPRAM)為 一套存儲體與兩套獨立訪問端口構(gòu)成的存儲器;其容量可以由幾十Kb到幾十Mb等,額定電壓一般為1.8V、3.2V、5V或5.5V;兩個主設(shè)備(如嵌入式處理器)可以分別接在兩個不同的端口上,快速通信,且編程需要考慮DPRAM存儲器的管理問題,同步與互斥。
按照雙端口操作特性可以分為:
? 偽雙端口RAM:一個為只讀端口,另一個為只寫端口;
? 雙端口RAM:兩個端口均可進行讀和寫。
按照存儲體類型可以分為:
? SRAM型、DRAM型和SDRAM型。
雙端口RAM邏輯如下圖所示:
雙端口RAM的典型工作方式可分為:中斷方式,忙邏輯方式和信號量方式。
中斷方式如下圖所示:
忙邏輯方式:
一個處理器想訪問雙端口RAM時,先去看忙邏輯busy線,如果為低電平,則置為高電平。之后其余處理器想訪問時,檢測到高電平則不能訪問。
信號量:
左側(cè)訪問時,先獲取信號量,之后就占用信號量。右側(cè)訪問時,發(fā)現(xiàn)信號量被占用,則訪問被阻塞。
訪問時序舉例:
1.4.4,混合存儲器
既具有RAM快速讀寫訪問的特性,又具有非易失性,介于RAM和ROM之間;
特點
? 通電和RAM一樣,“快速”訪問;
? 斷電后和ROM一樣,保持內(nèi)容;
? 速度提升
? 容量不斷增大
? 價格持續(xù)降低
用途
? 存儲系統(tǒng)數(shù)據(jù)、配置數(shù)據(jù)等;
? 要求高速度的應(yīng)用
1.4.4.1 Flash ★ ★ ★ ★ ★
? 又稱為單電壓的EEPROM,在其安裝的電路板上直接擦除和重新編程,且Flash設(shè)備一次能擦除一個扇區(qū),而不是逐個字節(jié)擦除;
? 結(jié)合了目前為止所有存儲器件的優(yōu)點,具有高密度、低價格、非易失性、快速(讀取,而不是寫入)以及電可重編程等特點;
? 一塊1M位的閃速存儲芯片的擦除、重寫時間小于5μs,比EEPROM快得多,具備RAM的功能以及高速編程的特點;
? 允許某些塊被保護,將引導(dǎo)代碼放進保護塊而允許更新設(shè)備上其他的存儲器塊,被稱為引導(dǎo)塊閃存。
與傳統(tǒng)存儲器相比,F(xiàn)lash的主要優(yōu)勢
? 非易失:不像SRAM(靜態(tài)隨機存儲器),F(xiàn)lash無須后備電源來保證數(shù)據(jù)不變;
? 易更新:相對于EPROM的紫外線擦除工藝,F(xiàn)lash的電擦除功能為開發(fā)者節(jié)省了時間,也為用戶更新存儲器內(nèi)容提供了可能。而與EEPROM相比較,F(xiàn)lash的成本更低,密度和可靠性更高;
? 一般可重復(fù)寫1~10萬次,甚至上百萬次(反復(fù)向浮柵注入電荷和抽離電荷導(dǎo)致物理特性變化,如下圖所示)
? 數(shù)據(jù)保持期通??沙^十年(但這受編程次數(shù)的影響)。
主要分為兩類:NOR和NAND型 ,區(qū)別是:
? 內(nèi)部存儲體的架構(gòu);
? 接口不同:NOR是屬于SRAM型接口,NAND屬于I/O接口;
? 隨機讀取速度不同:NOR可以取代E2PROM,多用于BOOT ROM; NAND由于其高密度,多用于大量數(shù)據(jù)的存儲。
NOR Flash于上世紀(jì)八十年代末問世,是Intel設(shè)計的一個主要的Flash規(guī)格標(biāo)準(zhǔn)。NOR Flash以EEPROM為基礎(chǔ),存儲單元由NMOS構(gòu)成,可隨機讀取任意單元內(nèi)容;其適合程序代碼的并行讀寫,常用于BIOS存儲器和微控制器內(nèi)部存儲器等
NAND Flash是使用復(fù)雜I/O接口來串行存取數(shù)據(jù)的存儲器件,共用一套總線作為地址總線和數(shù)據(jù)總線。NAND Flash將幾個N-MOS單元用同一根線連接,可以按順序讀取存儲單元內(nèi)容; 適合數(shù)據(jù)或文件的串行讀寫存儲;成批量訪問
Flash寫操作特點
? 每一個存儲位置必須在重寫操作之前被擦除,否則寫結(jié)果將可能是新、舊值的某個邏輯組合,產(chǎn)生錯誤;
? 一次擦除一個扇區(qū)塊,不可能只擦除單個字節(jié);扇區(qū)大小隨具體器件變化,通常是KB量級;
? 擦除和寫入數(shù)據(jù)的過程取決于器件特性,較復(fù)雜,設(shè)計Flash驅(qū)動程序能提供較好支持。
1.4.4.2 FRAM 鐵電存儲器
鐵電存儲器的核心技術(shù)是鐵電晶體材料—鋯鈦酸鉛(PZT)主要利用了鐵電晶體材料的鐵電性和鐵電效應(yīng)。
? 擁有隨機存取存儲器和非易失性存儲產(chǎn)品的特性;
? 鐵電效應(yīng):是指在鐵電晶體上施加一定電場時,晶體中心原子在電場的作用下運動并達到一種位置上的穩(wěn)定狀態(tài),這個位置就用來表示“0”和“1”。
? 電場消失后,中心原子會一直保持在原來的位置,并在常溫、沒有電場情況下保持這一狀態(tài)達一百年以上。
? 整個物理過程中沒有任何原子碰撞,F(xiàn)RAM擁有高速讀寫、超低功耗和無限次寫入等超級特性;
? 使工程師有更大的發(fā)揮空間去選擇實時記錄最新的配置參數(shù),免去是否能在掉電時及時寫入的顧慮。
1.4.4.3 系統(tǒng)配置數(shù)據(jù)存儲器
? 系統(tǒng)配置數(shù)據(jù)(常數(shù))描述了系統(tǒng)的參數(shù),這些參數(shù)包括軟件參數(shù)和硬件參數(shù),就像個人計算機中存儲器的硬盤參數(shù)一樣。
要求:
非易失性:掉電時數(shù)據(jù)不丟失
快速訪問:應(yīng)該像RAM一樣方便快速。
方案
?Flash、EEPROM寫入不方便或效率不高;
?NVRAM、FRAM讀寫方便,但是成本高;
?外部電池備份等。
BBSRAM
在 早 期 技 術(shù) 發(fā) 展 過 程 中 , NVRAM 主 要 是 指 有 后 備 電 池 供 電 的 SRAM(BBSRAM),其既保持了RAM的隨機、快速訪問特性,同時通過后備電源解決了系統(tǒng)掉電后的SRAM供電問題。
nvSRAM
是一種同時采用了“SRAM+非易失性存儲元E2PROM” 的復(fù)合式新型NVRAM;
一個非易失性E2PROM存儲元對應(yīng)一個SRAM存儲元;
E2PROM通常采用基于氮化硅的存儲技術(shù)SONOS,用厚度更薄的氮化硅層來代替之前的多晶硅浮柵層?該E2PROM的擦寫次數(shù)約為50萬次,系統(tǒng)掉電后數(shù)據(jù)可保持20年左右;
SRAM模式下,該存儲器就是一個普通的靜態(tài)RAM;非易失模式下,數(shù)據(jù)并行地從SRAM存儲到E2PROM或者從E2PROM恢復(fù)到SRAM。
1.5,總結(jié)
2,最小系統(tǒng),電源與外圍電路
嵌入式系統(tǒng)硬件是以處理器與存儲器為核心,以電子線路連接所有電子元件和接口所形成的器件網(wǎng)絡(luò)。
◆最小系統(tǒng)是指一個僅具有進入正確執(zhí)行模式所需最少資源的系統(tǒng)。從硬件角度,最小嵌入式系統(tǒng)硬件包括了嵌入式處理器、片上/片外存儲器以及電源供電、復(fù) 位、時鐘等外圍輔助電路。
◆通過設(shè)計和驗證最小系統(tǒng)硬件,可以掌握以特定處理器為核心的嵌入式硬件設(shè)計方法,并為進一步的功能、接口、總線擴展奠定基礎(chǔ) 。
最小系統(tǒng)的外圍電路包括:芯片、器件正常工作所需要的電路以及供電電路、復(fù)位電路、時鐘電路等
2.1,外圍電路1:供電電路
供電電路計算硬件的基本組成,為系統(tǒng)提供一種或多種負載能力的電壓輸出, 其穩(wěn)定性對整個系統(tǒng)硬件的安全、可靠運行具有重要影響
嵌入式系統(tǒng)中大都采用直流穩(wěn)壓電源電路;
? 供電電路設(shè)計
? 包括下圖中的全部,或者后端部分;
? 可采用元件搭建,也可以直接采用電源器件。
2.2,外圍電路2:時鐘電路
? 時鐘節(jié)拍是處理器、存儲器、I/O等正常工作的必備條件;
? 時鐘電路是計算裝置中用于產(chǎn)生并發(fā)出原始“嘀嗒”節(jié)拍信號的、必不可少的信號源電路,常常被視為計算裝置的心臟。
? 背景知識
信號源:振蕩電路原理,包括正弦波振蕩電路 和 RC、LC正弦波振蕩電路
2.2.1,構(gòu)建時鐘電路的方式一
石英晶體諧振器 (無源晶振、晶振,常記為Xtal)
? 基于壓電效應(yīng)特性并采用特定切割方式和晶片尺寸,在石英晶片加上電極和外殼封裝所制造的不同頻率諧振元件;
? 可用于穩(wěn)定頻率和選擇頻率。
? 石英晶體是具有兩個引腳的無極性器件;
? 使用時,為諧振器連接特定激勵電平的外部電路,接入一定負載電容(約30pF)以快速地起振和穩(wěn)定頻率。
2.2.2,構(gòu)建時鐘電路的方式二
石英晶體振蕩器(晶體振蕩器、有源晶振)
?采用石英諧振器作為選頻網(wǎng)絡(luò),經(jīng)擴展放大電路、整形電路等可進一步設(shè)計、形成完整的反饋振蕩器;
? 一般具有4個引腳:電源、接地、振蕩信號輸出以及空引腳或控制引腳;
? 接通電源后就可直接輸出頻率穩(wěn)定度和精確度都非常高的振蕩信號;
? 據(jù)其工作特性,可將石英晶體振蕩器分為普通(SPXO)、溫度補償型(TCXO)、恒溫型(OCXO)以及電壓控制型(VCXO)等。
2.2.3,多時鐘管理
? 1, 多時鐘電路
? 不同類型的總線、接口、外部組件以及功耗管理等可能需要不同的時鐘;
? 嵌入式系統(tǒng)內(nèi)的時鐘源、時鐘類型、時鐘頻率日益多樣化,其功能也從基本的工作時鐘向復(fù)位控制、電源管理、低功耗模式控制等方面不斷延伸;
? 為了保證所有時鐘同相以盡量避免產(chǎn)生干擾,無需為每個時鐘輸入提供單獨的時鐘電路,例如:同相時鐘 或者 鎖相環(huán)(PLL)、分頻器(FreqDiv)
例子:
? 2,處理器內(nèi)部時鐘樹
? 在基本時鐘基礎(chǔ)上,通過擴展鎖相環(huán)、分頻器等電路就可以將幾個輸入時鐘轉(zhuǎn)換為多種類型和用途的時鐘;
? 提供了可由軟件操作的、用于配置時鐘的一組寄存器。
2.3,延伸:電源管理與低功耗設(shè)計
? 功耗與電路中器件的工作狀態(tài)相關(guān)
1,電壓越高功耗越大
2, 頻率越高功耗越大
3, 工作態(tài)器件的數(shù)量越多功耗越大
? 通過對電源電壓的動態(tài)調(diào)節(jié)和管理,可進一步使電子器件運行于不同的工作模式;
1, 開啟或關(guān)閉某些組件的電源
2,全速運行或睡眠、待機等低功耗狀態(tài)
? (智能)電源控制和管理邏輯單元,可以為片內(nèi)邏輯提供多種電源供給方案和運行模式。
多種供電電源是嵌入式處理器的基本特征之一,用以滿足處理器內(nèi)處理器核、I/O接口、時鐘電路等數(shù)字邏輯以ADC/DAC、傳感器、鎖相環(huán)等模擬組件的供電要求。
低功耗是現(xiàn)代嵌入式系統(tǒng)設(shè)計中需要考慮的重要方面
3,復(fù)位電路與看門狗邏輯
? 用途:在系統(tǒng)電源建立過程中,為CPU或某些接口電路提供一個幾十毫秒至數(shù)百毫秒的復(fù)位脈沖(高或低),利用這段時間(大于芯片最小復(fù)位時間要求),系統(tǒng)振蕩器啟動并穩(wěn)定下來,CPU復(fù)位內(nèi)部寄存器及指針,為程序運行做準(zhǔn)備;
? 復(fù)位電路的形式
? 阻容復(fù)位電路
? 手動復(fù)位
? watchdog復(fù)位
? 專用復(fù)位電路
? 內(nèi)部復(fù)位
? 軟件復(fù)位
3.1.,上電復(fù)位(POR)
上電復(fù)位是集成電路芯片的重要組成部分;
? 功能
? 當(dāng)電源電壓達到可以正常工作的閾值電壓時,集成電路內(nèi)部的狀態(tài)機便開始初始化器件,使整個芯片在上電后的一段時間內(nèi)進入已知狀態(tài);
? 在完成初始化之前忽略除復(fù)位引腳(如有)之外的任何外部信號;
3.2,阻容式復(fù)位電路
? 利用電容電壓不能突變而是按指數(shù)規(guī)律上升、下降的特性,配合反相器的輸入電平翻轉(zhuǎn)門限產(chǎn)生所需復(fù)位脈沖;
復(fù)位脈沖寬度取決于電容、電阻的參數(shù);
復(fù)位脈沖寬度與電源電壓、復(fù)位電平門限電壓、電容、電阻的值密切相關(guān),約為0.7R1C1~ R1C1毫秒。
例子:
8051 MCU要求復(fù)位信號長度至少為兩個機器周期,即24個時鐘周期以上,那么在RST(或RST)端出現(xiàn)復(fù)位信號后的第二個機器周期,片內(nèi)復(fù)位電路檢測復(fù)位信號并進行內(nèi)部復(fù)位,
直至該信號恢復(fù)。
? 以8051 MCU為例,假設(shè)采用6MHz振蕩器且電源建立時間不超過10ms、振蕩器建立時間不超過30ms時,那么復(fù)位脈沖寬度應(yīng)不小于tRST=(10ms+30ms+2×2μs),此時理論上要求的R1C1值不小于(tRST/0.7)=57.15ms。
優(yōu)點:簡單、成本低,大部分時間正常工作
缺點:在電源瞬時跌落和恢復(fù)過程中,電容充放電的指數(shù)特性導(dǎo)致電容未完成放電時便又開始充電,從而無法產(chǎn)生合格寬度的復(fù)位脈沖。
改進:
二極管電阻低,通過二極管放電很迅速。
3.3,手動復(fù)位
?通常配合自動復(fù)位電路工作,開關(guān)接在電容兩端;
? 手動復(fù)位開關(guān)產(chǎn)生的復(fù)位信號接在復(fù)位電路上,而不直接接在處理器復(fù)位信號輸入端上,可以消除開關(guān)抖動;
? 抖動產(chǎn)生的原因:普遍意義上包括了人為抖動、接觸不良、電磁干擾等
3.4,專用復(fù)位電路
? 是一種專用的集成電路,輸出復(fù)位信號;
? 可支持多種復(fù)位信號;
? 所產(chǎn)生的復(fù)位信號質(zhì)量較高;
例子:
如圖所示,盡管掉電信號A點是時間不等的毛刺,但是經(jīng)過專用復(fù)位電路后,E點產(chǎn)生的復(fù)位信號是穩(wěn)定的,有一個完整的224ms的復(fù)位信號(盡管在復(fù)位信號前有毛刺,掉電時間長為大毛刺,掉電時間短為小毛刺,但是毛刺后都有穩(wěn)定的復(fù)位信號,這一點很重要!)
3.5,看門狗復(fù)位電路(WatchDog,WD)
當(dāng)計算裝置發(fā)生死機等運行故障時,我們可以設(shè)計一個狀態(tài)監(jiān)控電路,監(jiān)測控制運行狀態(tài)來解決這一問題。
在嵌入式系統(tǒng)領(lǐng)域,這種具有系統(tǒng)邏輯監(jiān)控功能和故障時自動復(fù)位能力的電路稱之為 看門狗復(fù)位電路。具體的,是可以監(jiān)控嵌入式系統(tǒng)運行狀態(tài),并在故障時向RST(#RST)端輸出復(fù)位信號的專用電路。
看門狗計時器WDT一直在計數(shù),當(dāng)WDI有信號輸入時,定時器清零,如果長時間沒有信號輸入,定時器會溢出,溢出則產(chǎn)生一個輸出信號CLR,復(fù)位電路。左側(cè)稱為喂狗。
1,如何使用看門狗電路?
? 軟硬件配合;
? 嵌入式系統(tǒng)程序,正常邏輯,每個確定的時間必然運行其中的某部分代碼,完成看門狗復(fù)位操作;
? 如果在一個特定最大的時間內(nèi)沒有運行該類代碼,則認為系統(tǒng)故障,看門狗電路產(chǎn)生復(fù)位信號,使處理器強制復(fù)位,系統(tǒng)從復(fù)位向量處重新運行。
2,提高可靠性
? 環(huán)境惡劣時,嵌入式處理器運行過程中可能出現(xiàn)死機和跑飛的情況,此時需要使用特定電路使處理器強制復(fù)位;
? 實現(xiàn)嵌入式系統(tǒng)的自動狀態(tài)監(jiān)測和恢復(fù),提高故障恢復(fù)能力和可靠性。
例子:
看門狗復(fù)位電路,通過處理器的通用I/O引腳GPIO,向處
理器監(jiān)控電路發(fā)出復(fù)位脈沖,使監(jiān)控集成電路避免溢出。否則,WDO輸出低電平,MR產(chǎn)生復(fù)位信號,RST端使得系統(tǒng)復(fù)位。當(dāng)SW1手動開關(guān)時,MR也會產(chǎn)生復(fù)位信號。
此外,
3.6,內(nèi)部復(fù)位
? 工作原理
? 利用watchdog復(fù)位方式,是看門狗復(fù)位的延申;
? 上電時,程序沒有復(fù)位watchdog,watchdog timer溢出,完成復(fù)位;
? 微控制器不需要reset引腳;
? 例:philips 的P87LPC76x系列
? 配置成內(nèi)部復(fù)位的時候,reset引腳可以作為普通的I/O使用,節(jié)省了引腳;
3.7,軟件復(fù)位
? 方法
? 軟件復(fù)位的方法是通過軟件設(shè)置一個特殊功能寄存器的位完成控制器的復(fù)位,復(fù)位結(jié)果如同硬件復(fù)位一樣;
? 注意
? 軟件復(fù)位與程序從復(fù)位向量處開始運行不同;其中,軟件復(fù)位指的是使處理器恢復(fù)初始狀態(tài),程序從頭開始重新執(zhí)行。
? 從復(fù)位向量處開始運行程序,處理器/控制器的狀態(tài)不會回到復(fù)位狀態(tài),只是從start處開始運行程序。(處理器在當(dāng)前狀態(tài)下,程序重新執(zhí)行)
4,I/O接口與總線
I/O子系統(tǒng)模型
? 總線連接
? 通過寄存器組實現(xiàn)訪問
4.1,SPI串行總線
SPI(Serial Peripheral Interface,串行外設(shè)接口)
Motorola,處理器與外設(shè)間的簡單串行通信接口;
? 全雙工、一主多從式通信;
? 兩條數(shù)據(jù)線用于收發(fā)數(shù)據(jù),時鐘線用于同步;
? 通信速度可達每秒數(shù)十Mb。
SPI是近距離連接嵌入式處理器與外設(shè)的主從式、全雙工串行總線;
? 應(yīng)用
? 連接嵌入式處理器與Flash、SD卡、LCD、ADC、傳感器、WiFi、藍牙模塊等I/O設(shè)備。
左邊主設(shè)備,右邊從設(shè)備
MISO:指的是如果這個設(shè)備是主設(shè)備MASTER,那么該口為輸入,為從設(shè)備的話,該口為輸出。
4.1.1,SPI基本功能
? 用端口中的4個引腳實現(xiàn)數(shù)據(jù)傳送
? 串行時鐘SPSCK/PD3
? 主接收從發(fā)送 MISO/PD1
? 主發(fā)送從接收 MOSI/PD2
? 低有效從機片選SS*/PD0;
? 不用 SPI功能時,這些引腳被配置成通用I/O;
? 主機模式中:發(fā)出時鐘?寫數(shù)據(jù)到數(shù)據(jù)寄存器?移位寄存器?移位完成后狀態(tài)位自動置位;
? 從機模式中:等待SS*拉低,通過SPSCK與主機同步;
4.1.2,SPI的通信原理
? 通過移位或者循環(huán)移位完成主從設(shè)備間的通信;
? 數(shù)據(jù)流動
? MOSI:主發(fā)送從接收 端口
? MISO:主接收從發(fā)送 端口
通過移位寄存器,主機和從機交換數(shù)據(jù)。
上圖中上跳沿發(fā)送或者接收數(shù)據(jù),下跳沿可以采樣數(shù)據(jù)。
? 僅主發(fā)送從接收時,也需要提供同樣的時鐘信號,消耗同樣的時間節(jié)拍。
4.1.3,SPI連接方式
4.1.4,SPI接口操作
? 基本規(guī)范定義了映射到存儲模塊的一組8位寄存器
? SPI控制寄存器SPICR1和SPICR2
?可讀寫的波特率寄存器SPIBR
?只讀的SPI狀態(tài)寄存器SPISR
?可讀寫的數(shù)據(jù)寄存器SPIDR
SPI控制寄存器SPCR1
? 只能在復(fù)位初始化SPI時寫一次
? SPIE是中斷允許位,“1”為使能,“0”為禁止;
? SPE是SPI使能位,“1”為使能,“0”為禁止,在完成SPI配置之前該位應(yīng)置“0”;
? SPTIE是SPI傳輸中斷允許位,“1”表示允許SPTE中斷,“0”表示禁止;
? MSTR為SPI主從模式設(shè)置位,“1”為主設(shè)備,“0”為從設(shè)備;
? CPOL是時鐘極性位,“0”為正脈沖,“1”為負脈沖;
? CPHA為時鐘相位,是數(shù)據(jù)采樣和有效的時刻,“0”表示第一個跳沿采樣、第二個跳沿輸出, “1”表示第一個跳沿輸出、第二個跳沿采樣;
? SSOE是選擇從設(shè)備的輸出使能位;
? LSBFE用以指定數(shù)據(jù)位的傳輸順序,“1”為低位優(yōu)先,“0”為高位優(yōu)先。
其余寄存器詳見課本。
4.1.5,軟件設(shè)計
? 采用標(biāo)準(zhǔn)SPI控制器
? 通常都提供了相應(yīng)的驅(qū)動和API,如SPIRead(Addr, *Value)、SPIWrite(Addr,Value)等→無需關(guān)注上述SPI協(xié)議的具體細節(jié);
? 也可采用處理器自帶的GPIO來模擬SPI主設(shè)備的接口
參考程序:
/*GPIO_SPI發(fā)送函數(shù)示例*/
int GPIO_SPI_Send ( unsigned char Data) {
unsigned char temdata;
int count = 0;
temdata= Data;
if (1 == (1 & ( temdata >>(7-count))) ) {//輸出命令字高位
SET GPIO_DO;
}else
CLR GPIO_DO;
SET GPIO_SCKL; //第一個時鐘拉高,上跳沿,通知從設(shè)備采樣
while (count < 8) {
count++;
if (1 == (1 & (temdata >>(7-count))) ) { //輸出命令字(7-count)位
SET GPIO_DO;
}else
CLR GPIO_DO;
CLR GPIO_SCKL; //時鐘拉低,下跳沿,主設(shè)備輸出
Nop; //空指令延時
SET GPIO_SCKL; //時鐘拉高,上跳沿,通知從設(shè)備采樣
}
CLR GPIO_SCKL; //時鐘拉低
}
4.2,I2C串行總線
4.2.1,概念
I2C(Inter-Integrated Circuit Bus,集成電路總線)
? Philips公司研制,主從式、可尋址、2線制近距離串行通信總線,連接微控制器和外圍器件的主從式串行通信總線。
? 兩條雙向線:Serial Data Line (SDA) 和Serial Clock (SCL);均為OD門
? SCL:上升沿、下降沿傳輸數(shù)據(jù);(邊沿觸發(fā))
? SDA:雙向數(shù)據(jù)線。
? 通信速度
? 100kbps(普通模式)、400kbps(快速模式)、1kbps(增強快速模式)、3.4kbps(高速模式);
? 單工傳輸?shù)某咚倌J剑║Fm),其位速率可達5Mbps;
? 一般情況下,通信距離為幾米到十幾米;低傳輸速率時,通信距離可達數(shù)十米乃至數(shù)百米。
多主的主從式通信總線,2線制
? 所有外圍器件都具有一個7位或10位的“從器件專用地址碼”;
? 主控器件通過地址碼建立多機通信的機制,無需片選線(SPI需要片選);
? 基于總線仲裁機制,同一時刻只能有一個主端。
SDA、SCL為漏極開路結(jié)構(gòu)(OD)
→必須接上拉電阻才能正常工作,阻值通??蔀榧s1.8kΩ, 4.7kΩ和10kΩ 。(漏極開路,輸出有時候為浮動狀態(tài))
電阻越大,總線速率越慢
基于I2C總線的器件連接邏輯 示例
4.2.2,基本通信過程
? 主機發(fā)出開始信號(S);
? 主機接著送出1字節(jié)的從機地址信息,其中最低位為讀寫控制碼(1為讀、0為 寫),高7位為從機器件地址代碼;
? 從機發(fā)出應(yīng)答信號;
? 主機開始發(fā)送數(shù)據(jù),每發(fā)完一字節(jié)后,從機發(fā)應(yīng)答信號給主機;
? 主機發(fā)出停止信號。
4.2.3,I2C串行總線仲裁原理
? 多個設(shè)備同時發(fā)送數(shù)據(jù)時,總線上會產(chǎn)生沖突!
哪個設(shè)備先發(fā)現(xiàn)自己的數(shù)據(jù)和總線不一致,則先退出總線競爭。如下圖中,設(shè)備1 先退出。
注意
? 完成讀/寫操作或總線收發(fā)異常時,主設(shè)備發(fā)送重啟動信號,重新設(shè)定從設(shè)備地址和讀/寫信號,繼續(xù)如上所述的應(yīng)答式數(shù)據(jù)通信過程;
? 當(dāng)SCL被某些未知因素或事件限定在低電平之后,需要觸發(fā)硬件復(fù)位信號;
? 若I2C設(shè)備沒有硬件復(fù)位輸入,那么就需要關(guān)閉總線電源進行上電復(fù)位。
4.2.4,橋接SPI與I2C:
SPI與I2C屬于不同主線,不可直接互連。所以可以通過橋接設(shè)備連接,橋接設(shè)備左邊為SPI的帶時鐘的同步的協(xié)議和電氣特性,右邊為 I2C 的電氣特性和協(xié)議,中間的橋設(shè)備進行邏輯轉(zhuǎn)換。
4.2.5,總結(jié)
I2C 是近距離連接嵌入式處理器與外設(shè)的可尋址、主從式串行總線;具有上拉電阻設(shè)計,總線仲裁機制;
4.3,UART與USART接口
4.3.1,UART(通用異步通信收發(fā)器/SCI串行通訊接口)
?用于異步通信,可實現(xiàn)全雙工收發(fā);
? 兩個器件無需共享同一個時鐘信號就能進行通信;
? 數(shù)據(jù)收發(fā)單位是幀;
? 工作模式:中斷方式和DMA工作方式。
數(shù)據(jù)通信設(shè)備和終端設(shè)備連接如右邊的圖所示,除了RX和TX,還需要連接信號線
? UART重要的研究對象為一組寄存器
UART: 收發(fā)雙方要設(shè)定相同的數(shù)據(jù)格式 ★
根據(jù)不同要求來設(shè)定數(shù)據(jù)位長度,如7位、8位的ASCII碼以及9位的多站通信數(shù)據(jù)。在多站/多機通信系統(tǒng)中,8位數(shù)據(jù)位之后的奇偶校驗位被用于區(qū)分所傳輸?shù)氖堑刂愤€是數(shù)據(jù),“1”表示從機地址,“0”為數(shù)據(jù)。
UART: 收發(fā)雙方要設(shè)定相同的數(shù)據(jù)速率 ★
? 接收方必須設(shè)置與發(fā)送方一致的波特率→匹配的傳輸速度。
在第9個時鐘信號的上跳沿對Rx上的信號進行采樣。也可以在第8、9、10個時鐘信號的上跳沿進行采樣,根據(jù)三個采樣數(shù)據(jù)中的多數(shù)狀態(tài)來判斷邏輯高低,這是一種更為可靠、但開銷較大的方式。
? UART與EIA RS-232、RS-422、RS-485
? UART規(guī)范主要定義了TTL電平的可配置通信數(shù)據(jù)格式以及通信速率、異步采樣機制;
? 根據(jù)不同類型和距離的外設(shè)連接需求,還可以對物理層進行定制和擴展,典型的如RS-232、RS-422、RS-485等。
RS-232是一種由美國電子工業(yè)聯(lián)盟(EIA)發(fā)布的單端傳輸?shù)拇袛?shù)據(jù)通信接口標(biāo)準(zhǔn),RS是推薦標(biāo)準(zhǔn)的英文縮寫。
RS-232優(yōu)點:可以簡單地實現(xiàn)與外部設(shè)備的串行雙工通信;缺點非常明顯:由于采用單端通信模式,接口信號電平高、線路抗干擾能力差,只適合于近距離、較低速度的數(shù)據(jù)通信。
EIA/TIA-422是EIA/TIA的“平衡電壓數(shù)字接口電路的電氣特性”標(biāo)準(zhǔn)
? EIA/TIA-422串行通信兼容UART的數(shù)據(jù)幀標(biāo)準(zhǔn);
? 定義了差分信號電氣特性;
? 支持一主多從的多站通信模式。
補充概念:差分信號與差分傳輸
差分傳輸是一種信號傳輸?shù)募夹g(shù),在兩根線上都傳輸同一信號;這兩個信號的振幅相同,相位相反;也稱平衡傳輸方式
在這兩根線上的傳輸?shù)男盘柧褪?strong>差分信號;
信號接收端比較這兩個電壓的差值來判斷發(fā)送端發(fā)送的是邏輯0還是邏輯1;
設(shè)計電路時,差分走線必須是等長、等寬、緊密靠近且在同一層面的兩根線。
正負信號相減可以消去噪聲信號。
上圖中Rt即為接收端終端電阻。加終端電阻后可以吸收掉信號多余的能量,避免在線路上反射造成噪聲。信號特性比沒加前好很多,由下圖可以看出。
RS-485是“用于平衡數(shù)字多點系統(tǒng)的發(fā)送器、接收器電氣特性”標(biāo)準(zhǔn)
? RS-485定義了物理層電氣信號特性,與RS-422的邏輯表示形式相似;
? RS-485的電氣信號特性涵蓋了RS-422,因此RS-485設(shè)備可用于大多數(shù)RS-422系統(tǒng)中;
? 不同點
? RS-485的信號電壓范圍更小,線路兩端都要接與介質(zhì)特征阻抗匹配的終端電阻,驅(qū)動器能力更強,可以驅(qū)動至少32個接收器;
? 采用2根差分信號線以AA、BB的方式來連接兩個RS-485設(shè)備,是半雙工通信方式;
4.3.2,USART(通用同步/異步收發(fā)器)
? 在UART基礎(chǔ)上增加了同步機制的、一種可被設(shè)置為同步、異步通信模式的全雙工串行通信接口;
? 同步模式下,發(fā)送器時鐘引腳SCLK輸出與SPI主模式相似的數(shù)據(jù)傳輸時鐘,相位和極性可通過寄存器來設(shè)置。
? USART與UART的區(qū)別
? 位流同步機制不同:同步與異步
? 可支持的協(xié)議數(shù)量不同
? USART則更為復(fù)雜,不但兼容UART,還可以傳輸多種不同協(xié)議的數(shù)據(jù),如IrDA、LIN總線、智能卡、Modbus等。
? 支持的外設(shè)能力有所不同
? USART常用于系統(tǒng)正常運行、高功耗時的串行數(shù)據(jù)通信;
? 當(dāng)系統(tǒng)進入休眠等低功耗模式時則采用基于UART的低速通信接口。
4.4,GPIO與GPIB
4.4.1,GPIO(General Purpose Input Output,通用IO)
? 嵌入式處理器除采集、傳輸、處理數(shù)據(jù)外,還需進行大量開關(guān)型外部組件控制,如LED、繼電器開關(guān);
→專用I/O可以滿足要求,但限制了處理器的功能和使用范圍;
→靈活性差,且接口多時芯片引腳增加;
→ 應(yīng)盡量增強I/O接口的通用性!
? GPIO,區(qū)別于其他專用I/O的、可適用多種輸入/輸出要求的I/O接口;
? 允許用戶根據(jù)不同的功能需求,通過寄存器組,進行I/O功能和特性的動態(tài)配置和管理。
? 如何學(xué)習(xí)GPIO
? 掌握各個I/O端口的特性及其寄存器組;
? 就輸入、輸出特性而言,GPIO的引腳可以有浮空、上拉輸入、下拉輸入、模擬輸入以及開漏輸出、可配置的上拉/下拉推挽輸出等模式可供選擇;
? 接口至少會提供 GPIO控制寄存器 和GPIO數(shù)據(jù)寄存器 ,控制寄存器用以控制數(shù)據(jù)寄存器中各位為輸入、輸出或其他功能狀態(tài);
? 功能強大的嵌入式處理器一般還會提供 置位/復(fù)位寄存器、上拉/下拉電阻配置寄存器以及 鎖存寄存器等,使電路設(shè)計更為靈活和方便。
GPIO接口示例:
? STM32 L1系列 STM32L162ZD嵌入式處理器
? 在AHB系統(tǒng)總線上提供了115個GPIO引腳;
? GPIOH對應(yīng)的PH接口共3位,GPIOA~GPIOG對應(yīng)的 PA-PG 七個接口都為16位;
? 每個GPIO引腳都可以通過軟件配置為特定模式,如推挽或開漏輸出、使用上拉或下拉的輸入、不使用上拉和下拉的輸入以及外設(shè)復(fù)用功能等;
? 大多數(shù)GPIO引腳共享實現(xiàn)數(shù)字、模擬的復(fù)用
注意:不同的芯片,不同的GPIO的特性都是有所區(qū)別的,都必須了解特定的GPIO再去使用。
? 擴展方法
? 若處理器提供的GPIO數(shù)量不夠用,還可以采用TI的TCA6418E(I2C接口,18路GPIO)等器件進行擴展;
? 可采用MAX7319~ MAX7329等8端口/16端口IO集成電路器件以及驅(qū)動器等對系統(tǒng)電路的IO接口進行擴展;
? 不同處理器的GPIO實現(xiàn)和特性存在差異,同一處理器的GPIO特性也可能不同。
4.4.2,GPIB
GPIB(General-Purpose Interface Bus,通用接口總線)
? 設(shè)備和計算裝置間的短程通信總線規(guī)范,IEEE-488標(biāo)準(zhǔn);
? 1960年代末期,為了把計算機自動控制技術(shù)融入電子測量之中而創(chuàng)建,最初為HP-IB(Hewlett-Packard Interface Bus)規(guī)范;
? 大多數(shù)臺式儀器是通過GPIB總線以及GPIB接口與計算機相連;
? 一條總線互相連接不超過15臺裝置,組成一個自動測試系統(tǒng);
? 采用并行比特(位)、串行字節(jié)(位組)雙向異步數(shù)據(jù)傳輸方式;
? 總線上傳輸?shù)南⒉捎秘撨壿嫞旱碗娖剑ā?0.8V)為邏輯“1”,高電平(≥+2.0V)為邏輯“0”;
? 地址容量
單字節(jié)地址:31個發(fā)送地址,31個接收地址;
雙字節(jié)地址:961個發(fā)送地址,961個接收地址。
? 部分GPIB程控設(shè)備
4.4.3,總結(jié)
? GPIO的優(yōu)勢在于靈活的可配置性,提高了芯片引腳的通用性!
4.5,本章小結(jié)
5,Boot Loader
? 駐留在嵌入式處理器的片上ROM或板上Flash存儲區(qū)保留分區(qū)中的、與具體處理器和硬件特性密切相關(guān)的一段可啟動代碼;
? 應(yīng)具有最小功能要求,即:至少驅(qū)動一個外部的數(shù)據(jù)通信接口,且應(yīng)該提供至少一種讀、寫、擦除Flash的方法;
? 不含應(yīng)用功能,但具備與外界的通信能力,可以支持UART、I2C、SPI、Ethernet或CAN等通信接口和協(xié)議;
? 應(yīng)非常清楚系統(tǒng)內(nèi)存的映射模型。
→由特定I/O驅(qū)動、通信協(xié)議或協(xié)議棧、文件系統(tǒng)、用戶交互接口、內(nèi)存映射配置表以及操作系統(tǒng)引導(dǎo)組件等構(gòu)成。
5.1,示例:一個Boot Loader的運行過程
5.1.1,單階段運行模式
?在對Boot Loader尋址或?qū)⑵浒嵋频?SRAM 特 定 位 置 之 后 , BootLoader將完成上述所有功能,并引導(dǎo)操作系統(tǒng)或用戶應(yīng)用程序執(zhí)行;
?鑒于SRAM的存儲容量非常有限,單階段Boot Loader的代碼量通常較小,其功能也就比較簡單。
啟動代碼:初始化硬件+裝載復(fù)雜軟件+更好驅(qū)動硬件+裝載更復(fù)雜軟件
5.1.2,多階段模式
?第一階段代碼,為下一段啟動代碼準(zhǔn)備環(huán)境,并加載、調(diào)度該代碼執(zhí)行;
?第二階段代碼,為下一段代碼準(zhǔn)備環(huán)境并加載、調(diào)度執(zhí)行,以此類推,直至操作系統(tǒng)或用戶程序被啟動。
?常見“Stage1+Stage2”模式。
啟動過程
- 預(yù)啟動:通常是指片上ROM的執(zhí)行階段,為Boot Loader運行做準(zhǔn)備;
- 第一啟動階段(Stage1):Boot Loader執(zhí)行基本的初始化代碼,初始化堆棧、準(zhǔn)備RAM空間并將下一階段代碼拷貝到RAM特定位置后,跳轉(zhuǎn)至下一階段的代碼入口點執(zhí)行;
- 第二啟動階段(Stage2):Stage2的代碼在內(nèi)存中運行,由于不再有內(nèi)存容量限制,因而允許設(shè)計更為復(fù)雜的功能。
5.2,常見Boot Loader比較 ★ ★ ★
6,板級支持包BSP
6.1,概要
BSP為一個系統(tǒng)級的功能軟件包
?系統(tǒng)上電時對硬件進行初始化;
?為操作系統(tǒng)提供訪問硬件所需的驅(qū)動程序、中斷服務(wù)程序;
?集成的硬件相關(guān)/無關(guān)的操作系統(tǒng)所需的引導(dǎo)模塊。
6.2,BSP基本功能
a. Boot Monitor,描述可用的系統(tǒng)啟動資源及方法,如Ethernet、UART、SCSI、ROM等組件;
b. 提供用于網(wǎng)絡(luò)啟動的相關(guān)支持,如BOOTP、Proxy-ARP等;
c. 默認的RAM大小,可配置的內(nèi)存映射參數(shù);
d. Cache功能支持;
e. Flash和ROM存儲器配置,包括ROM的創(chuàng)建和安裝方式,F(xiàn)lash是否可以固化、如何固化;
f. 系統(tǒng)時鐘與定時器支持,描述CPU速度和定時器的比例關(guān)系;
g. 設(shè)備支持,芯片驅(qū)動、板級設(shè)備驅(qū)動及其可支持的其他選項;
h. 內(nèi)存映射配置,提供詳細的局部總線以及所有擴展總線的內(nèi)存映射,允許通過配置文件(如VxWorks中為“config.h”)來配置地址;
i. 共享內(nèi)存機制,設(shè)定主總線及所提供的共享內(nèi)存支持類型、郵箱類型等;
j. 可配置的中斷參數(shù),提供一個基于優(yōu)先級和/或向量號的中斷、異常列表,具有BSP中使用的中斷及其例程;
k. 串口支持,設(shè)定所有串行接口的默認參數(shù);
l. SCSI接口配置,包括類型(SCSI-1、SCSI-2)及參數(shù);
m. Ethernet支持,為每一個以太網(wǎng)接口設(shè)定相應(yīng)的參數(shù),包括獲取IP地址;
n. 編譯規(guī)則,配置哪些預(yù)編譯對象將隨該BSP發(fā)布,設(shè)定待生成系統(tǒng)內(nèi)核的類型;
o. 配置目標(biāo)機、服務(wù)器通信參數(shù),包括名稱以及支持的調(diào)試代理等。
6.3,BSP開發(fā)
從頭編寫一個BSP是非常復(fù)雜的工作,具有挑戰(zhàn)性!
? BSP的開發(fā)
?先要非常熟悉具體操作系統(tǒng)BSP的設(shè)計規(guī)范,即該BSP中文件、內(nèi)容的組織形式和格式;
?要很好地掌握目標(biāo)硬件的體系和參數(shù);
?開發(fā)的第一步是用匯編語言編寫將硬件初始化到確定狀態(tài);
?之后,采用基于高級語言的代碼為操作系統(tǒng)運行初始化環(huán)境。
?嵌入式操作系統(tǒng)、嵌入式處理器等廠商通常會提供BSP資源庫;
6.4,總結(jié)
7,嵌入式虛擬化技術(shù)
? 高性能嵌入式系統(tǒng)可支持
? 可靠性(故障傳播)、安全性(訪問權(quán)限)需求
? “零型”虛擬機:輕量的虛擬機
7.1,嵌入式虛擬化技術(shù)的約束與限制
a. 體積約束: 嵌入式虛擬機監(jiān)控程序應(yīng)盡可能地小,通常II型虛擬機監(jiān)控程序可達數(shù)千兆字節(jié),I型虛擬機監(jiān)控程序約數(shù)百兆字節(jié)。
b. 效率約束: 虛擬機監(jiān)控程序的運行應(yīng)不過多地消耗嵌入式系統(tǒng)的資源,應(yīng)具有極高的內(nèi)存使用率,以及很小的規(guī)模。
c. 安全約束: 虛擬機監(jiān)控程序自身應(yīng)具有極高的安全性,并能為上層虛擬機和應(yīng)用提供安全性支持。
d. 通信約束: 為多個虛擬機上的應(yīng)用提供具有不同權(quán)限的通信機制,實現(xiàn)多個客戶操作系統(tǒng)及用戶程序之間的安全通信。
e. 隔離約束: 保證不同虛擬機的軟件在隔離的環(huán)境中共存,軟件之間相互獨立,互不影響。
f. 實時性約束: 對于部分應(yīng)用,虛擬機監(jiān)控程序必須具有支持實時任務(wù)運行的資源管理和調(diào)度功能。
7.2,示例:Wind River虛擬機
文章來源:http://www.zghlxwxcb.cn/news/detail-430446.html
注:以上內(nèi)容全為總結(jié)慕課而來,僅用于個人學(xué)習(xí)總結(jié)。慕課鏈接為: 嵌入式系統(tǒng)—張凱龍. 如有侵權(quán),請聯(lián)系刪除。文章來源地址http://www.zghlxwxcb.cn/news/detail-430446.html
到了這里,關(guān)于嵌入式硬件基礎(chǔ)知識匯總<附帶與硬件密切相關(guān)的軟件介紹>的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!