這一個星期認真學習了硬件原理圖的知識,做了一些筆記,方便以后查找。
硬件原理圖分為三類
1.管腳類(gpio)和門電路類
輸入輸出引腳,上拉電阻,三極管
與門,或門,非門
上拉電阻:正向標志作用,給懸空的引腳一個確定的狀態(tài)
三極管:反向三極管(gpio輸出高電平,NP兩端導通,被控制端導通,電壓為0)->NPN
正向三極管(gpio輸出低電平,PN兩端導通,被控制端導通,電壓為0)->PNP
2.協(xié)議類(1.雙方約定一定的信號傳輸協(xié)議 2.雙方滿足一定的時序要求),硬件協(xié)議就是硬件的工作流程一般只能通過硬件的芯片手冊看出來,比如nand flash只能通過具體的nand芯片的手冊如K9F2G08U0C手冊??此墓ぷ鲿r序圖看一看出部分硬件協(xié)議;
uart: (原理圖接線+硬件協(xié)議+軟件啟動流程)
波特率:一秒鐘可以傳輸多少位數(shù)據(jù)
原理圖:一般是cpu接出兩根線TXD0,RXD0分別為發(fā)線,收線,但一般還要接一根地線作為上面兩根數(shù)據(jù)線的電平參考值0; cpu接出來的兩根數(shù)據(jù)線的高電平1用3.3v的電壓表示,0用0v表示,但是因為串口線一般有一段距離從開發(fā)板到PC,所以3.3v的驅(qū)動力是不夠的,一般TXD0,RXD0都要經(jīng)過一個電平轉(zhuǎn)換芯片增強電壓的驅(qū)動力,數(shù)據(jù)0用(-9v~-12v表示),數(shù)據(jù)1用(9v~12v表示)經(jīng)過電平轉(zhuǎn)換之后TXD0,RXD0才分別與PC機的兩根數(shù)據(jù)線相連。
硬件協(xié)議:比如2440想要發(fā)0x41(0100 0001)這個數(shù)據(jù)給PC機,那么就要通過TXD0這根數(shù)據(jù)線發(fā)出去。協(xié)議過程如下:
在發(fā)送之前2440的TXD0線一直是高電平的,想要發(fā)出數(shù)據(jù)(0100 0001)到數(shù)據(jù)線上了,先要發(fā)出一個啟始位(相當于i2c的start信號),這個啟始位就是拉低數(shù)據(jù)線為0v并且這個低電平要維持一段時間T(這就是時序),PC機發(fā)現(xiàn)自己的RXD0被拉低了T時間段,知道這是對方發(fā)出的start信號了,這個啟始位就是雙方約定的協(xié)議內(nèi)容。起始位一般都是一個bit,起始位信號發(fā)出去之后,就要將數(shù)據(jù)01000001一位一位地發(fā)送到數(shù)據(jù)線上,8bit都發(fā)送完畢之后,發(fā)出停止位(類似于i2c的stop信號,這個停止位一般是1個bit,將數(shù)據(jù)線的電平拉高并且維持T時間段就行了)具體的協(xié)議流程可以觀看圖片:串口協(xié)議圖示.png
奇偶檢驗位是指在發(fā)完數(shù)據(jù)位之后在發(fā)停止位之前在這兩者之前發(fā)一個0或者1作奇偶檢驗
比如如果是奇檢驗,假如數(shù)據(jù)是0x41(01000001),則校驗位就要發(fā)一個1,使得發(fā)送的數(shù)據(jù)的1的個數(shù)為奇數(shù)。但這個校驗位的數(shù)據(jù)不會放進數(shù)據(jù)位里,不影響數(shù)據(jù)傳輸。一般也可以不用校驗位。數(shù)據(jù)位一般都用8bit,停止位1bit,起始位和停止位的維持的時間t=1/115200,所以2440和PC機都要遵守一個協(xié)議
1.波特率一致,使得雙方的起始位與停止位維持的時間t一致,雙方可以分辨出起始信號和停止信號。
2.數(shù)據(jù)位一致,都是8bit數(shù)據(jù)一次傳輸。
3.奇偶檢驗一致。
4.起始位個數(shù)一致,一般都是1位,而且免設(shè)置。
5.停止位一致。都是1位就行
軟件的啟動流程:看2440的芯片手冊有關(guān)uart的接口設(shè)置那一章,設(shè)置波特率為115200,數(shù)據(jù)位為8位,奇偶校驗不用,停止位1位,PC段串口接收也同樣這樣設(shè)置。雙方協(xié)議一致才可以互相認得對方是什么意思才可以通信。
i2c:(原理圖接線+硬件協(xié)議+軟件啟動流程)
原理圖:2根線接到i2c的控制器,分別是sclk(時鐘線),sdat(數(shù)據(jù)線),cpu給i2c外設(shè)提供時鐘,并且根據(jù)外設(shè)的slave id區(qū)別從機,8位地址的最多可以接128個從機(2的7次方),10位的地址要發(fā)兩次slave id(byte0:11110A9A8)(byte1:A7~A0)
硬件協(xié)議(讀):sda/scl兩根線匹配發(fā)出start信號(硬件觸發(fā)),通過data線將8位的slave id發(fā)出去,從機匹配產(chǎn)生ACK響應(yīng),重新發(fā)出start信號,通過data線將8位的片內(nèi)地址發(fā)出去從機響應(yīng)ACK,從機通過data線將8bit數(shù)據(jù)傳回來到i2c控制器。
軟件的啟動流程:具體的驅(qū)動流程,要看cpu的i2c control手冊以及i2c外設(shè)手冊共同決定。
spi:
原理圖:4根線接到cpu的spi控制器,分別是spimosi(主機輸出從機輸入,寫線),spimiso(主機輸入從機輸出,讀線),時鐘線(clk,cpu給設(shè)備提供時鐘),片選線(區(qū)別各個設(shè)備從機的根據(jù),一般用gpio管腳作片選線)
硬件協(xié)議:片選,發(fā)出cmd/addr/data(每次8bit)到寫線上,數(shù)據(jù)開始傳輸,取消片選。
軟件啟動流程:要看cpu的spi control手冊以及spi外設(shè)手冊共同決定。
nand: soc有專門的nand接口
一般存儲芯片都是先發(fā)出地址信號再發(fā)出數(shù)據(jù)信號,數(shù)據(jù)信號有專門的數(shù)據(jù)線DATA0~DATA7,那地址信號是否有對應(yīng)的ADDR0~ADDR7呢?
nand的芯片手冊會告訴你怎么通過nand芯片的各個引腳來對nand進行訪問(讀寫操作)
nand的操作其實就是訪問一個存儲設(shè)備,需要發(fā)出命令,發(fā)出片內(nèi)地址,然后啟動數(shù)據(jù)傳輸,這個原始的訪問過程需要多條管腳相互配合來完成。
寫nand的設(shè)備驅(qū)動,要先看nand的外設(shè)芯片手冊了解了其硬件協(xié)議之后,再看主控芯片2440的nand控制器的手冊,兩者配合才可以寫出nand的驅(qū)動程序。
假如現(xiàn)在要寫nand的設(shè)備驅(qū)動,要遵循以下的步驟:
原理圖:nand芯片的各個管腳是怎么接到主控芯片2440的nand控制器的?看原理圖發(fā)現(xiàn)
nand芯片上有8根IO線(IO0~IO7)被接到主控芯片2440的LDATA0~LDATA7;
nand芯片上的管腳R/B被接到主控芯片2440的RnB接口;
nand芯片上的管腳CLE被接到主控芯片2440的CLE接口;
nand芯片上的管腳CE被接到主控芯片2440的nFCE接口;
nand芯片上的管腳ALE被接到主控芯片2440的ALE接口;
nand芯片上的管腳WE被接到主控芯片2440的nFWE接口;
nand芯片上的管腳RE被接到主控芯片2440的nFRE接口;
nand芯片上的管腳WP被接到3.3v電源上;
必須明白一點:硬件協(xié)議都是通過讀外設(shè)的芯片手冊得到的
那nand芯片的這些管腳有什么意義呢?看nand flash的外設(shè)芯片手冊發(fā)現(xiàn):
WP:如果這個管腳被拉低那么nand就被寫保護了,現(xiàn)在原理圖上是接死3.3v的電壓,就是一直拉高,那么就是一直取消寫保護;
I/O0 ~ I/O7:寫操作的時候這8根數(shù)據(jù)線被用作輸入命令,地址和數(shù)據(jù),讀操作的時候這8根數(shù)據(jù)線被用作輸出數(shù)據(jù);
CLE:當這個管腳為高電平的時候,主控芯片2440里command register里的數(shù)據(jù)就會通過I/O0 ~ I/O7發(fā)出去;
CE:當這個管腳被拉低的時候,這個設(shè)備被選中了,當假如設(shè)備正忙的時候強制拉低這個管腳,nand也是不可被訪問的;
ALE:如果這個管腳被拉高,那么主控芯片2440里的addr register里的數(shù)據(jù)就會通過8根io線發(fā)出去;
R/B:這一個管腳表明nand這個設(shè)備的狀態(tài),假如這個管腳向2440輸出低電平,那說明nand正忙;
WE:當這個管腳被拉低的時候,數(shù)據(jù)的運輸?shù)姆较驗?440->nand,即為寫操作,每拉低一次傳一個字節(jié);
RE:當這個管腳被拉低的時候,數(shù)據(jù)的運輸方向為2440<-nand,即為讀操作,每拉低一次傳一個字節(jié);
但是明白了這些管腳的意義了好像也不知道怎么訪問nand,比如我想讀devID,我要怎么操作呢?
猜想為:1.管腳CE拉低 2.管腳CLE拉高 3.管腳RE拉低 4.去8根io線那里讀取數(shù)據(jù)值就行了
硬件協(xié)議:有多少種工作模式就有多少種硬件協(xié)議。
但是標準的硬件協(xié)議還是從nand的芯片手冊找答案:我們發(fā)現(xiàn)不同的操作有不同的協(xié)議:
如讀ID的協(xié)議:
1.先片選(將CE線拉低)。
2.發(fā)出讀ID命令信號0x90(將0x90放在IO線上,將CLE線拉高并持續(xù)時間段T同時將ALE線拉低并且維持時間t說明IO線上的數(shù)據(jù)是命令),然后將WE線拉低并且持續(xù)時間t(此時已經(jīng)將0x90作為命令發(fā)送出去了);
3.發(fā)出地址0x00(將0x00放在IO線上,將ALE線拉高并持續(xù)時間段T同時將CLE線拉低并且維持時間t說明IO線上的數(shù)據(jù)是地址),然后將WE線拉低并且持續(xù)時間t(此時已經(jīng)將0x00作為地址值發(fā)送出去)了;
4.從IO線上讀回數(shù)據(jù)(將RE線拉低一次可以從IO線上讀回一個字節(jié)的數(shù)據(jù),反復拉低5次就可以讀到5個字節(jié)的數(shù)據(jù)。
5.取消片選(將CE線拉高)。
隨意寫的硬件協(xié)議:比如2440想往nand的0x10地址寫入數(shù)據(jù)0x88;其硬件協(xié)議是這樣的:
1.片選(將CE線拉低)
2.發(fā)出寫命令0x85(將0x85放在IO0~IO7上,將nand芯片的CLE線拉高并且維持一段時間t同時ALE線要拉低一段時間t(說明io線上的數(shù)據(jù)作為命令),將WE線拉低并且維持一段時間t->這個時候命令0x85已經(jīng)發(fā)送出去了)
3.發(fā)出地址0x10(將0x10放在IO0~IO7上,將nand芯片的CLE線拉低并且同時將ALE線拉高(說明IO線上的數(shù)據(jù)是地址),將WE線拉低并且維持一段時間t->這個時候地址0x10已經(jīng)發(fā)送出去了)
4.發(fā)出數(shù)據(jù)0x88(將數(shù)據(jù)0x88放在IO0~IO7上,將nand芯片的CLE,ALE兩根線同時拉低并且維持一段時間(說明IO線上的數(shù)據(jù)就是純數(shù)據(jù)),將WE線拉低并且維持一段時間t->這個時候數(shù)據(jù)0x88已經(jīng)發(fā)送出去了)
5.取消片選(CE線拉高)
隨意讀的硬件協(xié)議:比如2440想讀nand芯片的0x10地址的值;其硬件協(xié)議是這樣的:
1.片選(將CE線拉低)
2.發(fā)出讀命令0x05(將0x05放在IO0~IO7上,將nand芯片的CLE線拉高并且維持一段時間t同時ALE線要拉低一段時間t(說明io線上的數(shù)據(jù)作為命令),將WE線拉低并且維持一段時間t->這個時候命令0x05已經(jīng)發(fā)送出去了)
3.發(fā)出讀命令0xE0(將0xE0放在IO0~IO7上,將nand芯片的CLE線拉高并且維持一段時間t同時ALE線要拉低一段時間t(說明io線上的數(shù)據(jù)作為命令),將WE線拉低并且維持一段時間t->這個時候命令0xE0已經(jīng)發(fā)送出去了)
4.發(fā)出地址0x10(將0x10放在IO0~IO7上,將nand芯片的CLE線拉低并且同時將ALE線拉高(說明IO線上的數(shù)據(jù)是地址),將WE線拉低并且維持一段時間t->這個時候地址0x10已經(jīng)發(fā)送出去了)
5.讀回數(shù)據(jù)0x88(將RE線拉低一次就從IO0~IO7上讀到一個字節(jié),這個數(shù)據(jù)就是之前寫進去的0x88)
6.取消片選(CE線拉高)
軟件驅(qū)動設(shè)計:就是通過2440的nand控制器去完成上面的各個步驟,比如我想去讀flash的devID
首先看原理圖nand芯片的ALE CLE RnB NCON nFCE nFRE nFWE這些管腳被連到的2440 GPA17,18,19,20,22,可能先要管腳初始化。
1.先片選(NFCONT的bit1置0)
2.發(fā)出讀ID命令信號0x90(將0x90寫入NFCMMD寄存器),自動將WE線拉低一段時間
3.發(fā)出地址0x00(將0x90寫入NFADDR寄存器),自動將WE線拉低一段時間
4.從IO線上讀回數(shù)據(jù)(讀寄存器NFDATA),自動將RE線拉低一段時間
5.取消片選(NFCONT的bit1置1)
lcd:最關(guān)鍵的是看LCD的外設(shè)芯片手冊,結(jié)合管腳分析各個管腳的作用,確定lcd芯片的電源,屏幕的背光電源的來源;
電路圖:EN表示高電平有效,nEN或者/EN表示低電平有效,或者EN上面有一根橫線也表示低電平有效;
lcd的原理圖:管腳對接并且分析管腳,從lcd屏的插槽開始分析,因為插槽一邊鏈接主控芯片2440,一邊連接lcd芯片;
VCLK: 負責噴槍的移動,ic的內(nèi)部設(shè)計原理是->每來一個時鐘噴槍就會移動在下一個像素的位置;
VSYNC: 水平方向的同步信號,當像素的橫坐標等于圖像的水平像素數(shù)量時發(fā)出信號告訴噴槍去到下一行像素的起點;
HSYNC: 垂直方向的同步信號,當像素的縱坐標等于圖像的垂直像素數(shù)量時發(fā)出信號告訴噴槍回到起點(0.0),準備開始下一張圖像的開始描繪;
VD0~VD23: 24根管腳發(fā)送像素的RGB數(shù)據(jù),每一根線對應(yīng)一個bit;
DE: data enable數(shù)據(jù)使能引腳,當這個管腳使能(拉高或拉低),數(shù)據(jù)線(VD0~VD23)的24bit RGB數(shù)據(jù)才可以輸出,否則即使時鐘使能噴槍移動,沒有RGB數(shù)據(jù),屏幕也只是背光點亮,沒有顏色;
VDD: LCD芯片的內(nèi)部電源供電,分析原理圖可以得知VDD的電源來自一個電壓轉(zhuǎn)換芯片,而這個電壓轉(zhuǎn)換芯片的啟動電壓來自2440的一個GPIO管腳,這個管腳輸出高電壓就會使得電壓轉(zhuǎn)換芯片輸出電壓供電給LCD芯片的VDD管腳。
LED+,LED-: LCD屏幕的背光電壓,上面的VDD只是給LCD芯片供電,這個LED+,-是給屏幕供電,我們可以看到屏幕亮起來;分析原理圖得知這兩根LED+,-也接來源一個電壓轉(zhuǎn)換芯片,這個電壓轉(zhuǎn)換芯片的供電也是來自2440的一個GPIO管腳,2440要使能這個管腳讓其輸出對應(yīng)的電壓就可以啟動電壓轉(zhuǎn)換芯片給LED+,-供電從而點亮屏幕背光;
lcd的協(xié)議:clk(數(shù)據(jù)輸出時鐘),vsync(水平同步信號),hsync(垂直同步信號),de(像素數(shù)據(jù)使能),VD0~VD23(像素RGB數(shù)據(jù)管腳);
LCD的協(xié)議就是這28根線互相配合工作。配置好主控芯片的LCD接口之后(包括各個信號的時序,時鐘這些),lcd芯片的ic內(nèi)部就會根據(jù)時鐘一個時鐘周期一個描繪一個像素的原理
去24根數(shù)據(jù)線那里取到數(shù)據(jù)去噴涂在屏幕上(前提是DE管腳使能,24根線的數(shù)據(jù)得以輸出);clk線負責驅(qū)動噴槍并且逐個像素點移動至于是怎樣的移動原理那是ic內(nèi)部設(shè)計的問題
反正主控芯片給時鐘就可以驅(qū)動噴槍了,vsync線負責讓噴槍噴滿水平像素之后自動跳到下一行,hsync線負責噴槍的縱坐標到達像素的屏幕的豎直最大像素之后自動回到(0.0)準備開始下一張圖像;
DE線負責讓24根數(shù)據(jù)線的數(shù)據(jù)得以輸出到屏幕,如果DE線不使能RGB數(shù)據(jù)將無法隨著噴槍到達像素點導致噴槍填進去的數(shù)據(jù)為0,屏幕一直為黑屏。
軟件驅(qū)動設(shè)計: 電路供電部分:lcd芯片的電壓要供電(可能是驅(qū)動某一個gpio管腳輸出電壓給某一個電壓轉(zhuǎn)換芯片,然后電壓轉(zhuǎn)換芯片的輸出電壓接到lcd芯片的VDD端)
lcd屏幕的電壓要供電(可能是驅(qū)動某一個gpio管腳輸出電壓給某一個電壓轉(zhuǎn)換芯片,然后電壓轉(zhuǎn)換芯片的輸出電壓接到lcd芯片的背光屏正電壓,如LED+,LED-)
lcd芯片的負電壓DFF,可能是接到主控芯片的某一個gpio管腳,讓這個管腳輸出低電壓就可以了;
協(xié)議部分:就是填寫主控芯片的LCD接口的寄存器,設(shè)置時鐘(clk線),設(shè)置vsync線的時序,設(shè)置hsync線的時序,使能DE,往24根數(shù)據(jù)線寫像素值。
3.類似內(nèi)存的接口,就是接到內(nèi)存控制器的那類設(shè)備;
sdram,ddr,nand,nor,dm9000:這些設(shè)備共用數(shù)據(jù)線,地址線,靠片選線來區(qū)分這些設(shè)備;
接到內(nèi)存控制器上的內(nèi)存類設(shè)備每一個設(shè)備都有一根片選線,這根片選線要接到內(nèi)存控制器對應(yīng)bank的片選接口,這樣當cpu發(fā)出對應(yīng)bank的地址時內(nèi)存控制器就會
自動將設(shè)備的片選管腳選中,不需要程序手工選中.例如sdram接到內(nèi)存控制器的bank6(0x30000000~0x380000000),那sdram的片選管腳也要連到主控芯片的內(nèi)存控制器的GCS6
不同位寬的接線,訪問過程
怎么確定訪問地址,設(shè)置內(nèi)存控制器
cs#:井號也是表示低電平有效的意思;
4.從頭到尾看幾個開發(fā)板的原理圖
1.如果原理圖里看到nWAIT接口表示這個設(shè)備要使用nwait信號,在memory control的每一個bank都會有一個nwait接口,如果設(shè)備的nwait線接到了對應(yīng)的bank,那么在初始化memory control時就要enable對應(yīng)的bank的nwait信號;
2.一款芯片的原理圖一般由兩部分組成:核心板,底板;核心板是指SOC(cpu+ddr+net+uart+nand,也包括soc里的片內(nèi)外設(shè))等cpu相關(guān)的,底板是指核心板的下一層(承載核心板的底板),主要是接純外設(shè)比如spi設(shè)備,i2c設(shè)備等等;
3.usb分為host接口,slave接口
5.總結(jié)
寫設(shè)備驅(qū)動的思路:先看原理圖,弄清楚設(shè)備芯片的原理圖的各個管腳是什么含義有什么作用分別接到哪里(要結(jié)合設(shè)備芯片的數(shù)據(jù)手冊與原理圖一起看才能弄懂);
然后弄明白各個管腳是怎么一起配合實現(xiàn)硬件協(xié)議的。(硬件協(xié)議可以通過外設(shè)芯片手冊的時序后者簡介看明白),反正就是要弄明白各個管腳是
怎樣配合訪問設(shè)備芯片的。最后根據(jù)外心芯片的時序要求等設(shè)置要求通過主控芯片的對應(yīng)接口配置外設(shè)芯片,使其正常工作。
原文鏈接:https://blog.csdn.net/qq_43418840/article/details/118357285
-- END --
免責聲明:本文轉(zhuǎn)自網(wǎng)絡(luò),版權(quán)歸原作者所有,如涉及作品版權(quán)問題,請及時與我們聯(lián)系,謝謝!
-
芯片
+關(guān)注
關(guān)注
460文章
52520瀏覽量
441058 -
三極管
+關(guān)注
關(guān)注
145文章
3657瀏覽量
124678 -
硬件
+關(guān)注
關(guān)注
11文章
3484瀏覽量
67510
發(fā)布評論請先 登錄
宏基筆記本PCB原理圖

學習硬件的第一節(jié)課:學習讀懂原理圖

評論