S3C2410處理器的擴(kuò)展設(shè)計(jì)
1.需求分析
S3C2410是32位處理器(指令一次能夠操作32位數(shù)據(jù)(運(yùn)算器一次可以處理32位數(shù)據(jù));通用寄存器多是32位寄存器;處理器內(nèi)部數(shù)據(jù)通道也是32位的;處理器外部數(shù)據(jù)總線寬度通常是32位的,地址總線寬度只是代表CPU尋址范圍大小,與CPU是多少位的無關(guān),也即32位CPU的地址總線不一定是32根的,例如對于s3c2410,每一個Bank對應(yīng)27根地址線,尋址能力為128MB,全部8個Bank總的尋址能力為1GB),所以為了最大限度的發(fā)揮其性能,內(nèi)存最好也是32位(指數(shù)據(jù)寬度)的,(當(dāng)然,在s3c2410的8個bank中,除了Bank0只能選擇16/32數(shù)據(jù)位寬外,其余的7個Bank均可以單獨(dú)選擇8/16/32位寬的存儲系統(tǒng))然而市面上很少有32位寬度的單片SDRAM,所以一般都采取兩片16位的SDRAM進(jìn)行位擴(kuò)展得到32位的SDRAM
2.設(shè)計(jì)電路圖
2410與K4S561632D相連
本系統(tǒng)擴(kuò)展后的內(nèi)存系統(tǒng)為16M×32Bit的(此處32Bit是指數(shù)據(jù)位寬度,而非地址位,可以理解SDRAM數(shù)據(jù)位寬度與地址線的條數(shù)無關(guān),明白數(shù)據(jù)線和地址線的區(qū)別,對于下面地址線的連接方式的理解非常重要
3.初始化程序代碼
子函數(shù)說明:初始化內(nèi)存控制器
memsetup:
mov r1,#MEM_CTL_BASE
adrl r2,mem_cfg_val
add r3,r1,#52
1:
ldr r4,[r2],#4 @將地址為R2的內(nèi)存單元數(shù)據(jù)讀取到R4中,然后r2=r2 +4
str r4,[r1],#4 @將r4的數(shù)據(jù)寫入到r1的內(nèi)存單元,然后r1=r1+4
cmp r1,r3 @比較R1,R3是否設(shè)置完所有的13個寄存器。
bne 1b @如果沒有復(fù)制完,就繼續(xù)
mov pc,lr @復(fù)制完后返回,b指令則不行。區(qū)別bl。
@*****************************************************************
子函數(shù)說明:復(fù)制代碼到SDRAM,將SRAM中的4K數(shù)據(jù)全部復(fù)制到SDRAM,
@ SRAM起始地址為0x00000000,SDRAM的起始地址為0x30000000
@*****************************************************************
copy_steppingstone_to_sdram:
mov r1,#0 @設(shè)置R1為SRAM的起始地址為0x00000000
ldr r2,=SDRAM_BASE @設(shè)置R2為SDRAM的起始地址為0設(shè)置R1為0X300 00000
mov r3 ,#4*1024 @設(shè)置R3為4K
1:
ldr r4,[r1],#4 @從SRAM中讀取4字節(jié)的數(shù)據(jù)到R4中,然后r1=r 1+4
str r4,[r2],#4 @將r4中的4字節(jié)數(shù)據(jù)復(fù)制到SDRAM中,然后r2= r2+4
cmp r1,r3 @判斷是否完成:SRAM的地址是否等于末地址> 。
bne 1b @若沒有完成,繼續(xù)復(fù)制
mov pc,lr @返回
.align 4
@******************************************************
@存儲控制器13個寄存器的設(shè)置值
@******************************************************
mem_cfg_val:
.long 0x22011110 @BWSCON :
.long 0x00000700 @BANKCON0
.long 0x00000700 @BANKCON1
.long 0x00000700 @BANKCON2
.long 0x00000700 @BANKCON3
.long 0x00000700 @BANKCON4
.long 0x00000700 @BANKCON5
.long 0x00018005 @BANKCON6
.long 0x00018005 @BANKCON7
.long 0x008e07a3 @REFRESH
.long 0x000000b1 @BANKSIZE
.long 0x00000030 @MRSRB6
.long 0x00000030 @MRSRB7
2.擴(kuò)展為64MB的NAND Flash用作啟動ROM和大容量存儲
1.需求分析
NandFlash接口信號較少
* 數(shù)據(jù)寬度只有8Bit,沒有地址總線。地址和數(shù)據(jù)總線復(fù)用,串行讀取
NandFlash地址結(jié)構(gòu)
* NandFlash設(shè)備的存儲容量是以頁(Page)和塊(Block)為單位的。
* Page=528Byte (512Byte用于存放數(shù)據(jù),其余16Byte用于存放其他信息,如塊好壞的標(biāo)記、塊的邏輯地址、頁內(nèi)數(shù)據(jù)的ECC校驗(yàn)和等)。
* Block=32Page
* 容量為64MB的NandFlash存儲結(jié)構(gòu)為:512Byte×32Page×4096Block
* NandFlash以頁為單位進(jìn)行讀和編程(寫)操作,一頁為512Byte;以塊為單位進(jìn)行擦除操作,一塊為512Byte*32page=16KB
* 對于64MB的NAND設(shè)備,需要26根地址線,由于NAND設(shè)備數(shù)據(jù)總線寬度是8位的,因此必須經(jīng)過4個時鐘周期才能把全部地址信息接收下來
* 可以這么說,第一個時鐘周期給出的是目標(biāo)地址在一個page內(nèi)的偏移量,而后三個時鐘周期給出的是頁地址。
* 由于一個頁內(nèi)有512Byte,需要9bit的地址尋址,而第一個時鐘周期只給出了低8bit,最高位A8由不同的讀命令(Read Mode2)來區(qū)分的。
NandFlash的命令
2.電路圖設(shè)計(jì)
擴(kuò)展芯片:HY57561620
3.NAND FLASH配置寄存器初始化
MemCfgInit(); //設(shè)置NAND FLASH的配置寄存器
該函數(shù)原型:
void MemCfgInit(void)
{
//rCLKCON |= 0xffff0;
//enable nand flash control, initilize ecc, chip disable,
rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7);
}
使能nand flash控制,初始化,芯片禁能
1<<15,NFCONF寄存器是NAND FLASH的配置寄存器
第15位置1,是使能nand flash控制寄存器
此位在芯片開始工作,自動導(dǎo)入的時候?qū)⒈蛔詣忧辶悖?br />如果想訪問nand flash存儲,該位必須置一。
14,13位為保留位
1<<12,第12位置1,初始化ECC,S3C2410僅僅支持512個字節(jié)的ECC校驗(yàn),
所以每512個字節(jié),需要設(shè)置一次ECC初始化。
ECC是Error Checking and Correcting,錯誤檢查與校驗(yàn)
1<<11,第11位置1,NAND flash nFCE 設(shè)置為不活動,即nand flash存儲芯片禁能
7<<8,即10,9,8位設(shè)置為111,
這3位是CLE ALE信號的持續(xù)時間值設(shè)置,持續(xù)時間=HCLK*(TACLS + 1)
TACLS即111(b)=7;
7位為保留位
7<<4,即6,5,4位設(shè)置為111,為TWRPH0 周期設(shè)置值,duration=HCLK*
(TWRPH0+1)
3位為保留位
7 位第2,1,0,設(shè)置為111,為TWRPH1周期設(shè)置值,duration=HCLK*(TWRPH0+1)
S3C2410是32位處理器(指令一次能夠操作32位數(shù)據(jù)(運(yùn)算器一次可以處理32位數(shù)據(jù));通用寄存器多是32位寄存器;處理器內(nèi)部數(shù)據(jù)通道也是32位的;處理器外部數(shù)據(jù)總線寬度通常是32位的,地址總線寬度只是代表CPU尋址范圍大小,與CPU是多少位的無關(guān),也即32位CPU的地址總線不一定是32根的,例如對于s3c2410,每一個Bank對應(yīng)27根地址線,尋址能力為128MB,全部8個Bank總的尋址能力為1GB),所以為了最大限度的發(fā)揮其性能,內(nèi)存最好也是32位(指數(shù)據(jù)寬度)的,(當(dāng)然,在s3c2410的8個bank中,除了Bank0只能選擇16/32數(shù)據(jù)位寬外,其余的7個Bank均可以單獨(dú)選擇8/16/32位寬的存儲系統(tǒng))然而市面上很少有32位寬度的單片SDRAM,所以一般都采取兩片16位的SDRAM進(jìn)行位擴(kuò)展得到32位的SDRAM
2.設(shè)計(jì)電路圖
2410與K4S561632D相連
本系統(tǒng)擴(kuò)展后的內(nèi)存系統(tǒng)為16M×32Bit的(此處32Bit是指數(shù)據(jù)位寬度,而非地址位,可以理解SDRAM數(shù)據(jù)位寬度與地址線的條數(shù)無關(guān),明白數(shù)據(jù)線和地址線的區(qū)別,對于下面地址線的連接方式的理解非常重要
1:
@*****************************************************************
子函數(shù)說明:復(fù)制代碼到SDRAM,將SRAM中的4K數(shù)據(jù)全部復(fù)制到SDRAM,
copy_steppingstone_to_sdram:
.align
@******************************************************
2.擴(kuò)展為64MB的NAND Flash用作啟動ROM和大容量存儲
* 數(shù)據(jù)寬度只有8Bit,沒有地址總線。地址和數(shù)據(jù)總線復(fù)用,串行讀取
* NandFlash設(shè)備的存儲容量是以頁(Page)和塊(Block)為單位的。
* Page=528Byte (512Byte用于存放數(shù)據(jù),其余16Byte用于存放其他信息,如塊好壞的標(biāo)記、塊的邏輯地址、頁內(nèi)數(shù)據(jù)的ECC校驗(yàn)和等)。
* Block=32Page
* 容量為64MB的NandFlash存儲結(jié)構(gòu)為:512Byte×32Page×4096Block
* NandFlash以頁為單位進(jìn)行讀和編程(寫)操作,一頁為512Byte;以塊為單位進(jìn)行擦除操作,一塊為512Byte*32page=16KB
* 對于64MB的NAND設(shè)備,需要26根地址線,由于NAND設(shè)備數(shù)據(jù)總線寬度是8位的,因此必須經(jīng)過4個時鐘周期才能把全部地址信息接收下來
* 由于一個頁內(nèi)有512Byte,需要9bit的地址尋址,而第一個時鐘周期只給出了低8bit,最高位A8由不同的讀命令(Read Mode2)來區(qū)分的。
NandFlash的命令
2.電路圖設(shè)計(jì)
擴(kuò)展芯片:HY57561620
3.NAND
MemCfgInit();
該函數(shù)原型:
void
{
}
使能nand
1<<15,NFCONF寄存器是NAND
第15位置1,是使能nand
此位在芯片開始工作,自動導(dǎo)入的時候?qū)⒈蛔詣忧辶悖?br />如果想訪問nand
14,13位為保留位
1<<12,第12位置1,初始化ECC,S3C2410僅僅支持512個字節(jié)的ECC校驗(yàn),
所以每512個字節(jié),需要設(shè)置一次ECC初始化。
ECC是Error
1<<11,第11位置1,NAND
7<<8,即10,9,8位設(shè)置為111,
這3位是CLE
TACLS即111(b)=7;
7位為保留位
7<<4,即6,5,4位設(shè)置為111,為TWRPH0
(TWRPH0+1)
3位為保留位
7
評論