A. 如何詳細的去使用12864液晶模塊
文章開頭備註:這一篇文章僅僅是對12864操作的一個具體介紹,僅限給剛剛接觸12864的新手,大神請拍磚,文章寫的比較散,建議新手先參考12864手冊以及控制驅動器ST7920英文手冊,在有個初步理解之後再次閱讀該篇文章,將會有更加深層的認識。強烈建議仔細的閱讀ST7920英文手冊!細節內容裡面有詳細的介紹,中文的12864也大多是從中譯過來的。
本文是分為三個步驟來介紹12864的內部資源原理,指令集詳細講解,以及應用的例子。
對於12864的所有操作概括起來就有4種:
1)、讀忙狀態(同時會讀出指針地址的內容),在初始化之後每次對12864的讀寫均要進行忙檢測。
2)、寫命令:所有的命令可以去查看指令表,後續會講解指令的詳細用法。寫地址也就是寫指令。
3)、寫數據:操作的對象有DDRAM、CGRAM、GDRAM。
4)、讀數據:操作的對象也是DDRAM、CGRAM、GDRAM。
對於12864的學習首先要去了解其內部資源,知道了它裡面到底有哪些東西,你就可以更加方便的去使用它了。
先簡單介紹幾個英文的名字:
DDRAM:(Data Display Ram),數據顯示RAM,往這裡面寫啥,屏幕它就會顯示啥。
CGROM:(Character Generation ROM),字元發生ROM。裡面是存儲了中文漢字的字模,也稱之為中文字型檔,編碼方式有GB2312(中文簡體)和BIG5(中文繁體)。筆者所使用的是育松電子的QC12864B,講解以此為例。
CGRAM:(Character Generation RAM),字元發生RAM,12864內部是提供了64×2B的CGRAM,可以用於用戶自定義4個16×16字元,每一個字元佔用了32個位元組。
GDRAM:(Graphic Display RAM):圖形顯示RAM,這一塊區域是用於繪圖的,同理——往裡面寫啥,屏幕也就會顯示啥,它與DDRAM的區別在於,往DDRAM中寫的數據是字元的編碼,字元的顯示先是在CGROM中找到字模,然後再映射到屏幕上的,而往GDRAM中寫數據時,圖形的點陣信息每個點都用1bit來保存其顯示與否。
HCGROM:(Half height Character Generation ROM):半寬字元發生器,是字母與數字,也就是ASCII碼。
至於ICON RAM(IRAM):貌似現在市場上的12864沒有該項功能,筆者也沒有去找到它的應用資料,所以在這里不作介紹了。
轉載於12864液晶模塊:http://www.hzjingxian.com/
下面我們就圍繞這上面列舉的這列資源來展開對12864的講解:
DDRAM:
筆者所使用的這塊12864內部是有4行×32位元組的DDRAM空間。但是在某一時刻,屏幕只能夠顯示2行×32位元組的空間,那麼剩餘的這些空間呢?它們是可以用於緩存的,在實現卷屏顯示時這些空間就能夠派上用場了。
DDRAM結構如下所示:
80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH
90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH
A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH
B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH
地址與屏幕顯示的對應關系如下:
第一行:80H、81H、82H、83H、84H、85H、86H、87H
第二行:90H、91H、92H、93H、94H、95H、96H、97H
第三行:88H、89H、8AH、8BH、8CH、8DH、8EH、8FH
第四行:98H、99H、9AH、9BH、9CH、9DH、9EH、9FH
說明:紅色部分的數據是歸上半屏所顯示,綠色部分的數據是歸下半屏所顯示。一般我們在用於顯示字元使用的是上面兩行的空間,也就是80H~8FH,90H~9FH,每一個地址的空間是2個位元組,也就是1個字,所以它可以用於存儲字元編碼的空間總共就是128位元組。因為每一個漢字的編碼是2個位元組,所以每一個地址就需要使用2個位元組來存儲一個漢字。當然如果將這2個位元組拆開來使用也是可以的,那就是顯示出2個半寬字元了。
DDRAM內部所存儲的數據都是字元的編碼,可以寫入的編碼有ASCII碼、GB2312碼、BIG5碼。筆者所使用的12864字型檔貌似不太全,字元的「數」都無法顯示,而是顯示出其他字元。如果顯示長篇漢字文章就優點不太適合了。
DDRAM數據的讀寫:
所有的數據讀寫都應該是先送地址,然後再進行讀寫。對DDRAM寫數據時,確保在基本的指令集下(使用指令0x30開啟),然後寫入地址,之後再連續的寫入兩個位元組的數據。在讀數據時,在基本指令集下先寫地址,然後再假讀一次,之後再連續讀出2個位元組的數據,讀完之後地址指針自動加一,跳到下一個字,若需要讀下一個字的內容,只需再執行連續讀2個位元組的數據。這里的假讀需要注意,不光是讀CGRAM需要假讀,讀其他的GDRAM、DDRAM都需要先假讀一次,之後的讀才是真讀,假讀就是讀一次數據,但是不會存儲該數據,也就是說送地址之後第一次讀的數據時錯誤的,之後的數據才是正確的。(mmy為假讀)
關於編碼在DDRAM中的存儲需要說明的事項如下:
1)、每次對於DDRAM的操作單位都是一個字,也就是2個位元組,當往DDRAM寫入數據時,首先要寫地址,然後連續送入2個位元組的數據,先送高位元組的數據,再送低位元組的數據。讀數據時也是如此,先寫地址,然後再讀出高位元組數據,再讀出低位元組的數據(讀數據時請注意要先假讀一次)。
2)、顯示ASCII碼半寬字元時,往每個地址送入2個位元組的ASCII編碼,對應屏幕上的位置就會顯示出2個半寬字元,左邊的為高位元組字元,右邊的則為低位元組字元。
3)、顯示漢字時,漢字編碼的2個位元組必須要存儲在同一地址空間之中,不能夠分開放在2個地址存放,否則顯示的就不會是你想要的字元。每一個字中的2個位元組自動結合查找字模並且顯示字元。所以,如果我們往一個地址中寫入的是一個漢字的2位元組編碼就會正確顯示該字元,編碼高位元組存放在前一地址低位元組,編碼低位元組存放在後一地址高位元組,顯然他們就不會結合查找字模,而是與各地址相應位元組結合查找字模。
4)、因為控制器ST7920提供了4個自定義字元,所以這4個自定義字元也是可以完全顯示出來的,同樣這4個自定義字元也是採用了編碼的方式,但是這4個字元的編碼是固定的,分別是0000H,0002H,0004H,0006H。如下圖所示:
上圖只是把2個字元的CGRAM空間畫出來,後續還會有2個字元。可以看到每一個字元都有16行16列,每一行使用了2個位元組,因此一個字元所佔用的空間是32位元組,地址是6位的,4個字元的地址分別是:00H~0FH、10H~1FH、20H~2FH、30H~3FH。編碼使用的是2個位元組,可以看到有2個位是任意的,說明其實這4個字元的編碼可以有多個,只是我們常用前面列舉的4個編碼。
CGRAM: (數據讀寫)
CGRAM的結構就是上面所示的了,這里再次補充一些讀寫CGRAM的內容,讀寫之前要先寫地址,寫CGRAM的指令為0x40+地址。但是我們在寫地址時只需要寫第一行的地址,例如第一個字元就是0x40+00H,然後連續寫入2個位元組的數據,之後地址指針就會自動加一,跳到下一行的地址,然後再寫入2個位元組的數據。其實編程實現就是寫入地址,然後連續寫入32個位元組的數據。讀數據也是先寫首地址,然後假讀一次,接著連續讀32個位元組的數據。
GDRAM:(繪圖顯示RAM)
繪圖RAM的空間結構如下圖所示:
這些都是點陣,繪圖RAM就是給這些點陣置1或者置0,可以看到其實它本來是32行×256列的,但是它分成了上下兩屏顯示,每一個點都對應了屏幕上的一個點。要使用繪圖功能需要開啟擴展指令。然後寫地址,再讀寫出數據。
GDRAM的讀寫:
首先要說明對GDRAM的操作基本單位是一個字,也就是2個位元組,就是說讀寫GDRAM時一次最少要寫2個位元組,一次最少讀2個位元組。
寫數據:先開啟擴展的指令集(0x36),然後再送地址,這里的地址與DDRAM中的略有些不同,DDRAM中的地址就只有一個,那就是字的地址。而GDRAM中的地址就只有2個,分別是字地址(列地址/水平地址X)以及位地址(行地址/垂直地址Y),上圖之中的垂直地址就是00H~31H,水平地址就是00H~15H,在寫地址時要先寫垂直的地址(行地址)再寫水平地址(列地址),也就是說要連續寫入兩個地址之後,然後再連續寫入2個位元組的數據。如圖中所示,左邊的為高位元組右邊的為低位元組。為1的點被描黑,為0的點則是顯示出空白。這里就列舉一個寫地址的例子:寫GDRAM地址指令的是0x80+地址。被加上的地址就是上面所列舉的X和Y,假設我們要寫第一行的2個位元組,那麼寫入地址就是0x00H(寫行地址)然後寫0x80H(列地址),之後才連續的寫入2個位元組的數據(先高位元組後低位元組)。再如寫屏幕右下角的2個位元組,先寫行地址0x9F(0x80+32),再寫列地址0x8F(0x80+15),然後連續寫入2個位元組的數據。編程中寫地址函數中直接用參數(0x+32),而就不必自己相加。
讀數據:首先開啟擴展指令集,然後再寫行地址、寫列地址,假讀一次,再連續讀2位元組的數據(先高位元組後低位元組)。
讀寫時序:
讀寫時序圖如下:(上圖為寫,下圖為讀)
時序圖之中的信號引腳就是12864最主要的引腳,分別是:
RS:命令/數據寄存器選擇端
WR:讀寫的控制端
E:使能端
DB7~DB0:數據端
所有對於12864的操作基本都是圍繞著幾根引腳所展開的。包括寫命令、寫數據、讀數據、讀狀態就是通過這一些引腳的高低電平搭配來實現的。
根據時序圖可以編寫出相應的寫命令函數、寫數據函數、讀數據函數、讀狀態函數。需要的注意的是有效數據出現的那段時間Tc必須合適,不能太短,否則就會造成讀寫失敗。
給出幾個函數示例:
//忙檢測,若忙則等待,最長等待時間為60ms
void busychk_12864(void){
unsigned int timeout = 0;
E_12864 = 0;
RS_12864 = 0;
RW_12864 = 1;
E_12864 = 1;
while((IO_12864 & 0x80) && ++timeout != 0); //忙狀態檢測,等待超時時間為60ms
E_12864 = 0;
}
//寫命令子程序
void wrtcom_12864(unsigned char com){
busychk_12864();
E_12864 = 0;
RS_12864 = 0;
RW_12864 = 0;
IO_12864 = com;
E_12864 = 1;
delay_12864(50); //50us使能延時!!!注意這里,如果是較快的CPU應該延時久一些
E_12864 = 0;
}
//讀數據子程序
unsigned char reddat_12864(void){
unsigned char temp;
busychk_12864();
E_12864 = 0;
IO_12864 = 0xff; //IO口置高電平,讀引腳
RS_12864 = 1;
RW_12864 = 1;
E_12864 = 1;
delay_12864(50); //使能延時!!!注意這里,如果是較快的CPU應該延時久一些
temp = IO_12864;
return temp;
}
//寫數據子程序
void wrtdat_12864(unsigned char dat){
busychk_12864();
E_12864 = 0;
RS_12864 = 1;
RW_12864 = 0;
E_12864 = 1;
IO_12864 = dat;
delay_12864(50); //使能延時!!!注意這里,如果是較快的CPU應該延時久一些
E_12864 = 0;
}
其中,忙檢測是必要的,當BF=1時,表示內部正在進行相關的操作,即:處於忙狀態。在BF變回0之前ST7920不會接受任何指令。MCU必須要檢測BF以確定ST7920內部操作是否已完成,然後才能夠再發送指令。也可以使用延時來替代忙檢測,但是需要延時足夠的時間。盲檢測實際就是讀內部的狀態寄存器,該寄存器最高位(D7)為忙標志BF,剩餘的7位為地址指針的內容,所以在進行盲檢測實際上也把地址指針中的地址讀出來了。
指令集:
指令集是分為基本指令集以及擴展指令集,使用相應的指令集必須要先寫相應指令表明後續指令均為該類指令。如使用基本指令集時,寫指令(0x30),需要使用擴展指令集時寫指令(0x34)切換到擴展指令集。
一)基本的指令集(RE=0):(在使用擴展指令集時先寫指令0x30,這使得RE=0)
清屏指令(0x01):往DDRAM寫滿0x20,指針的地址寫0x00。表現在屏幕上的就是顯示空白。
回車指令(0x02/0x03):地址指針內容寫上0x00.
進入模式:0 0 0 0 0 1 I/D S:設置讀寫數據之後游標、顯示移位的方向。內部有2個可編程位,I/D表示讀寫一個字元後數據指針是加一還是減一。I/D=1指針加一,I/D=0指針減一。S=1開啟整屏移動。
S I/D= H H,屏幕每次左移一個字元。
S I/D= H L ,屏幕每次右移一個字元。
但是平時若不開啟屏幕移動,這里說明一個概念,那就是屏幕移動,實際試驗中若開啟了屏幕移動你會發生顯示是非常怪異的,說明如下:由於DDRAM的結構是下方表所示:
上半屏 下半屏
80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH
90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH
A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH
B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH
在沒有開啟屏移時,屏幕是以表格第一來列作為參考起點的,然後前8列歸為上半屏顯示,後8列歸為下半屏顯示。如果此時向左屏移動一個字元,那麼DDRAM內容與顯示映射關系應變為:
80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH
90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH
A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH
B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH
可以看出實際上原來第三第四行開始的字元跑到了第一行第二行的末尾,一整個DDRAM的結構就是一種循環的結構,發生屏移時DDRAM與顯示映射關系不斷的在改變。但是這不太符合我們的閱讀習慣,所以如果需要使用到該項功能還需編程校正之。
顯示、游標、閃爍開關:0 0 0 0 0 0 1 D C B:
D=1: 顯示開(Display) C=1: 游標開(Cursor) B=1: 游標位置閃爍開(Blink)。為0則就為關。
游標顯示移位控制:0 0 0 1 S/C R/L X X
說明:
LL:這時僅僅是將地址指針AC的值減1。在屏幕上表現出來的是游標左移一個字元。
LH:這時僅僅是將地址指針AC的值加1。在屏幕上表現出來的是游標右移一個字元。
HL:AC的指針不變,向左屏移動一個字元。這是DDRAM結構循環左移,80H接在8FH後面,90H接在9FH的後面。這與上面講的屏移是一樣的。
HH:AC指針不變,向右屏移動一個字元。這是DDRAM結構循環右移,80H接在8FH後面,90H接在9FH後面。
功能設置:0 0 1 DL X RE X X:(切換基本的指令集與擴展指令集)
DL=1表示8為介面,DL=0表示4為介面。
RE=1表示開啟擴展指令,RE=0表示使用基本指令。
開啟基本指令則設置為0x30,開啟擴展指令則設置為0x34。
CGRAM地址設置:0x40+地址。地址范圍是00H~3FH。前提是SR=0,即允許設置IRAM和CGRAM地址!!!
DDRAM地址設置:只會有字地址。如下表所示。(注意DDRAM地址有4行×16字)如下所示:
80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH
90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH
A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH
B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH
所以在某一個時刻只能夠顯示出其中的2行。只有卷動顯示才能夠將另兩行的數據顯示出來。
讀忙標志(地址):同時忙標志和地址讀出來。忙狀態時,ST7920不會接受任何指令。按照時序圖將RS置0,RW置1,然後讀取狀態寄存器。
寫RAM(DDRAM/CGRAM/GDRAM):寫了控制邏輯(函數wrtcom_12864(地址);)之後,直接送數據(wrtdat_12864)。寫完後地址指針根據進入模式中的設置加一或減一。寫數據前先寫地址,而寫地址本身是一個寫地址命令,然後再寫數據。
讀RAM(DDRAM/CGRAM/GDRAM):記得先假讀一次,後面的才是真讀,假讀之後不需要再假讀了,除非重設了地址。
二)擴展指令集(RE=1):(使用擴展指令集先寫指令0x34,這使得RE=1)
待機模式:0x01,不影響DDRAM,所以跟清屏指令不同,任何指令可以結束待機模式。
卷動地址/IRAM地址允許設置:0 0 0 0 0 0 1 SR:
SR=1:允許設置垂直卷動地址。SR=0:允許設置IRAM和CGRAM地址。
設置卷動/IRAM地址:0x40+地址。(卷動地址為行地址,即縱向地址).
這里講解卷動,卷動就是上下滾屏,實現屏幕的垂直滾動。
卷動地址:地址范圍為0x00~0x63,共64行卷動地址其實就是垂直地址。每一個地址代表著DDRAM中的一行的像素點。卷動一次就是把該行所有點移到上半屏和下半屏幕最上方。
80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH
90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH
A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH
B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH
還是DDRAM的結構圖,需要注意的是卷屏是分上半屏卷動和下半屏卷動,兩屏之間沒有關系,也就是DDRAM中左邊紅色部分在上半屏滾動,右邊綠色部分在下半屏滾動。
B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H 的下一行是
80H、81H、82H、83H、84H、85H、86H、87H
也就是說左邊是一個上下相接的循環結構。同理右邊也是上下相接的循環結構。左邊內存中的字元上下滾動。右邊內存中的字元上下滾動,兩者木有關系。
要開啟卷動,首先開啟擴展指令集,然後允許卷動地址設置,再設置卷動地址。
wrtcom_12864(0x34); //打開擴展指令
wrtcom_12864(0x03); //允許輸入卷動地址
wrtcom_12864(0x40 + 地址 //設置卷動地址
wrtcom_12864(0x30); //回到基本指令
要實現全屏滾動,就必須使用循環不斷地修改卷動地址。從00~63如此循環,但遺憾的是這也不符合我們的閱讀習慣,後續的應用的中將講解全屏滾動的實現方法。這里只是把卷動原理講清楚。
反白顯示:0 0 0 0 0 1 R1 R0:
R1、R0初始化的值為00。選擇1~4任一行反白顯示並可決定是否反白。
如何開啟反白顯示:首先開啟擴展指令(0x34),然後設置選中某一行設置反白顯示(0x04+R1R0)。00為第一行,01為第二行,10為第三行,11為第四行。需要說明的是,這里的行是指DDRAM所有內存的行,而不是顯示的行,屏幕只顯示2行。
所以如果我們開啟第3第4行的反白顯示,不卷動我們是看不到效果的。
同時,如果我們開啟第1行反白顯示,那麼在屏幕中第1行第3行都會反白顯示,第2行則對應屏幕第2第4行,這一點需要注意。
如何關閉反白顯示:只需在此寫一次地址即可關閉,也就說,第一次寫第一開啟反白,第二次寫相同的地址關閉反白顯示。
wrtcom_12864(0x34); //反白顯示試驗
wrtcom_12864(0x04); //開啟反白顯示
delay_12864(60000); //延時
delay_12864(60000); //延時
wrtcom_12864(0x04); //關閉反白顯示
wrtcom_12864(0x30); //開啟基本指令集
擴展功能設置:0x36設置繪圖顯示開。
當GDRAM寫完了之後,寫0x36則屏幕顯示你所繪制的圖形。
0 0 0 0 1 DL x RE G x (RE=1擴展指令,G=1開繪圖顯示,DL=1表示8為介面)
設置GDRAM地址:繪圖時,需要將GDRAM的地址寫入地址指針中,然後才能寫入數據。連續寫入兩個位元組,第一個為行地址(Y),第二個為列地址(X)。
需要注意的是:寫了數據之後,地址指針會自動加一(以字為單位),當到達該行的行尾時,指針下一次加一會使得地址指針跳回該行行首,也就說如果地址值為8FH時,下一次它就是80H(以第一行為例)。指針地址在本行之間循環。
指令介紹完
再講下初始化過程,根據ST7920的手冊提供的初始化步驟就可以了。
初始化函數如下:
//延時子程序
void delay_12864(unsigned int del){
unsigned int i;
for(i = 0; i < del; i++){; }
}
//初始化12864子函數
void initial_12864(void){
delay_12864(40000);
RST_12864 = 1;
RST_12864 = 0; //復位
delay_12864(500);
RST_12864 = 1;
wrtcom_12864(0x30); //設置為基本指令集動作
delay_12864(100);
wrtcom_12864(0x30); //設置為基本指令集動作
delay_12864(37);
wrtcom_12864(0x08); //設置顯示、游標、閃爍全關。
delay_12864(100);
wrtcom_12864(0x01); //清屏,並且DDRAM數據指針清零
delay_12864(100000);
wrtcom_12864(0x06); //進入模式設置
}
B. SRAM,SDRAM,DRAM,DDRAM之間的區別,請深入淺出的表達,拒絕COPY的書本內容,多謝了~
SRAM可以不用討論了,CPU的緩存就是SRAM,速度極快,但是成本極高,所以容量非常小,現在的基本是和CPU主頻同速,早先Slot1/A的P3/K7是1/2,1/3,2/5速
SDRAM是Synchronous Dynamic Random Access Memory,同步動態隨機存儲器,採用3.3v工作電壓,帶寬64位,SDRAM將CPU與RAM通過一個相同的時鍾鎖在一起,使RAM和CPU能夠共享一個時鍾周期,以相同的速度同步工作。SDRAM基於雙存儲體結構,內含兩個交錯的存儲陣列,當CPU從一個存儲體或陣列訪問數據時,另一個就已為讀寫數據做好了准備,通過這兩個存儲陣列的緊密切換,讀取效率就能得到成倍的提高。
DRAM包含SDRAM,DDR SDRAM,如果你說的是Rumbus的RDRAM,那個是串聯形式的內存,位寬只有16/32bit,但是工作頻率極高,00年就能達到800MHz的速度,同期DDR只有266MHz,不過這個內存屬於Rumbus專利技術,授權費極高,所以現在已經退出桌面市場,部分伺服器還在使用,另外現在他最大的客戶是SONY PS3,不過規格進一步升級,叫YellowStone
DDRSDRAM前面DDR就是Dual Data Rate,雙倍速率,2bit預讀,上下同時讀寫,相當於SDRAM的頻率X2,所以現在DDR400的實際頻率只有200MHz,但是等效400MHz,同理現在的DDR2是4bit預讀
C. 魚缸的溫度顯示屏顯示-PP
咨詢記錄 · 回答於2021-11-21
D. FPGA的乙太網ip核具體實現步驟,怎樣模擬其功能
你用的是Altera還是xilinx的IP核?
一般的ip核都有自動生成工具,比如Altera有megacore wizard,按照你需要的功能enable或者disable選項就可以了。具體步驟可以上Altera或者Xilinx的網站,搜索你需要的乙太網ip核關鍵字,比如GE或者FE,以及是否需要MAC,PCS功能等。
模擬方面,ip核提供商都是考慮好了的:提供有模擬模型,一般生成core的時候都有sim文件夾,可以用來實現模擬。
E. 做一名嵌入式軟體工程師應必備那些技能
嵌入式系統設計師考試大綱
一、考試說明
1、考試要求:
(1)掌握科學基礎知識;
(2)掌握嵌入式系統的硬體、軟體知識;
(3)掌握嵌入式系統分析的方法;
(4)掌握嵌入式系統設計與開發的方法及步驟;
(5)掌握嵌入式系統實施的方法
(6)掌握嵌入式系統運行維護知識;
(7)了解信息化基礎知識、信息技術引用的基礎知識;
(8)了解信息技術標准、安全,以及有關法律的基本知識;
(9)了解嵌入式技術發展趨勢;
(10)正確閱讀和理解計算機及嵌入式領域的英文資料。
2、通過本考試的合格人員能根據項目管理和工程技術的實際要求,按照系統總體設計規格進行軟、硬體實際,編寫系統開發規格說明書等相應的文檔;組織和指導嵌入式系統靠法實施人員實施硬體電路、編寫和調試程序,並對嵌入式系統硬體設備和程序進行優化和集成測試,開發出符合系統總體設計要求的高質量嵌入式系統;具有工程師的實際工作能力和業務水平。
二、考試范圍
考試科目1:嵌入式系統基礎知識
1.計算機科學基礎
1.1數制及轉換
o 二進制、八進制、十進制和十六進制等常用數制及其相互轉換
1.2數據的表示
o 數的機內表示(原碼、反碼、補碼、移碼,定點和浮點,精度和溢出)
o 字元、漢字、聲音、圖像的編碼方式
o 校驗方法和校驗碼(奇偶驗碼、海明校驗碼、循環校驗碼)
1.3算術和邏輯運算
o 計算機中的二進制數運算方法
o 邏輯代數的基本運算和邏輯表達式的化簡
1.4計算機系統結構和重要部件的基本工作原理
o CPU和存儲器的組成、性能、基本工作原理
o 常用I/O設備、通信設備的性能,以及基本工作原理
o I/O介面的功能、類型和特點
o 虛擬存儲存儲基本工作原理,多級存儲體系
1.5安全性、可靠性與系統性能評測基礎知識
o 診斷與容錯
o 系統可靠性分析評價
o 計算機系統性能評測方法
2.嵌入式系統硬體知識
2.1數字電路和邏輯電路基礎
2.1.1組合電路和時序電路
2.1.2匯流排電路與電平轉換電路
2.1.3可編程邏輯器件
2.2嵌入式微處理器基礎
2.2.1嵌入式微處理器體系結構
o 馮.諾伊曼結構與哈佛結構
o CISC與RISC
o 流水線技術
o 信息存儲的位元組順序(大端存儲法和小端存儲法)
2.2.2嵌入式系統處理器的結構和類型
o 常用8位處理器的體系結構和類型
o 常用16位處理器的體系結構特點
o 常用32位處理器的體系結構特點
o 常用DSP處理器的體系結構特點
o 多核處理器的體系結構特點
2.2.3異常
o 同步異常(陷阱、故障、終止)
o 非同步異常(中斷)
o 可屏蔽中斷、不可屏蔽中斷
o 中斷優先順序、中斷嵌套
2.3 嵌入式系統的存儲體系
2.3.1存儲器系統
o 存儲器系統的層次結構
o 高速緩存(Cache)
o 內存管理單元(MMU)
2.3.2 ROM的種類與選型
o 常見ROM的種類
o PROM、EPROM、E2PROM型ROM的典型特徵和不同點
2.3.3 Flash Memory的種類與選型
o Flash Memory的種類
o NOR和NAND型Flash Memory的典型特徵和不同點
2.3.4 RAM的種類與選型
o 常見RAM的種類
o SRAM、DRAM、DDRAM、NVRAM的典型特徵和不同點
2.3.5 外存
o 常見外存的種類
o 磁碟、光碟、CF、SD等的典型特徵和不同點
2.4 嵌入式系統I/O介面
2.4.1 定時器和計數器基本原理與結構
2.4.2 GPIO、PWM介面基本原理與結構
2.4.3 A/D、D/A介面基本原理與結構
2.4.4鍵盤、顯示、觸摸屏介面基本與結構
2.4.5嵌入式系統音頻介面
2.5嵌入系統通信及網路介面
o PCI、USB、串口、紅外、並口、SPI、IIC、PCMCIA的基本原理與結構
o 乙太網、CAN、WLAN、藍牙、1394的基本原理與結構
2.6嵌入式系統電源分類及電源原理
2.7電子電路設計
2.7.1電子電路設計基礎知識
o 電子電路設計原理
o 電子電路設計方法及步驟
o 電子電路設計中的可靠知識
2.7.2 PCB設計基礎知識
o PCB設計原理
o PCB設計方法及步驟
o 多層PCB設計的注意事項及布線原則
o PCB設計中的可靠性知識
2.7.3電子電路測試基礎知識
o 電子電路測試原理與方法
o 硬體抗干擾測試
3. 嵌入式系統軟體知識
3.1嵌入式軟體基礎知識
3.1.1嵌入式軟體的分類(系統軟體、支撐軟體、應用軟體)
3.1.2無操作系統支持的嵌入式軟體體系結構(輪詢、中斷、前後台)
3.1.3有操作系統支持的嵌入式軟體體系結構
3.1.4板極支持包基礎知識(系統初始化、設備驅動程序)
3.1.5嵌入式中間件(GUI、資料庫)
3.2 嵌入式操作系統基礎知識
3.2.1嵌入式操作系統體系結構
o 單體結構、分層結構和微內核結構
3.2.2任務管理
o 多道程序技術
o 進程、線程、任務的概念
o 任務的實現(任務的層次結構、任務控制塊、任務的狀態及狀態轉換、任務隊列)
o 任務調度(調度演算法的性能指標、可搶占調度、不可搶占調度、先來先服務、短作業優先演算法、時間片輪轉演算法、優先順序演算法)
o 實時系統及任務調度(RMS、EDF演算法)
o 任務間通信(共享內存、消息、管道、信號)
o 同步與互斥(競爭條件、臨界區、互斥、信號量、死鎖)
3.2.3存儲管理
o Flat存儲管理方式
o 分區存儲管理(固定分區、可變分區)
o 地址重定位(邏輯地址、物理地址、地址映射)
o 頁式存儲管理
o 虛擬存儲技術(程序局部性原理、虛擬頁式存儲管理、頁面置換演算法、工作集模型)
3.2.4設備管理
o 設備無關性、I/O地址、I/O控制、中斷處理、緩沖技術、假離線技術)
3.2.5文件系統基礎知識
o 文件和目錄
o 文件的結構和組織
o 存取方法、存取控制
o 常見嵌入式文件系統(FAT、JFFS、YAFFS)
3.2.6操作系統移植基礎知識
3.3 嵌入式系統程序設計
3.3.1嵌入式軟體開發基礎知識
3.3.2嵌入式程序設計語言
o 匯編、編譯、解釋系統的基礎知識和基本工作原理
o 匯編語言
o 基於過程的語言(過程/函數、參數傳遞、全局變數、遞歸、動態內存分配、數據類型)
o 面向對象的語言(對象、數據抽象、繼承、多態、自動內存管理)
o 各類程序設計語言的主要特點和適用情況
3.3.3嵌入式軟體開發環境
o 宿主機、目標機
o 編輯器、編譯器、鏈接器、調試器、模擬器
o 常用嵌入式開發工具(編程器、硬體模擬器、邏輯分析儀、示波器)
o 集成開發環境
o 開發輔助工具
3.3.4嵌入式軟體開發
o 軟體設計(模塊結構設計、數據結構設計、內存布局、面向對象的分析與設計)
o 嵌入式引導程序的設計、設備驅動程序設計、內核設計、網路程序設計、應用軟體設計)
o 編碼(編程規范、代碼審查)
o 測試(測試環境、測試用例、測試方法、測試工具)
o 下載和運行
3.3.5嵌入式應用軟體移植
4.嵌入式系統的開發與維護知識
4.1系統開發過程及其項目管理
o 系統開發生命周期各階段的目標和任務的劃分方法
o 系統開發項目掛你基礎知識及其常用管理工具使用方法
o 主要的系統開發方法
o 系統開發工具與環境知識
4.2 系統分析基礎知識
o 系統分析的目的和任務
o 系統分析方法
o 系統規格說明書的編寫方法
4.3 系統設計知識
o 傳統系統設計方法
o 軟硬體協同設計方法
4.4 系統實施知識
o 系統架構設計
o 系統詳細設計
o 系統調試技術
o 系統測試
4.5 系統維護知識
o 系統運行管理知識
o 系統維護知識
o 系統評價知識
5.安全性知識
o 安全性基本概念
o 加密與解密機制
6.標准化知識
o 標准化的概念
o 國際標准、國家標准、行業標准、企業標准基本知識
o 代碼標准、文件格式標准、安全標准、軟體開發規范和文檔標准知識
o 標准化機構
o 嵌入式系統相關標准
7.信息化基礎知識
o 信息化和信息系統基本概念
o 有關的法律、法規
8.嵌入式技術發展趨勢
9.計算機專業英語
o 正確閱讀和理解相關領域的英文資料
考試科目2:嵌入式系統設計應用技術
1.嵌入式系統開發過程
1.1系統需求分析方法與步驟
1.2系統設計
o 系統硬體配置
o 系統功能組成分配
o 軟硬體功能的分配
o 可行性驗證及設計審查
o 系統規格
o 周期,成本及工作量估計
o 開發計劃
1.3軟硬體協同設計
1.4硬體設計
1.5軟體設計
o 軟體結構
o 設計評審
o 軟體詳細設計
1.6系統測試
o 測試環境
o 測試計劃(內容、方法、標准、過程、檢驗)
o 硬體測試
o 軟體測試(單元測試、集成測試)
o 軟硬體聯合測試
o 實施測試
1.7系統評估
1.8 軟體維護
2.嵌入式系統硬體設計
2.1嵌入式系統硬體基本結構
2.1.1嵌入式微處理結構與應用
2.1.2 異常及中斷處理技術
2.1.3 DMA技術
2.1.4 多處理系統
o 多處理器系統特點
o 多處理器系統構建技術
2.1.5 匯流排架構
o 應用系統中的匯流排配置
2.1.6 內存種類及架構
o 存儲器系統介面設計
2.1.7數字電路和邏輯電路
o 專用集成電路
o 可編程邏輯控制器件
2.2輸入/輸出介面設計
2.2.1 輸入/輸出介面
o 介面信號電平轉換
o 介面驅動電路設計
2.2.2輸入/輸出介面應用技術
o 外圍設備
o 串口通信
o 並口通信
o 模擬介面
o 通信介面設備
o 通信標准和協議
o 數據傳輸方式
2.3外圍設備介面應用技術
2.3.1 外圍存儲設備
o 存儲卡,記憶棒,IC卡,MMC卡,SD卡
o DVD 、CD-R 、CD-RW
2.3.2外圍輸入/輸出設備
o 鍵盤,滑鼠,觸摸屏
o 液晶板、LED、7段數碼管、蜂鳴器
2.3.3電源設計技術
2.4可靠性與安全性設計技術
2.4.1 錯誤檢測與隔離技術
2.4.2 冗餘設計
2.4.3 系統恢復設計
2.4.4 診斷技術
2.4.5常用安全標准
2.4.6 抗干擾設計
2.4.7電磁兼容設計
2.4.8系統加密
3.嵌入式系統軟體設計
3.1嵌入式系統軟體結構設計
3.2嵌入式操作系統應用技術
3.2.1 時間管理
o 系統時間
o 時鍾中斷
3.2.2內存管理
o 靜態內存管理
o 動態內存管理
3.2.3任務管理和任務間的通信
o 任務間的通信機制
o 信號量
o 郵箱
o 消息隊列
3.2.4異常處理
o 異常處理方法
o 中斷優先順序處理方法
o 系統調用
3.2.5嵌入式文件系統應用技術
3.2.6嵌入式系統圖形用戶介面(GUI)應用技術
3.2.7嵌入式系統資料庫應用技術
3.3嵌入式軟體設計技術
3.3.1匯編語言設計
o 數據類型
o 匯編語言程序結構
o 匯編語言程序設計及優化
o 子程序調用
3.3.2嵌入式C語言設計
o ANSI-C的數據類型
o C程序結構
o C語言程序設計及優化
o 程序的編譯與鏈接
3.3.3面向對象程序設計與開發
o 面向對象的分析與設計方法UML
o 面向對象的編程語言
o 使用C++進行嵌入式系統開發
o 使用Java進行嵌入式系統開發
3.4 系統級軟體設計技術
o 嵌入式系統固件與系統初始化設計
o 設備驅動程序設計
o 硬體抽象層、板級支持包設計
o 嵌入式軟體的移植技術
4.嵌入式系統開發技術
4.1系統開發環境
4.1.1開發工具
o 文本編輯器
o 匯編、編譯和連接程序
o ICE和ICE監控器
o 配置管理工具
o 逆工程工具
4.1.2平台
o 操作系統
o 分布式開發環境
4.1.3開發環境創建方法及評估
o 開發工作分析
o 開發環境的建立
o 維護、管理、使用開發環境的方法
o 開發環境的評測
4.2實時系統的分析技術
4.2.1實時系統的分析技術
o 結構化分析方法
o 面向對象分析方法
4.2.2實時系統的設計技術
o 結構化分析方法
o 面向對象分析方法
4.3硬體設計環境
4.3.1硬體描述語言
o 硬體開發設計過程
o 硬體描述語言的種類與特點
4.3.2模擬技術
o 邏輯模擬方法
o 邏輯模擬工具
4.3.3大規模集成電路系統的開發方法
o ASIC開發方法
o FPGA設計方法
o IP(intellectual property)
4.4協同設計
o 軟硬體任務工和切調
o 設計評審
4.5嵌入式系統低功耗設計技術
o 低功耗系統工作機制
o 低功耗系統模型結構
o 低功耗的硬體設計技術
o 低功耗的軟體設計技術
4.6分布式嵌入系統設計
o 分布式系統設計原理
o 分布式系統的通信技術
o 分布式系統設計應用
5.嵌入式系統應用
5.1嵌入式系統在控制領域中的應用
5.2嵌入式系統在手持設備中的應用
5.3嵌入式系統在模式識別中的應用
三、題型舉例
1、選擇題
若嵌入式系統中採用I/O地址統一編址模式,訪問內存單元和I/O設備是通過 (1) 來區分的。
(1) A.數據匯流排上輸出的數據
B.不同的地址代碼
C.不同的地址總路線
D.不同的指令
2、問答題
在某個嵌入式操作系統中,任務的狀態轉換圖(不完整)如下,請閱讀該圖以及下列說明,回答問題1至問題4,將解答填入答題紙的對應欄內。
〔說明〕
任務總共有五個狀態:休眠狀態、就緒狀態、運行狀態、中斷服務狀態和等待狀態,在任何時候,一個任務只會處於其中的某一個狀態。
〔問題1〕(3分)
在單個CPU的系統中,處於運行狀態的任務最多有多少個?
〔問題2〕(3分)
對於運行狀態、就緒狀態和等待狀態這間的相互轉換,圖中並沒有畫出來,請補充。用文字處理的形式來進行描述,格式形如"運行狀態→中斷服務狀態"。
〔問題3〕6分)
從運行狀態可以直接變為等待狀態嗎?如果不能為什麼?如果能什麼時候會發生這種轉換?舉例說明。
〔問題4〕(3分)
從就緒狀態可以直接變為等待狀態嗎?如果不能,為什麼?如果能,什麼時候會發生這種轉換?舉例說明。
F. LCD字元,DDRAM和CGRAM的關系
首先ST7066U是矽創生產的,點陣液晶顯示器控制器和驅動器(大晶元),本身帶有字型檔,可以LSI顯示字母,數字,日語假名字元和符號.控制下,在4 - 或8位的微處理器,它可以被配置來驅動一個點陣液晶顯示.由於顯示RAM,字元發生器,和液晶驅動器,用於驅動一個點陣液晶顯示所需的所有功能的條件,如在內部設置在一個晶元上,可以是一個最小的系統與此控制器/驅動器介面.擴展的的ST7066U字元發生器ROM產生240 5X8(5x11)點字元的字體共有240個不同的字體.是適用於任何攜帶型電池驅動的產品要求低功耗,低電源電壓(2.7V至5.5V)ST7066U.ST7066U LCD驅動器由16個常見信號驅動器和40段信號驅動器段驅動器通過級聯可以延長顯示器的大小。
而CGRAM(Custom Glyph RAM),代表圖像定義(自定義字形)功能,顯示內存中每一點,都與顯示器畫面中每一個光點的內容相對應(這個在1602液晶顯示器上有用到)。
DDRAM是你的內存數據,寫到顯存中,就會顯示的顯示器的屏幕上。
顯存就如同一塊畫布,不論是文字,還是圖像,不論你寫什麼?畫什麼?最後都轉化為顯示器屏幕顯示的圖像信息!你的DDRAM的內容如何寫?寫到顯存的什麼位置,就是靠編程進行控制,也就是靠你的顯示驅動程序來控制。所以,就是你在表格里看的的對位關系所要表達的內容,最後的注意事項很簡單,隨便翻譯一下即可!這一點要注意別忽略掉重點哦!
G. 如何向lcd12864DDRAM指定地址中寫入數據
可以。具體我有點忘了,給你個方法把:把地址強制轉換為指針,在加*取值。
應該是*((int *)0x82) = xx; 你先試一下行不行。
H. 如何安裝DDRAM.dll
直接放到C:\windows\system32目錄下就可以,如果需要的話,可以用regsvr32 DDRAM.dll命令注冊一下,不過一般不用。
提示你,最好放之前殺一下毒、檢查一下木馬,省的以後造成不必要的損失。
I. 內存有哪些類型
台式機內存類型(術語解釋)
指內存所採用的內存類型,不同類型的內存傳輸類型各有差異,在傳輸率、工作頻率、工作方式、工作電壓等方面都有不同。目前市場中主要有的內存類型有SDRAM、DDR SDRAM和RDRAM三種,其中DDR SDRAM內存占據了市場的主流,而SDRAM內存規格已不再發展,處於被淘汰的行列。RDRAM則始終未成為市場的主流,只有部分晶元組支持,而這些晶元組也逐漸退出了市場,RDRAM前景並不被看好。
SDRAM:SDRAM,即Synchronous DRAM(同步動態隨機存儲器),曾經是PC電腦上最為廣泛應用的一種內存類型,即便在今天SDRAM仍舊還在市場佔有一席之地。既然是「同步動態隨機存儲器」,那就代表著它的工作速度是與系統匯流排速度同步的。SDRAM內存又分為PC66、PC100、PC133等不同規格,而規格後面的數字就代表著該內存最大所能正常工作系統匯流排速度,比如PC100,那就說明此內存可以在系統匯流排為100MHz的電腦中同步工作。
與系統匯流排速度同步,也就是與系統時鍾同步,這樣就避免了不必要的等待周期,減少數據存儲時間。同步還使存儲控制器知道在哪一個時鍾脈沖期由數據請求使用,因此數據可在脈沖上升期便開始傳輸。SDRAM採用3.3伏工作電壓,168Pin的DIMM介面,帶寬為64位。SDRAM不僅應用在內存上,在顯存上也較為常見。
DDR SDRAM:嚴格的說DDR應該叫DDR SDRAM,人們習慣稱為DDR,部分初學者也常看到DDR SDRAM,就認為是SDRAM。DDR SDRAM是Double Data Rate SDRAM的縮寫,是雙倍速率同步動態隨機存儲器的意思。DDR內存是在SDRAM內存基礎上發展而來的,仍然沿用SDRAM生產體系,因此對於內存廠商而言,只需對製造普通SDRAM的設備稍加改進,即可實現DDR內存的生產,可有效的降低成本。
SDRAM在一個時鍾周期內只傳輸一次數據,它是在時鍾的上升期進行數據傳輸;而DDR內存則是一個時鍾周期內傳輸兩次次數據,它能夠在時鍾的上升期和下降期各傳輸一次數據,因此稱為雙倍速率同步動態隨機存儲器。DDR內存可以在與SDRAM相同的匯流排頻率下達到更高的數據傳輸率。
與SDRAM相比:DDR運用了更先進的同步電路,使指定地址、數據的輸送和輸出主要步驟既獨立執行,又保持與CPU完全同步;DDR使用了DLL(Delay Locked Loop,延時鎖定迴路提供一個數據濾波信號)技術,當數據有效時,存儲控制器可使用這個數據濾波信號來精確定位數據,每16次輸出一次,並重新同步來自不同存儲器模塊的數據。DDL本質上不需要提高時鍾頻率就能加倍提高SDRAM的速度,它允許在時鍾脈沖的上升沿和下降沿讀出數據,因而其速度是標准SDRA的兩倍。
從外形體積上DDR與SDRAM相比差別並不大,他們具有同樣的尺寸和同樣的針腳距離。但DDR為184針腳,比SDRAM多出了16個針腳,主要包含了新的控制、時鍾、電源和接地等信號。DDR內存採用的是支持2.5V電壓的SSTL2標准,而不是SDRAM使用的3.3V電壓的LVTTL標准。
DDR2的詳解
RDRAM:RDRAM(Rambus DRAM)是美國的RAMBUS公司開發的一種內存。與DDR和SDRAM不同,它採用了串列的數據傳輸模式。在推出時,因為其徹底改變了內存的傳輸模式,無法保證與原有的製造工藝相兼容,而且內存廠商要生產RDRAM還必須要迦納一定專利費用,再加上其本身製造成本,就導致了RDRAM從一問世就高昂的價格讓普通用戶無法接收。而同時期的DDR則能以較低的價格,不錯的性能,逐漸成為主流,雖然RDRAM曾受到英特爾公司的大力支持,但始終沒有成為主流。
RDRAM的數據存儲位寬是16位,遠低於DDR和SDRAM的64位。但在頻率方面則遠遠高於二者,可以達到400MHz乃至更高。同樣也是在一個時鍾周期內傳輸兩次次數據,能夠在時鍾的上升期和下降期各傳輸一次數據,內存帶寬能達到1.6Gbyte/s。
普通的DRAM行緩沖器的信息在寫回存儲器後便不再保留,而RDRAM則具有繼續保持這一信息的特性,於是在進行存儲器訪問時,如行緩沖器中已經有目標數據,則可利用,因而實現了高速訪問。另外其可把數據集中起來以分組的形式傳送,所以只要最初用24個時鍾,以後便可每1時鍾讀出1個位元組。一次訪問所能讀出的數據長度可以達到256位元組。
伺服器內存
伺服器內存也是內存(RAM),它與普通PC(個人電腦)機內存在外觀和結構上沒有什麼明顯實質性的區別,主要是在內存上引入了一些新的特有的技術,如ECC、ChipKill、熱插拔技術等,具有極高的穩定性和糾錯性能。
伺服器內存主要技術:
(1)ECC
在普通的內存上,常常使用一種技術,即Parity,同位檢查碼(Parity check codes)被廣泛地使用在偵錯碼(error detectioncodes)上,它們增加一個檢查位給每個資料的字元(或位元組),並且能夠偵測到一個字元中所有奇(偶)同位的錯誤,但Parity有一個缺點,當計算機查到某個Byte有錯誤時,並不能確定錯誤在哪一個位,也就無法修正錯誤。基於上述情況,產生了一種新的內存糾錯技術,那就是ECC,ECC本身並不是一種內存型號,也不是一種內存專用技術,它是一種廣泛應用於各種領域的計算機指令中,是一種指令糾錯技術。ECC的英文全稱是「 Error Checking and Correcting」,對應的中文名稱就叫做「錯誤檢查和糾正」,從這個名稱我們就可以看出它的主要功能就是「發現並糾正錯誤」,它比奇偶校正技術更先進的方面主要在於它不僅能發現錯誤,而且能糾正這些錯誤,這些錯誤糾正之後計算機才能正確執行下面的任務,確保伺服器的正常運行。之所以說它並不是一種內存型號,那是因為並不是一種影響內存結構和存儲速度的技術,它可以應用到不同的內存類型之中,就象前講到的「奇偶校正」內存,它也不是一種內存,最開始應用這種技術的是EDO內存,現在的SD也有應用,而ECC內存主要是從SD內存開始得到廣泛應用,而新的DDR、RDRAM也有相應的應用,目前主流的ECC內存其實是一種SD內存。
(2)Chipkill
Chipkill技術是IBM公司為了解決目前伺服器內存中ECC技術的不足而開發的,是一種新的ECC內存保護標准。我們知道ECC內存只能同時檢測和糾正單一比特錯誤,但如果同時檢測出兩個以上比特的數據有錯誤,則一般無能為力。目前ECC技術之所以在伺服器內存中廣泛採用,一則是因為在這以前其它新的內存技術還不成熟,再則在目前的伺服器中系統速度還是很高,在這種頻率上一般來說同時出現多比特錯誤的現象很少發生,正因為這樣才使得ECC技術得到了充分地認可和應用,使得ECC內存技術成為幾乎所有伺服器上的內存標准。
但隨著基於Intel處理器架構的伺服器的CPU性能在以幾何級的倍數提高,而硬碟驅動器的性能同期只提高了少數的倍數,因此為了獲得足夠的性能,伺服器需要大量的內存來臨時保存CPU上需要讀取的數據,這樣大的數據訪問量就導致單一內存晶元上每次訪問時通常要提供4(32位)或8(64位)比特以上的數據,一次性讀取這么多數據,出現多位數據錯誤的可能性會大大地提高,而ECC又不能糾正雙比特以上的錯誤,這樣就很可能造成全部比特數據的丟失,系統就很快崩潰了。IBM的Chipkill技術是利用內存的子結構方法來解決這一難題。內存子系統的設計原理是這樣的,單一晶元,無論數據寬度是多少,只對於一個給定的ECC識別碼,它的影響最多為一比特。舉個例子來說明的就是,如果使用4比特寬的DRAM,4比特中的每一位的奇偶性將分別組成不同的ECC識別碼,這個ECC識別碼是用單獨一個數據位來保存的,也就是說保存在不同的內存空間地址。因此,即使整個內存晶元出了故障,每個ECC識別碼也將最多出現一比特壞數據,而這種情況完全可以通過ECC邏輯修復,從而保證內存子系統的容錯性,保證了伺服器在出現故障時,有強大的自我恢復能力。採用這種內存技術的內存可以同時檢查並修復4個錯誤數據位,伺服器的可靠性和穩定得到了更加充分的保障。
(3)Register
Register即寄存器或目錄寄存器,在內存上的作用我們可以把它理解成書的目錄,有了它,當內存接到讀寫指令時,會先檢索此目錄,然後再進行讀寫操作,這將大大提高伺服器內存工作效率。帶有Register的內存一定帶Buffer(緩沖),並且目前能見到的Register內存也都具有ECC功能,其主要應用在中高端伺服器及圖形工作站上,如IBM Netfinity 5000。
伺服器內存典型類型
目前伺服器常用的內存有SDRAM和DDR兩種內存。