這里只是為了看懂原理圖尤慰,不牽扯具體的計算等內容(比如電路電流多少啊,三極管放大等等)雷蹂。因為對于嵌入式開發(fā)人員來說伟端,只需要明白不同的電平對于開發(fā)板的結果即可,不需要知道具體電路的情況匪煌。
微機原理:側重于講計算機結構
數字電子技術基礎:側重于門電路
- GPIO和門電路
- GPIO類
GPIO:通用的輸入輸出端口责蝠,可以通過輸入來測量外界的電平情況;可以通過輸出來控制電路
- GPIO類
只要上面的2440芯片對應的引腳應該為輸出引腳萎庭。如果對應的輸出引腳輸出3.3V的高電平LED就會被點亮玛歌;如果輸出引腳輸出低電平(0V),那么LED則不亮
以上的線路很簡單擎椰,開關閉合線路接通有電流支子;開關打開,線路不導通达舒,無電流值朋。
如果在開關打開的前提下叹侄,A點使用萬用表測量,電壓應該為3.3v昨登,因為趾代,如果此時這里不為3.3V與之相連的上方為3.3V就會形成電流,與實際不符丰辣;如果此時開關閉合撒强,那么該線路是接通狀態(tài),應該有電流流過笙什,那么此時飘哨,A點的電流應該為0V。
那么如果把萬用表換成2440芯片會得到琐凭。
那么此時2440對應的引腳應該為輸入引腳芽隆,通過讀取該引腳對應的寄存器中的數據,就可以知道該引腳為高電平還是低電平统屈。如果讀到了高電平胚吁,說明此處為3.3V電路沒有接通了如果讀到了低電平,說此處為0V愁憔,說明電路接通了腕扶。以此可以判斷開關的開閉情況。
對于現在的芯片的引腳來說吨掌,既可以作為輸入引腳蕉毯,同樣也可以作為輸出引腳∷祭纾可以通過配置其中參數的某一位(具體參照手冊)的方法來改變其功能。
輸出引腳进肯,寫值到某個寄存器中
輸入引腳激蹲,讀某個寄存器中的值。
實際原理圖
由以上兩幅圖可以看出江掩,LED由某一個引腳引入到芯片中学辱。就可以找到對應的芯片中的引腳。通過該芯片手冊就可以查到該如何操作环形。
由LED的原理圖可以看出策泣,三個控制LED的引腳的功能都不是為了檢測電壓,那么都是輸出引腳抬吟,也就是如果輸出了低電平萨咕,則LED被點亮;輸出高電平火本,則燈會熄滅危队。
在芯片手冊中查詢該引腳的信息
查看到pin name為EINT3/GPF3 的引腳的pin number為M15
可以看到該引腳既可以作為輸入引腳也可以作為輸出引腳
可以在I/O port章節(jié)中看到聪建,這一組引腳的應該如何配置
那么如果將GPF的寄存器配置為EINT[4]時,則該引腳會成為中斷引腳
對于假設2440外連接一個DM9000的網卡茫陆,如果網卡收到了數據金麸,如何來通知2440芯片呢?如果定時讓2440去查詢DM9000簿盅,是一個非常耗費資源的工作挥下,那么這時候,如果把對應的引腳設置為中斷引腳桨醋,只要DM9000獲得了數據棚瘟,就把想2440的中斷引腳輸出高電平,2440得到高電平后讨盒,向CPU發(fā)送中斷信號解取,以執(zhí)行相應的操作即可。
中斷引腳返顺,有輸入功能禀苦,可以中斷CPU(同樣可以通過GPFDAT來獲得數據已得到是否中斷,但是比較耗費資源)
GPFCON就是配置GPF引腳的內存地址為0x56000050
參照接下面的表格可以看出遂鹊,對于GPF4來說振乏,需要操作8、9兩位來控制該引腳的輸入輸出功能秉扑。具體的設置情:
00 = Input 01 = Output 10 = EINT[4] 11 = Reserved
那么如何設置該引腳輸出低電平來點亮LED呢慧邮?
在GPFDAT中可以看到數據配置信息的地址為:0x56000054
可以看到,如果配置為輸入引腳舟陆,那么對應的位中的數據就是讀取到的數據误澳,也就是讀到1為高電平,讀到0為低電平秦躯。如果配置為輸出引腳忆谓,如果寫入1為輸出高電平,如果寫入0則輸出低電平踱承。
在手冊中不難看出倡缠,還有一個GPFUP
這個是上拉電阻的意思,至于上拉電阻的問題茎活,還需要看看三極管昙沦。
對于NPN三極管來說,如果此時2440芯片的引腳為輸出引腳载荔,并且輸出的為低電平盾饮,那么此時,三極管處于不導通的狀態(tài)。但是對于三極管另外一個管腳來說丐谋,狀態(tài)未知芍碧,所以,在此管腳上接通一個電阻号俐,以方便得到他的狀態(tài)泌豆。
那么此時,如果輸出一個低電平吏饿,三極管不導通踪危,那么,此時的輸入管腳會得到一個高電平猪落。而反之贞远,如果輸出為高電平,那么輸入會得到一個低電平笨忌。所以輸出和輸入為反相的情況蓝仲。
那么引腳的上拉功能是什么呢?可以假設在芯片內部存在一個上拉電阻官疲,當寄存器設置為1則該電阻不通電袱结。
假設這樣的電路,其中上拉電阻是位于芯片內部的途凫,對應的引腳是輸入引腳垢夹,如果上拉電阻設置為斷開,此時開關也不打開维费,對于中間一段電路來說是“懸空的”果元,無法獲取其中的電路。
如果此時設置了上拉功能犀盟,就出現了圖上的情況而晒,是一個完整的電路,也就可以測量出芯片外的電平情況阅畴。如果獲取到的信息為高電平說明開關未被按下倡怎;如果獲取低電平,說明此時形成了回路恶阴,開關被按下。
上拉電阻的作用豹障,對于輸入引腳冯事,可以用它來確定電平狀態(tài)。
還存在一種下拉電阻的情況
對于PNP類型的三極管來說血公,如果2440芯片輸出低電平昵仅,那么此時三極管處于導通的狀態(tài),此時輸入能夠得到一個高電平;那么反之摔笤,如果輸出是一個高電平够滑,三極管不導通,那么此時輸入會得到低電平吕世。
上拉電阻和下拉電阻的作用主要是為了彰触,確定“懸空的引腳”的確定的狀態(tài)。
- 門電路
-
非門
對于非門來說命辖,如果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.雙方滿足是時序要求(語速別人可以理解)
- UART串口(Universal Async Receive Transmit )
- UART如何傳輸數據
- 狀態(tài)1:空閑痢甘。空現階段為高電平
- 狀態(tài)2:起始位茉贡。2440數據時塞栅,讓RxD0為低電平,并保持一段時間T腔丧;PC機接收到低電平放椰,就得到了2440即將發(fā)送信息消息;需要保持的時間為事先約定好的T愉粤,沒辦法自動約定砾医。
- 狀態(tài)3:停止位:保持高電平至少一個時間T。
- UART如何傳輸數據
我們不可能手動的發(fā)送電平衣厘,來和PC機通信如蚜。那么在2440上有一個串口控制器压恒,我們只需要把串口控制器設置好,并且把數據發(fā)送給串口控制器即可错邦,它會自動幫我們發(fā)送起始位探赫、停止位、數據以及校驗位的電平撬呢。
- UART串口(Universal Async Receive Transmit )
由手冊可以看到伦吠,2440芯片具有三個串口的寄存器。寄存器中數據的不同位分別表示了數據長度倾芝、停止位讨勤、校驗位等信息。
現在已經知道如何設置串口控制器的一些參數潭千,以及數據應該放在哪個寄存器中。但是還有一個關鍵數據沒有設置借尿,那就是發(fā)送數據的速度——波特率
硬件上其實相對比較簡單刨晴,最少只需要三條線即可完成串口,一條發(fā)送路翻、一條接受還有一條參考地線狈癞。
- I2C
每個I2C設備中一定有一個地址,只有地址相同的時候茂契,才會響應蝶桶。
I2C開始發(fā)送數據,開始會先發(fā)送7位數的從機地址[可以在芯片手冊里面獲取](pow(2掉冶, 7) 為128真竖,也就是最多可以有128個外置設備被同一個芯片控制),第8位表示讀寫狀態(tài)厌小。地址匹配完成會得到響應信號(ACK)恢共,說明這個設備是存在的。
開始信號:2440讓時鐘SCL保持高電平璧亚,數據SDA由高電平調轉到低電平
停止線號:2440讓式中SCL保持高電平讨韭,數據SDA由低電平跳轉到高電平框都。
響應信號(ACK):接收器在接收到8位數據后咨察,在第9個時鐘周期常熙,拉低SDA為低電平嘲恍。
也就是在第9個時鐘周期,2440會將SDA設置為接受引腳蔫耽,有AT24C02來驅動越平,以檢測是否成功接收數據匈庭。
SDA上傳輸的數據必須在SCL為高電平的期間保持穩(wěn)定秉撇,外部設備會在SCL在高電平的時候讀取數據
SDA上的數據只能在SCL為低電平期間發(fā)生變化
不論是何種I2C芯片甜攀,start信號之后,都會發(fā)送設備地址琐馆,以及讀寫信息规阀。之后的數據的含義需要具體查看對應芯片的手冊上面的規(guī)則。
我們也不需要控制I2C的引腳應該如何控制電平瘦麸,我們只需要控制I2C控制器即可谁撼。
- SPI
其中片選引腳需要在2440上找一個GPIO引腳,并設置為輸出引腳滋饲,以方便可以連接多個SPI設備厉碟。
與SPI的數據通信需要三條線,分別為時鐘屠缭、輸入箍鼓、輸出。
對于上方圖示的SPI芯片來說呵曹,Vcc用于接電源來為SPI芯片供電款咖。Vss接地。W接寫保護奄喂,如果為低電平則無法對芯片進行寫入铐殃。HOLD可以暫停任何操作,低電平有效跨新。
對于硬件的接線富腊,基本上是找到對應的引腳,將其連接在一起即可域帐。數據傳輸赘被,需要查看對應芯片的協議。
有芯片手冊可以得到俯树,開始8位被稱為指令帘腹,其中包括9位地址的最高位,以及是寫還是讀许饿。第二個八位數據是SPI芯片的地址阳欲。之后才是數據的傳輸部分。
- Nand Flash
有說明可以知道陋率,I/O0~I/O7的八個引腳可以用于傳輸數據球化、地址、命令(讀寫擦除等)瓦糟。但是芯片如何才能區(qū)分這幾個引腳傳入的數據到底是地址筒愚、命令還是數據呢?
在芯片上還有CLE引腳菩浙,如果為高電平巢掺,表示這8個引腳所傳輸的為命令句伶。ALE為高電平表示,8個引腳所傳輸的數據為內存地址陆淀。兩者都是低電平是考余,那么說明這8個引腳上傳輸的是數據信息。RE為低電平是轧苫,說明信號是從2440到Nand flash楚堤,WE為低電平說明,是從Nand Flash讀取信息含懊。其中WP為寫保護引腳身冬,為低電平是為寫保護狀態(tài)。R/B為狀態(tài)引腳岔乔,通過該引腳入股哦為高電平說明Nand已經完畢酥筝,可以操作,如果為低電平雏门,說芯片還在工作樱哼,處于繁忙的狀態(tài)
2440在發(fā)送脈沖的階段必須有一定的時間要求,否則剿配,可能Nand Flash不能反應過來搅幅。需要查詢手冊中的時序要求。
設置2440的Nand Flash控制器中的寄存器呼胚,可以使得2440發(fā)送的控制Nand Flash的信號滿足要求
如何設置時序:
- 看2440手冊茄唐,有哪些參數可以設置
看Nand Flash手冊確定取值
-
進行計算,保證發(fā)送的信號符合Nand Flash的要求蝇更。
- LCD
協議類的的學習思路
- 看原理圖:2440和外接芯片引腳對接即可
- 弄清楚接口的協議:數據如何傳輸沪编,各引腳如何配合
- 設置時序:2440發(fā)出的各個信號,要讓外接芯片可以反應得過來
- 看2440手冊弄清楚能設置哪些參數以及這些參數的含義(以CLK時鐘為單位)
- 看外設芯片手冊年扩,弄清楚這些參數的取值范圍(以秒為單位)
- 根據之前的兩條蚁廓,計算2440寄存器的取值(進行秒和CLK之間的換算)需要計算每個信號何時發(fā)出以及發(fā)出該信號需要保持的時間
- 類似內存的接口類(RAM-like)
首先先看看關于幾個芯片的的原理圖
有這三幅圖可以看出來,他們都有大量的地址線和數據線厨幻。
那么可以抽象出這樣一幅圖相嵌,這三個芯片上都有一組地址線通往2440芯片,同時也有一組數據線通往2440芯片况脆。那么饭宾,2440在和SDRAM通信時,如何避免NOR FLASH和網卡不會造成干擾呢格了?
在這些芯片和2440連接的時候看铆,每個芯片還都有一個獨立的片選芯片/CSx (Chip Selected)。CS引腳是低電平有效盛末,那么只需要將需要被選中的芯片的對應片選引腳輸出低電平弹惦。
其中兩塊SDRAM芯片使用同一個片選線否淤,那么此時可以一次性選中兩塊芯片,每次讀取32位數據時棠隐,每個芯片可以提供16位數據叹括。
我們不需要手工設置片選引腳。在2440中有一個內存控制器和CPU宵荒。CPU發(fā)出的地址信號發(fā)送給地址控制器,由地址控制器根據收到的內存地址來決定哪個片選引腳輸出低電平净嘀。
有圖上可以看出报咳,如果是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實際是發(fā)出了32bit的地址贺待,但是內存控制器只能控制26位。
比如64位CPU來說零截,實際理論可以支持的最大內存大小為2^64麸塞,相當于16,777,216TB,而實際電腦的最大內存不會有這么大涧衙,他的最大可用內存由內存控制器來決定哪工。而32位CPU支持的僅僅最大4GB的內存奥此,一般內存控制器可以實現。所以雁比,這就是對于32位的電腦來說稚虎,最大的內存支持為4GB;而64位CPU所支持的最大內存可能并不相同偎捎。
那么對于內存來說蠢终,很重要的功能就是讀寫。有了地址線茴她、數據線寻拂,還有一個非常重要的就是如何來區(qū)分是讀取還是寫入。
所以在內存的芯片上一定是有某某使能的引腳丈牢。我們看到在芯片上有nOE和nWE的引腳祭钉,他們分別是Output Enable和Write Enable的引腳,并且是以低電平有效己沛。那么他們就是輸出使能和寫入使能慌核。對于芯片來說的輸出,對于2440來說就是讀取數據申尼;反之對芯片來說寫入垮卓,對于2440來說就是寫入數據。
從原理圖可以看到扒接,Nor Flash是從Addr1開始使用,沒有從Addr0開始使用们衙。
不同位寬外設的接線方式
CPU認為一個地址對應一個字節(jié)钾怔;NOR認為一個地址對應兩個字節(jié)。(16位的NOR蒙挑,一次只能讀取或寫入16位也就是兩個字節(jié))
假設CPU訪問地址為3的一個字節(jié)宗侦,那么NOR會讀取到地址為2~3的數據。再由內存控制器忆蚀,從兩個自己的內存里面取出自己需要的數據矾利。
如果訪問地址2的一個字節(jié),NOR會取出2~3的內存地址的數據馋袜。內存控制器男旗,再由其中取出需要使用的數據。
由于1字節(jié)和2字節(jié)之間相差2倍欣鳖,那么對于地址的最低位其實是無用的察皇。所以ADDR0作為最后一位的地址是無用的。所以沒必要再連接這條線。
- 對于開發(fā)版來說什荣,其實就相當于一套小電腦矾缓,如果我們組裝過電腦,對與上面的組件一般都不會感覺陌生稻爬,就算沒有組裝過嗜闻,至少也能說出一部分組件的名字。
比如在主板上會有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的統一編址空間