S3c2440是三星公司推出的一款基于ARM920T的處理器,采用ARM內(nèi)核,不同于單片機(jī),無片上rom與ram,必須搭配相應(yīng)的外圍電路進(jìn)行使用,現(xiàn)在,讓我們從零開始進(jìn)行這一塊MCU的學(xué)習(xí),為了入門簡單方便,前期我不會搭載任何操作系統(tǒng),本手冊寫到哪算哪.
1.什么是nor flash啟動和nand flash啟動
在任何視屏教程里面,都會告訴你一個(gè)開關(guān)左右選擇就能norflash啟動或者nand flash啟動,norflash啟動能直接運(yùn)行代碼,nand flash啟動不能直接運(yùn)行代碼,可是為什么呢?
要知道這一點(diǎn),首先要明白nandflash和norflash的區(qū)別,首先,norflash是隨機(jī)存儲介質(zhì),也就是說,對norflash的操作時(shí)可以進(jìn)行任意單字節(jié)的讀寫的,而nanaflash是塊存儲介質(zhì),對nandflash的讀寫只能以塊的方式讀寫,也就是說,nand要修改一個(gè)字節(jié),必須重寫整個(gè)塊
由此我們就可以知道,nand flash不可能作為代碼直接執(zhí)行的介質(zhì)了,理論上,就算我們通過電路實(shí)現(xiàn)了nand flash執(zhí)行代碼也不可能,因?yàn)榇a執(zhí)行很重要的一點(diǎn)是可以隨機(jī)的對任意一個(gè)字節(jié)的數(shù)據(jù)進(jìn)行任意修改,而nand寫一個(gè)字節(jié)要重寫整個(gè)塊,這速度太慢了,還有一個(gè)原因,因?yàn)槟承┕に囈蛩氐挠绊?nandflash生產(chǎn)過程中就可能出現(xiàn)壞塊,另外,nandflash在多次擦寫中也可能出現(xiàn)壞塊,所以這也決定了nand不可能實(shí)現(xiàn)直接運(yùn)行代碼,只能做存儲器的功能,以下是nandflash電路(TQ2440)
可見,nand flash分為八位和16位,地址線和數(shù)據(jù)線復(fù)用,依靠控制總線來切換地址數(shù)據(jù)時(shí)序,主要的控制線有
CLE:命令鎖存使能線,輸入命令時(shí)使用
ALE:地址鎖存使能,輸入地址時(shí)使用
nFCE:芯片使能,讀寫芯片時(shí),這一位必須有效
NFRE:連接NRE讀使能,讀數(shù)據(jù)之前,要先讓nre有效
NFWE:寫使能,寫數(shù)據(jù)的時(shí)候這根線有效
RNB :就緒/忙標(biāo)志,主要用于發(fā)送完編程/擦除命令后,檢測操作是否完成
WP :寫保護(hù)使能
說完nandflash說說norflash,首先norflash的地址線和數(shù)據(jù)線是分開的,其次,是可以單字節(jié)讀取寫入的,另外,可靠性好,不易出現(xiàn)壞塊,使用時(shí)間更長,(norflash上帶的是通用sdram接口)
電路圖如下,
因?yàn)槭?6位數(shù)據(jù),所以沒有接data0的必要,初始地址是0x00000000,
OE:讀使能
WE寫使能
片選接了GCS0,那么norflash尋址范圍是多少呢?首先,選用的芯片是EN29系列,
該系列芯片說明書中說明
可見,NORFLASH是16M的,但是尋址范圍是不是16M我們還需要確認(rèn)NGCS0的選通時(shí)間,查看memory說明,有這樣一段
也就是說2440的NGCS0分區(qū)大小為128M,驅(qū)動16M足足夠了,所以,我們可以說,norflash啟動,16M完全可用
接下來說一下SDRAM,電路圖如下
這是兩塊相同的芯片,兩塊16位芯片合起來將數(shù)據(jù)總線擴(kuò)展到32位
可以看到,地址線和數(shù)據(jù)線是分離的,控制接口主要由以下幾根線組成
CKE:INPUT控制norflash內(nèi)部時(shí)鐘的使能與禁止,從而進(jìn)入三種狀態(tài),掉電,掛起,自刷新(為了保持內(nèi)部數(shù)據(jù),設(shè)備自身也需要一個(gè)時(shí)鐘來進(jìn)行數(shù)據(jù)自刷新,和外部讀寫時(shí)鐘并不是一個(gè)概念)
CLK:INPUT外部讀寫時(shí)鐘,用于外部讀寫同步
其他的控制總線想要明白必須要先明白SRAM的架構(gòu),雖然不用去設(shè)計(jì),但是明白SDRAM架構(gòu)看不懂這個(gè)電路圖,來,我們說說
以下是標(biāo)準(zhǔn)4bank的SDRAM內(nèi)部結(jié)構(gòu)
其寫入原理如下
要存取數(shù)據(jù)時(shí),先選中一行( wordline加高電位),于是這一行上掛著的所有的行選通NMOS都導(dǎo)通,電容中的數(shù)據(jù)就沿著bitline進(jìn)入感應(yīng)放大器,經(jīng)其放大后到達(dá)列選通NMOS處。接下來,當(dāng)某根CSL置高后,相應(yīng)的列選通NMOS就導(dǎo)通,數(shù)據(jù)沿著bifline繼續(xù)向IO接口傳,或者外面的數(shù)據(jù)立即寫入存儲陣列。當(dāng)然,具體實(shí)現(xiàn)肯定更復(fù)雜,但是基本原理就是這樣
那么,這些控制線什么作用呢
LDQM UDQM:數(shù)據(jù)屏蔽,當(dāng)LDQM為高,數(shù)據(jù)線上低8位被屏蔽UDQM高八位被屏蔽,這樣就可以進(jìn)行bank選擇了(不管內(nèi)存怎么設(shè)計(jì),最終還是八位一個(gè)字節(jié),所以需要屏蔽)
接下來我們看看SDRAM尋址,通過電路可以看到,WBE0 1 2 3分別四根線控制,也就是說,同一個(gè)地址,選擇不同的WEB,可以依次讀出0-7 8-15 16-23 24-31四個(gè)八位數(shù)據(jù),CPU內(nèi)部自動將這四個(gè)數(shù)據(jù)組合起來,形成一個(gè)32位數(shù)據(jù),所以,實(shí)際上,依次讀寫操作獲得或者寫入數(shù)據(jù)單純數(shù)據(jù)上就要四步,另外,地址寫入也分兩步,之前說了,SDRAM尋址分為行和列,所以寫入地址分為寫入行地址,寫入列地址,簡化來看,一共就是6步(沒有說各種控制總線過程,大家有興趣可以研究)
連接的ba0 ba1
首先四字節(jié)對其尋址(32位數(shù)據(jù)線),那么DAT0 DAT1的尋址線肯定是0,所以沒有接上的必要,24 25 26決定最高位,如果為64M r601 r604接上,地址線24-25連接,CPU設(shè)置0x30000000為基地址的話,最高地址是0x33FFFFFF,(0x30000000-0x33ffffff) = 0x3ffffff個(gè)字節(jié),一共就是64M字節(jié)
注意,這中間涉及到一個(gè)比較復(fù)雜的解碼過程,就是將物理地址解碼成總線地址,(兩個(gè)數(shù)據(jù)),并不是說25 26連接了地址空間就絕對是0X36FFFFFF了,具體過程,請查閱相關(guān)資料