Linux嵌入式開發入門(二)——快速看懂原理圖,對接軟件開發

這里只是為了看懂原理圖,不牽扯具體的計算等內容(比如電路電流多少啊,三極管放大等等)。因為對于嵌入式開發人員來說,只需要明白不同的電平對于開發板的結果即可,不需要知道具體電路的情況。

微機原理:側重于講計算機結構
數字電子技術基礎:側重于門電路

  • GPIO和門電路
    • GPIO類
      GPIO:通用的輸入輸出端口,可以通過輸入來測量外界的電平情況;可以通過輸出來控制電路

只要上面的2440芯片對應的引腳應該為輸出引腳。如果對應的輸出引腳輸出3.3V的高電平LED就會被點亮;如果輸出引腳輸出低電平(0V),那么LED則不亮


以上的線路很簡單,開關閉合線路接通有電流;開關打開,線路不導通,無電流。
如果在開關打開的前提下,A點使用萬用表測量,電壓應該為3.3v,因為,如果此時這里不為3.3V與之相連的上方為3.3V就會形成電流,與實際不符;如果此時開關閉合,那么該線路是接通狀態,應該有電流流過,那么此時,A點的電流應該為0V。

那么如果把萬用表換成2440芯片會得到。

那么此時2440對應的引腳應該為輸入引腳,通過讀取該引腳對應的寄存器中的數據,就可以知道該引腳為高電平還是低電平。如果讀到了高電平,說明此處為3.3V電路沒有接通了如果讀到了低電平,說此處為0V,說明電路接通了。以此可以判斷開關的開閉情況。

對于現在的芯片的引腳來說,既可以作為輸入引腳,同樣也可以作為輸出引腳。可以通過配置其中參數的某一位(具體參照手冊)的方法來改變其功能。
輸出引腳,寫值到某個寄存器中
輸入引腳,讀某個寄存器中的值。

實際原理圖

LED處的原理圖
芯片引腳的原理圖

由以上兩幅圖可以看出,LED由某一個引腳引入到芯片中。就可以找到對應的芯片中的引腳。通過該芯片手冊就可以查到該如何操作。
由LED的原理圖可以看出,三個控制LED的引腳的功能都不是為了檢測電壓,那么都是輸出引腳,也就是如果輸出了低電平,則LED被點亮;輸出高電平,則燈會熄滅。

在芯片手冊中查詢該引腳的信息


查看到pin name為EINT3/GPF3 的引腳的pin number為M15


可以看到該引腳既可以作為輸入引腳也可以作為輸出引腳

可以在I/O port章節中看到,這一組引腳的應該如何配置

那么如果將GPF的寄存器配置為EINT[4]時,則該引腳會成為中斷引腳


中斷引腳舉例

對于假設2440外連接一個DM9000的網卡,如果網卡收到了數據,如何來通知2440芯片呢?如果定時讓2440去查詢DM9000,是一個非常耗費資源的工作,那么這時候,如果把對應的引腳設置為中斷引腳,只要DM9000獲得了數據,就把想2440的中斷引腳輸出高電平,2440得到高電平后,向CPU發送中斷信號,以執行相應的操作即可。
中斷引腳,有輸入功能,可以中斷CPU(同樣可以通過GPFDAT來獲得數據已得到是否中斷,但是比較耗費資源)

GPFCON就是配置GPF引腳的內存地址為0x56000050

參照接下面的表格可以看出,對于GPF4來說,需要操作8、9兩位來控制該引腳的輸入輸出功能。具體的設置情:
00 = Input 01 = Output 10 = EINT[4] 11 = Reserved

那么如何設置該引腳輸出低電平來點亮LED呢?
在GPFDAT中可以看到數據配置信息的地址為:0x56000054

GPFDAT配置

可以看到,如果配置為輸入引腳,那么對應的位中的數據就是讀取到的數據,也就是讀到1為高電平,讀到0為低電平。如果配置為輸出引腳,如果寫入1為輸出高電平,如果寫入0則輸出低電平。

在手冊中不難看出,還有一個GPFUP


GPFUP

這個是上拉電阻的意思,至于上拉電阻的問題,還需要看看三極管。

NPN三極管

對于NPN三極管來說,如果此時2440芯片的引腳為輸出引腳,并且輸出的為低電平,那么此時,三極管處于不導通的狀態。但是對于三極管另外一個管腳來說,狀態未知,所以,在此管腳上接通一個電阻,以方便得到他的狀態。
那么此時,如果輸出一個低電平,三極管不導通,那么,此時的輸入管腳會得到一個高電平。而反之,如果輸出為高電平,那么輸入會得到一個低電平。所以輸出和輸入為反相的情況。

那么引腳的上拉功能是什么呢?可以假設在芯片內部存在一個上拉電阻,當寄存器設置為1則該電阻不通電。



假設這樣的電路,其中上拉電阻是位于芯片內部的,對應的引腳是輸入引腳,如果上拉電阻設置為斷開,此時開關也不打開,對于中間一段電路來說是“懸空的”,無法獲取其中的電路。
如果此時設置了上拉功能,就出現了圖上的情況,是一個完整的電路,也就可以測量出芯片外的電平情況。如果獲取到的信息為高電平說明開關未被按下;如果獲取低電平,說明此時形成了回路,開關被按下。

上拉電阻的作用,對于輸入引腳,可以用它來確定電平狀態。

還存在一種下拉電阻的情況

PNP三極管和上拉電阻

對于PNP類型的三極管來說,如果2440芯片輸出低電平,那么此時三極管處于導通的狀態,此時輸入能夠得到一個高電平;那么反之,如果輸出是一個高電平,三極管不導通,那么此時輸入會得到低電平。

上拉電阻和下拉電阻的作用主要是為了,確定“懸空的引腳”的確定的狀態。

  • 門電路
    • 非門


      非門

      對于非門來說,如果2440輸出高電平,在B端會得到低電平;反之,2440輸出高電平,在B端會得到低電平

    • 與門


      與門

對于與門是對A1和A2做與運算B = A1 & A2,如果A1和A2中只要任意一個或者同時輸出了低電平,那么B會輸出低電平;如果A1、A2同時輸出高電平,在B會得到高電平

- 或門

或門

對于或門來說,就是對A1和A2做或運算,B = A1 || A2,當A1、A2中,只要輸出至少一個高電平,對于B來說都會得到高電平。如果A1、A2同時輸出低電平,那么B會得到低電平

 - 與非門
與非門
- 或非門
或非門
  • 協議類
    協議類遵循的原則:
    1.雙方約定的信號協議(互相可以理解彼此的語言)
    2.雙方滿足是時序要求(語速別人可以理解)


    開發板和PC串口連接示意圖
    • UART串口(Universal Async Receive Transmit )
      • UART如何傳輸數據
        UART協議發送8bits的數據的時序圖
        1. 狀態1:空閑。空現階段為高電平
        • 狀態2:起始位。2440數據時,讓RxD0為低電平,并保持一段時間T;PC機接收到低電平,就得到了2440即將發送信息消息;需要保持的時間為事先約定好的T,沒辦法自動約定。
        • 狀態3:停止位:保持高電平至少一個時間T。

    我們不可能手動的發送電平,來和PC機通信。那么在2440上有一個串口控制器,我們只需要把串口控制器設置好,并且把數據發送給串口控制器即可,它會自動幫我們發送起始位、停止位、數據以及校驗位的電平。

2440芯片手冊中的UART寄存器部分

由手冊可以看到,2440芯片具有三個串口的寄存器。寄存器中數據的不同位分別表示了數據長度、停止位、校驗位等信息。

串口控制器數據段的寄存器

現在已經知道如何設置串口控制器的一些參數,以及數據應該放在哪個寄存器中。但是還有一個關鍵數據沒有設置,那就是發送數據的速度——波特率

波特率的寄存器設置

硬件上其實相對比較簡單,最少只需要三條線即可完成串口,一條發送、一條接受還有一條參考地線。

  • I2C
一款存儲芯片的I2C電路
可以連接多個I2C的芯片

每個I2C設備中一定有一個地址,只有地址相同的時候,才會響應。
I2C開始發送數據,開始會先發送7位數的從機地址[可以在芯片手冊里面獲取](pow(2, 7) 為128,也就是最多可以有128個外置設備被同一個芯片控制),第8位表示讀寫狀態。地址匹配完成會得到響應信號(ACK),說明這個設備是存在的。

I2C開始和停止的時序圖

開始信號:2440讓時鐘SCL保持高電平,數據SDA由高電平調轉到低電平
停止線號:2440讓式中SCL保持高電平,數據SDA由低電平跳轉到高電平。

I2C的總線響應

響應信號(ACK):接收器在接收到8位數據后,在第9個時鐘周期,拉低SDA為低電平。
也就是在第9個時鐘周期,2440會將SDA設置為接受引腳,有AT24C02來驅動,以檢測是否成功接收數據。

I2C數據的采集

SDA上傳輸的數據必須在SCL為高電平的期間保持穩定,外部設備會在SCL在高電平的時候讀取數據
SDA上的數據只能在SCL為低電平期間發生變化

不論是何種I2C芯片,start信號之后,都會發送設備地址,以及讀寫信息。之后的數據的含義需要具體查看對應芯片的手冊上面的規則。

我們也不需要控制I2C的引腳應該如何控制電平,我們只需要控制I2C控制器即可。

  • SPI
假設有這樣一款SPI的芯片
SPI和2440的接線

其中片選引腳需要在2440上找一個GPIO引腳,并設置為輸出引腳,以方便可以連接多個SPI設備。
與SPI的數據通信需要三條線,分別為時鐘、輸入、輸出。
對于上方圖示的SPI芯片來說,Vcc用于接電源來為SPI芯片供電。Vss接地。W接寫保護,如果為低電平則無法對芯片進行寫入。HOLD可以暫停任何操作,低電平有效。

對于硬件的接線,基本上是找到對應的引腳,將其連接在一起即可。數據傳輸,需要查看對應芯片的協議。

2440芯片關于SPI所支持的四種通信方式
SPI芯片手冊中的讀取時序
SPI芯片手冊中的寫入時序圖

有芯片手冊可以得到,開始8位被稱為指令,其中包括9位地址的最高位,以及是寫還是讀。第二個八位數據是SPI芯片的地址。之后才是數據的傳輸部分。

  • Nand Flash
Nand Flash芯片的接線原理圖
芯片手冊對引腳功能的說明

有說明可以知道,I/O0~I/O7的八個引腳可以用于傳輸數據、地址、命令(讀寫擦除等)。但是芯片如何才能區分這幾個引腳傳入的數據到底是地址、命令還是數據呢?
在芯片上還有CLE引腳,如果為高電平,表示這8個引腳所傳輸的為命令。ALE為高電平表示,8個引腳所傳輸的數據為內存地址。兩者都是低電平是,那么說明這8個引腳上傳輸的是數據信息。RE為低電平是,說明信號是從2440到Nand flash,WE為低電平說明,是從Nand Flash讀取信息。其中WP為寫保護引腳,為低電平是為寫保護狀態。R/B為狀態引腳,通過該引腳入股哦為高電平說明Nand已經完畢,可以操作,如果為低電平,說芯片還在工作,處于繁忙的狀態

發送命令操作的時序圖
發送地址的時序圖
向Nand Flash中寫數據的時序圖
讀取數據的時序圖

2440在發送脈沖的階段必須有一定的時間要求,否則,可能Nand Flash不能反應過來。需要查詢手冊中的時序要求。

設置2440的Nand Flash控制器中的寄存器,可以使得2440發送的控制Nand Flash的信號滿足要求
如何設置時序:

  1. 看2440手冊,有哪些參數可以設置
  • 看Nand Flash手冊確定取值

  • 進行計算,保證發送的信號符合Nand Flash的要求。

    • LCD
原理圖

協議類的的學習思路

  1. 看原理圖:2440和外接芯片引腳對接即可
  • 弄清楚接口的協議:數據如何傳輸,各引腳如何配合
  • 設置時序:2440發出的各個信號,要讓外接芯片可以反應得過來
    • 看2440手冊弄清楚能設置哪些參數以及這些參數的含義(以CLK時鐘為單位)
    • 看外設芯片手冊,弄清楚這些參數的取值范圍(以秒為單位)
    • 根據之前的兩條,計算2440寄存器的取值(進行秒和CLK之間的換算)需要計算每個信號何時發出以及發出該信號需要保持的時間
  • 類似內存的接口類(RAM-like)
    首先先看看關于幾個芯片的的原理圖
內存芯片的原理圖
Nor Flash的原理圖
網卡的原理圖

有這三幅圖可以看出來,他們都有大量的地址線和數據線。

抽象圖

那么可以抽象出這樣一幅圖,這三個芯片上都有一組地址線通往2440芯片,同時也有一組數據線通往2440芯片。那么,2440在和SDRAM通信時,如何避免NOR FLASH和網卡不會造成干擾呢?
在這些芯片和2440連接的時候,每個芯片還都有一個獨立的片選芯片/CSx (Chip Selected)。CS引腳是低電平有效,那么只需要將需要被選中的芯片的對應片選引腳輸出低電平。

其中兩塊SDRAM芯片使用同一個片選線,那么此時可以一次性選中兩塊芯片,每次讀取32位數據時,每個芯片可以提供16位數據。

我們不需要手工設置片選引腳。在2440中有一個內存控制器和CPU。CPU發出的地址信號發送給地址控制器,由地址控制器根據收到的內存地址來決定哪個片選引腳輸出低電平。

內存控制器的內存范圍

有圖上可以看出,如果是NOR啟動的情況下,地址在0到0x8000000的范圍以內(128M),內存控制器就會讓nGCS0被選中,以此類推。
如果不是NOR啟動的情況下,那么則無法選中nCGS0。
每一個片選引腳對應的地址范圍成為一個Bank,對應這個芯片來說,每個Bank為128M ,其中128M是2的27次方(M為2的10次方,128為2的7次方),那么說明,數據的傳送需要使用27根地址線,那么范圍應該是ADDR0~ADDR26。
CPU為32位,不代表有32條地址線。CPU范圍A地址,地址總長度為32為,其中bit 0 ~ bit 26,會出現在地址線上,而剩下的bit 31 ~ bit 27,是有內存控制器來決定,實際是沒有用的。CPU實際是發出了32bit的地址,但是內存控制器只能控制26位。
比如64位CPU來說,實際理論可以支持的最大內存大小為2^64,相當于16,777,216TB,而實際電腦的最大內存不會有這么大,他的最大可用內存由內存控制器來決定。而32位CPU支持的僅僅最大4GB的內存,一般內存控制器可以實現。所以,這就是對于32位的電腦來說,最大的內存支持為4GB;而64位CPU所支持的最大內存可能并不相同。

那么對于內存來說,很重要的功能就是讀寫。有了地址線、數據線,還有一個非常重要的就是如何來區分是讀取還是寫入。
所以在內存的芯片上一定是有某某使能的引腳。我們看到在芯片上有nOE和nWE的引腳,他們分別是Output Enable和Write Enable的引腳,并且是以低電平有效。那么他們就是輸出使能和寫入使能。對于芯片來說的輸出,對于2440來說就是讀取數據;反之對芯片來說寫入,對于2440來說就是寫入數據。

對于RAM-like芯片來說,通訊所需要的最少的線路

從原理圖可以看到,Nor Flash是從Addr1開始使用,沒有從Addr0開始使用。
不同位寬外設的接線方式
CPU認為一個地址對應一個字節;NOR認為一個地址對應兩個字節。(16位的NOR,一次只能讀取或寫入16位也就是兩個字節)
假設CPU訪問地址為3的一個字節,那么NOR會讀取到地址為2~3的數據。再由內存控制器,從兩個自己的內存里面取出自己需要的數據。
如果訪問地址2的一個字節,NOR會取出2~3的內存地址的數據。內存控制器,再由其中取出需要使用的數據。
由于1字節和2字節之間相差2倍,那么對于地址的最低位其實是無用的。所以ADDR0作為最后一位的地址是無用的。所以沒必要再連接這條線。

  • 對于開發版來說,其實就相當于一套小電腦,如果我們組裝過電腦,對與上面的組件一般都不會感覺陌生,就算沒有組裝過,至少也能說出一部分組件的名字。
    比如在主板上會有CPU、顯卡、內存、網卡等等組件。
    而對于嵌入式來說,尤其是Linux嵌入式來說,主要使用的是ARM芯片,也可以稱之為SOC(System on Chip),也就是對于一塊ARM芯片來說,其中集成了各種模塊,比如CPU、I2C、內存模塊、網卡模塊等等。在ARM芯片外面接上合適的元器件。
  • 地址統一編址空間
    對于2440芯片來說,可以直接使用內存地址來訪問SDRAM和NOR Flash。但是如果需要訪問Nand Flash,則需要通過Nand flash控制器來訪問(也就相當于SDRAM、NOR Flash和Nand Flash 控制器是2440的兒子,而Nand Flash則是Nand Flash控制器的兒子,也就是2440的孫子)。cpu可以看到NOR的0地址,但是不能直接看到Nand的零地址。Nand不屬于CPU的統一編址空間
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容