發(fā)布時(shí)間:2021-09-03 16:36:47來源:轉(zhuǎn)載
做嵌入式系統(tǒng)開發(fā),經(jīng)常要接觸硬件。做嵌入式開發(fā)對(duì)數(shù)字電路和模擬電路要有一定的了解。這樣才能深入的研究下去。下面我們簡單的介紹嵌入式開發(fā)中的一些硬件相關(guān)的概念。為讀者學(xué)習(xí)嵌入式知識(shí)出一份力。
片選(CS或EN)
片選信號(hào)對(duì)于外設(shè)芯片來講,就是一個(gè)(也是一根)通知信號(hào),告訴芯片“嘿,請(qǐng)開門,我要放些東西進(jìn)來,或是拿些東西走”,這里的東西只能是數(shù)據(jù),不可能是玉米棒什么的。那有個(gè)問題,這個(gè)信號(hào)源從哪里來呢?顯然,只能從處理器來。那是不是也是像總線那樣,每一個(gè)芯片都共用一根線連在一起呢?
如果這樣,可能處理器“一叫開門”所有的芯片都將“門”打開了。如果是處理器寫數(shù)據(jù),那可能所有的芯片都被寫入同樣的數(shù)據(jù)。而取數(shù)據(jù)時(shí),每個(gè)外設(shè)芯片都向外“扔”數(shù)據(jù),這一定會(huì)造成數(shù)據(jù)總線沖突,因?yàn)橛械男酒蚩偩€上“扔”1,有的則“扔”0,這種情況下處理器一定會(huì)“發(fā)瘋”的,因?yàn)樗恢缿?yīng)當(dāng)?shù)玫?還是0。
即然這樣,那顯然不能將所有的片選信號(hào)連在一起了,只能是各芯片的片選信號(hào)獨(dú)立。前面提到了地址總線,我們是采用一根地址線連一個(gè)外設(shè)芯片呢?還是采用其它的方法。如果采用一根地址線連一個(gè)外設(shè)芯片,那可能較多只能掛接32個(gè)芯片了,這顯然不行。
其實(shí),在現(xiàn)實(shí)中,是采用32位的數(shù)字來表示一個(gè)外設(shè)芯片的地址的,比如1可以表示芯片A,而6534可以表示另外一個(gè)芯片B,等等。由此看來,理論上我們可以表示2的32次方(4294967296)個(gè)設(shè)備,之所以說理論上,是因?yàn)橛械脑O(shè)備要占用大量的地址。即然這樣,那還有一個(gè)問題,如果將32位的地址總線轉(zhuǎn)換成芯片的一根片選信號(hào)呢?這需要引入譯碼(器)的概念。
譯碼(器)
譯碼器將一個(gè)數(shù)據(jù)轉(zhuǎn)換成一根信號(hào)線上的信號(hào),比如3/8譯碼器,可以將一個(gè)位寬是3位的數(shù)據(jù)轉(zhuǎn)換成8根(2的3次方)完全獨(dú)立的信號(hào)線,當(dāng)向數(shù)據(jù)側(cè)寫入二進(jìn)制的011時(shí),對(duì)應(yīng)的是8根線的第3根,當(dāng)輸入二進(jìn)制的111時(shí),對(duì)應(yīng)的是8根線中的較后一根。有了譯碼器,處理器的地址線就簡化了,只要32根地址線加上外面的譯碼器,就可以訪問大量的外設(shè)芯片了。外部設(shè)備的選擇問題,我們已經(jīng)解決了,現(xiàn)在還得回頭看一看數(shù)據(jù)總線。
在嵌入式系統(tǒng)中,所有芯片的數(shù)據(jù)總線可以理解成是直接相連的。之所以用了“可以理解”一詞,是因?yàn)闉榱颂岣呖偩€的負(fù)載能力,其中會(huì)加入總線驅(qū)動(dòng)器。為了理解,我們看一看我們生活中的自來水,比如,在北京理論上可能所有的水管是連在一起的,但中間可能為了提高水壓,存在很多小的水站用來增加供水壓力,而不可能全北京所有的自來水自接來自一個(gè)水廠。
即然所有的數(shù)據(jù)總線是連在一起的,那就可能會(huì)有問題。當(dāng)向外部設(shè)備寫數(shù)據(jù)時(shí),處理器先向地址總線輸送目標(biāo)外設(shè)的地址,地址譯碼器將其轉(zhuǎn)換成一根信號(hào)的片選信號(hào)送到了目標(biāo)外設(shè),目標(biāo)外設(shè)收到這一信號(hào)后,將“門”打開。接下來處理器將要傳送到外設(shè)的數(shù)據(jù)往數(shù)據(jù)總線上一放,由于只有目標(biāo)外設(shè)芯片打開了“門”,所以數(shù)據(jù)只會(huì)進(jìn)入到目標(biāo)外設(shè),而其它的外設(shè)什么也不會(huì)收到。很好!處理器向外寫數(shù)據(jù)應(yīng)當(dāng)沒有問題,我們接下來看一看讀。
讀的話,由于數(shù)據(jù)是從外設(shè)輸送到處理器的,盡管我們采用和寫一樣的方法打開目標(biāo)外設(shè)的“門”,但此時(shí),其它的外設(shè)也在數(shù)據(jù)總線上,它們有可能處于1也可能處于0,是不是會(huì)影響處理器讀取目標(biāo)外設(shè)的數(shù)據(jù)呢?結(jié)果當(dāng)然不會(huì),但我們得引入另一個(gè)概念:高阻態(tài)。
高阻態(tài)
很顯然,當(dāng)處理器從目標(biāo)外設(shè)讀數(shù)據(jù)時(shí),我們希望其它沒有被選上的芯片的數(shù)據(jù)總線不會(huì)對(duì)目標(biāo)外設(shè)所要傳送的數(shù)據(jù)有影響,那怎么辦呢?實(shí)際上,當(dāng)芯片沒有被選中時(shí),其數(shù)據(jù)總線都處于高阻態(tài)。
所謂的高阻態(tài),我們可以理解成這一管腳在外設(shè)芯片內(nèi)部是斷開的,如此一來,顯然不會(huì)對(duì)處理器從目標(biāo)外設(shè)讀取數(shù)據(jù)造成任何的影響了。我們說當(dāng)一個(gè)芯片沒有被選中或是沒有被使能時(shí),其數(shù)據(jù)總線一定是處于高阻態(tài)的。前面用了“門”的開和關(guān)來打比方,那“門”是指什么呢?是指外設(shè)的數(shù)據(jù)總線,片選信號(hào)的作用就是控制將外設(shè)的數(shù)據(jù)總線與處理器的數(shù)據(jù)總線相連或是斷開。
驅(qū)動(dòng)
總線上的數(shù)據(jù)是誰放上去的我們就說誰是那一時(shí)刻的驅(qū)動(dòng)者。也就是說,當(dāng)處理器向外設(shè)寫數(shù)據(jù)時(shí),它是在驅(qū)動(dòng)數(shù)據(jù)總線的,而當(dāng)處理器從目標(biāo)外設(shè)讀取數(shù)據(jù)時(shí),目標(biāo)外設(shè)是在驅(qū)動(dòng)數(shù)據(jù)總線的。對(duì)于地址總線,因?yàn)橹豢赡軓奶幚砥飨蚰繕?biāo)外設(shè)寫,所以地址總線永遠(yuǎn)是由處理器驅(qū)動(dòng)的。當(dāng)一個(gè)芯片沒有被選中時(shí),我們說它并不驅(qū)動(dòng)數(shù)據(jù)總線。
更多培訓(xùn)課程: 朝陽區(qū)嵌入式 更多學(xué)校信息: 北京朝陽豐寶恒大廈達(dá)內(nèi)IT教育培訓(xùn) 咨詢電話: