国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

S5PV210 DDR2初始化 28個步驟總結(jié)

發(fā)布者:HeavenlyMelody最新更新時間:2024-12-04 來源: cnblogs關(guān)鍵字:S5PV210  DDR2  初始化 手機看文章 掃描二維碼
隨時隨地手機看文章

看了一套視頻,感覺DDR這個部分將的非常細(xì)致也很好,于是把視頻內(nèi)容花了一個多星期作了總結(jié)。

這個視頻就是不知道是誰講的,做好事不留名啊~~~那位知道告訴我哈~~

 

平臺:S5PV210

DDR: 兼容 三星的一塊芯片——NT5TU64M16GG-DDR2-1G-G-R18-Consumer

 

//---------28個步驟如下

step1.  To provide stable power for controller and memory device,

the controller must assert and hold CKE to a logic low level.

Then apply stable clock. Note: XDDR2SEL should be High level to hold CKE to low.

為了提供穩(wěn)定的電源給控制器和內(nèi)存設(shè)備,

控制器必須確保CKE維持低電平。

然后提供一個穩(wěn)定的時鐘。注意:XDDR2SEL需保持高來維持CKE為低

說明:XDDR2SEL在電路圖設(shè)計中,一般直接拉到了VCC。

01310e11-c458-4303-8f52-769943535af8[9](圖中NC表示沒焊接)

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step2. Set the PhyControl0.ctrl_start_point and PhyControl0.ctrl_inc  bit-fields to correct value according to clock frequency. Set the PhyControl0.ctrl_dll_on bit-field to ‘1’ to turn on the PHY DLL.

根據(jù)時鐘的頻率,設(shè)置PhyControl0.ctrl_start_point and PhyControl0.ctrl_inc 字段為正確的值。

設(shè)置PhyControl0.ctrl_dll_on字段為1開啟PHY DLL。

7ae554c2-4e3d-4b42-9db1-4bdd08f65827[12]

ldr r1, =0x00101000 @PhyControl0 DLL parameter setting, manual 0x00101000

str r1, [r0, #DMC_PHYCONTROL0]

說明:

1、PhyControl0.ctrl_start_point and PhyControl0.ctrl_inc 手冊上說(This value should be 0x10 );ctrl_start_point 其實是開始相移的地方,ctrl_inc 每次相移的格數(shù)。

2、PhyControl0.ctrl_dll_on為1,開啟dll。但是demo程序中此時并未打開dll,而是把打開這步驟放在了靠后的地方。

3、PhyControl0.ctrl_dfdqs為1,開啟差分信號功能(具體需看硬件,支持差分,還是單端)

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step3. DQS Cleaning: Set the PhyControl1.ctrl_shiftc  and PhyControl1.ctrl_offsetc bit-fields to correct value according to clock frequency and memory tAC parameters.

DQS清除:設(shè)置the PhyControl1.ctrl_shiftc and PhyControl1.ctrl_offsetc

位字段,根據(jù)時鐘頻率和內(nèi)存TAC參數(shù)。

DQS Cleaning 示意圖如下:

497d21ad-c870-4aca-a601-e9e53decd2f3[4]

DQS Cleaning,其實就是想中和調(diào)板級的一些延時,如PCB延時等~~

ldr r1, =0x00000086 @PhyControl1 DLL parameter setting, LPDDR/LPDDR2 Case

str r1, [r0, #DMC_PHYCONTROL1]

bbb43490-e31e-406e-8bd8-e6c1b740d530[4]

說明:

1、ctrl_shiftc是粗條,通過控制器的DLL調(diào)整DQS的相移。(0x6 when DDR2 @200MHz)

2、ctrl_offsetc是精調(diào),在ctrl_shiftc的基礎(chǔ)上通過控制器的DLL調(diào)整DQS的相移。

3、ctrl_ref 是DLL同步完成之后需要的一個延時。默認(rèn)是4這設(shè)置成8.

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step4. Set the PhyControl0.ctrl_start bit-field to ‘1’.  

開啟PhyControl0.ctrl_start 位

96b8a15c-5551-4eed-9072-3bd7569c1747[4]

在dame代碼中此時才打開ctrl_dll_on

ldr r1, =0x00101002 @PhyControl0 DLL on

str r1, [r0, #DMC_PHYCONTROL0]

然后打開ctrl_start

ldr r1, =0x00101003 @PhyControl0 DLL start

str r1, [r0, #DMC_PHYCONTROL0]

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在配置,并開啟之后,還需要等待一段時間,讓DLL工作穩(wěn)定的,在手冊中到了第12步才去檢查DLL是否穩(wěn)定,而在damo程序中將

11和12步的內(nèi)容提前到了第4步的后面,這樣做主要是為了結(jié)構(gòu)上的統(tǒng)一,也就是是一次性將DLL配置完。

而手冊里那樣做是為了節(jié)省配置時間,可以在配置其他的過程中等待DLL穩(wěn)定。我們就先按照damo程序順序進(jìn)行分析,將12步提到前面來~~

step11 and step12

step11 .  Wait for the PhyStatus0.ctrl_locked  bit-fields to change to ‘1’. Check whether PHY DLL is locked.

step12 .   PHY DLL compensates the changes of delay amount caused by Process, Voltage and Temperature (PVT)  

  variation during memory operation. Therefore, PHY DLL  should not be off for reliable operation. It can be off  

  except runs at low frequency. If off mode is used, set the PhyControl0.ctrl_force  bit-field to correct value  

  according to the PhyStatus0.ctrl_lock_value[9:2] bit-field to fix delay amount. Clear the  

  PhyControl0.ctrl_dll_on bit-field to turn off PHY DLL.

7dc2b8e9-c867-4571-8f34-8eb035eec960[4]

find_lock_val:

ldr r1, [r0, #DMC_PHYSTATUS] @Load Phystatus register value

and r2, r1, #0x7

cmp r2, #0x7 @Loop until DLL is locked

bne find_lock_val

如果PhyStatus0的第3位全部為1,就表示我們之前配置的DLL按照我們設(shè)置的偏移(相對CLK的),已經(jīng)工作穩(wěn)定了。DLL為了完成這個過程,首先得不停的采集

clk,然后再不停的微調(diào),這個過程是非常耗電的。所以在調(diào)整完成之后,DLL不需要在去跟蹤clk了而是記錄與CLK之前的一個差值,再保持這個差值即可,于是有了下面的程序:

and r1, #0x3fc0      @讀出PhyStatus0的[13:14]

mov r2, r1, LSL #18     @左移18位,將PhyStatus0的[13:14]放到PhyControl0[31:24]

orr r2, r2, #0x100000     @恢復(fù)PhyControl0.ctrl_inc的值

orr r2 ,r2, #0x1000     @恢復(fù)PhyControl0.ctrl_istart_point的值

orr r1, r2, #0x3 @恢復(fù)PhyControl0低2位的值

str r1, [r0, #DMC_PHYCONTROL0] @存之

這段代碼的含義就是把PhyStatus0的[13:14]為讀出,將這段數(shù)據(jù)放到PhyControl0[31:24].

PhyStatus0的[13:14]的值是鎖定完成后DQS與CLK的一個差值,把這個差值讀出來之后放到PhyControl0[31:24],那么控制器就不再通過跟蹤clk的方式,

而是通過固定延時的方式產(chǎn)生這個差值。

1dcea715-550d-43bd-aac3-bdc948e8b83e[4]

說明:

1、DQS是DLL根據(jù)clk產(chǎn)生的信號,這個信號也被稱之為數(shù)據(jù)眼,DQS的主要作用就是告訴控制器何時讀/寫數(shù)據(jù)。確保數(shù)據(jù)的穩(wěn)定接收和發(fā)送。

小節(jié):

    到了這里,所以關(guān)于DLL的部分就配置完了,主要用到的寄存器只有3個:PhyControl0,PhyControl1,和PhyStatus0。

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

12步之后再才開始之前的第5步:

step5. Set the ConControl. At this moment, an auto refresh counter should be off. 

設(shè)置ConControl,此時應(yīng)關(guān)閉自刷新計數(shù)器。

707e9763-331a-4b12-8a25-7536348045e0[4]

ldr r1, =0x0FFF2010 @ConControl auto refresh off

str r1, [r0, #DMC_CONCONTROL]

其中aref_en為0時就表示關(guān)閉自刷新計數(shù)器。

rd_fetch的設(shè)置是針對FIFO的讀取時間的,設(shè)置成2更保險一點~~(默認(rèn)值是1)

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step6. Set the MemControl. At this moment, all power down modes should be off.

配置MemControl比較重要的就是以下這幾位,突發(fā)長度,chip個數(shù),總線寬度,內(nèi)存類型。

其中一個MCD最多可以控制兩個chip,這里根據(jù)開發(fā)板情況進(jìn)行選擇,這里num_chip位設(shè)置為1.

f7e3618d-8465-4591-a40e-b757fae1bead[4]

d84f9e30-2df9-4258-b5df-25b94ed35c80[4]

#define DMC0_MEMCONTROL 0x00202400  // MemControl BL=4, 1Chip, DDR2 Type, dynamic self

ldr r1, =DMC0_MEMCONTROL @MemControl BL=4, 1 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down off

str r1, [r0, #DMC_MEMCONTROL]

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step7. Set the MemConfig0  register. If there are two external memory chips, set the MemConfig1 register.

e1e7858a-d449-4817-9c89-189d9397aa73[4]

#define DMC0_MEMCONFIG_0 0x20F01323 // MemConfig0

ldr r1, =DMC0_MEMCONFIG_0 @MemConfig0 256MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed

str r1, [r0, #DMC_MEMCONFIG0]

這個寄存器的每一位都比較重要:

1、chip_base DRR的映射地址,默認(rèn)0x2000_0000

ead4a6bd-6a1d-40fe-84b1-7e37e740b7d9[4]

2、chip_mask 確定一個chip的映射范圍大小。1表示屏蔽,0表示不屏蔽。

如chip_mask  = F0表示屏蔽高4位,那么映射大小就是:

0X0~0X0FFF_FFFF,也就是256M

如chip_mask  = E0表示屏蔽高3位,那么映射大小就是:

0X0~0X1FFF_FFFF,也就是512M

3、chi_map表示內(nèi)存的排列方式:(一般選擇0,線性排列)

004f1e4a-d794-42b9-95b0-f8ff28d9fd3a[4]

4、chip_col 表示列的位數(shù)

5、chip_row表示行的位數(shù)

6、chip_bank 表示一塊芯片的bank數(shù)

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step8. Set the PrechConfig  and PwrdnConfig registers.

現(xiàn)在可以開始配置PrechConfig預(yù)充電寄存器和 Pwrdown寄存器,但是damo程序中把 PwrdnConfig registers.的

配置放到了最后一步,所以這里先只講述PrechConfig的配置。

971ecd99-05b3-4663-992e-a49add69b4bc[4]

ldr r1, =0xFF000000 @PrechConfig

str r1, [r0, #DMC_PRECHCONFIG]

這個寄存器用的其實是默認(rèn)值,具體位的含義可以參考手冊.

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step9. Set the TimingAref,  TimingRow,  TimingData and TimingPower registers according to memory AC  parameters. 

9.1 TimingAref

706d5a7e-e859-4949-ba6e-d7fb295735cc[4]

d4b36233-9c73-4136-ab92-02cc16d7e186[4]

#define DMC0_TIMINGA_REF 0x00000618

ldr r1, =DMC0_TIMINGA_REF @TimingAref

str r1, [r0, #DMC_TIMINGAREF]

因為ddr是需要不斷的刷新保持?jǐn)?shù)據(jù)的,而這個刷新間隔不能太長,一般ddr這個間隔時間參數(shù)就是7.8us,具體時間查看ddr手冊。也就是說最長7.8us必須刷新一次。我們不能直接把7.8us告訴arm,必須轉(zhuǎn)換成時鐘周期數(shù)告訴給arm。及把時鐘周期數(shù)放到TimingAref.t_refi字段即可。那么周期如何算?首先你得知道此時提供MCD的時鐘是多大,比如是133M,那么周期數(shù)就是7.8 us * 133 MHz = 1038 = 0x40E;如果時鐘是200M那么周期數(shù)就是7.8 us * 200MHz = 1,560= 0x618;

9.2 TimingRow,這個寄存器主要是配置一些ddr時序參數(shù)了,這些參數(shù)需要到具體型號的ddr手冊中去一個個的找~~(當(dāng)然同樣,時間要轉(zhuǎn)換為時鐘周期數(shù))

98945e96-837d-4d64-8bd0-720eae3ff7d9[4]

#define DMC0_TIMING_ROW 0x28233287 // TimingRow for @200MHz

ldr r1, =DMC0_TIMING_ROW @TimingRow for @200MHz

str r1, [r0, #DMC_TIMINGROW]

9.3 TimingData 這個寄存器和上面寄存器一樣,需要到具體型號的ddr手冊中去一個個的找

74871ad7-031a-4d29-8faa-dea916e24d8f[4]

其中需要注意的是cl,也就是CAS,

281bf73e-e649-47ae-9615-560fb89be812[4]

ddr手冊中明確說明CAS可以配置為3,4,5,6這幾個時鐘周期。值得注意的是,目前我們配置的ddr控制器的CAS,之后還需配置ddr芯片本身的CAS。

所以,我們必須確保這兩個CAS一致!

還有就是對于DDR2而言e6c2e3fe-8209-42f1-a266-71a66e520e1e[4],所以wl這參數(shù)不用配置。但是對于低功耗的ddr就必須配置了。

#define DMC0_TIMING_DATA 0x23240304 // TimingData CL=3

ldr r1, =DMC0_TIMING_DATA @TimingData CL=3

str r1, [r0, #DMC_TIMINGDATA]

9.4 TimingPower 也是一樣

6a47a8dc-6292-4ecc-9ce8-e9ecc8e8a9da[4]

#define    DMC0_TIMING_PWR        0x09C80232    // TimingPower

ldr r1, =DMC0_TIMING_PWR @TimingPower

str r1, [r0, #DMC_TIMINGPOWER]

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step10 If QoS scheme is required, set the QosControl0~15 and QosConfig0~15 registers.

現(xiàn)在不用Qos,跳過了~~。。。

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step11 and step12  被移到了第5步之前了~~

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step13.  Confirm whether stable clock is  issued minimum 200us after power on

由于step11 and step12被提到前面了,所以現(xiàn)在可以不等了~~

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step14~26 這些都是配置ddr芯片(而不是ddr控制器了),都是通過XXX寄存器向ddr芯片發(fā)送命令。

step14. Issue a NOP command using the DirectCmd register to assert and to hold CKE to a logic high level.

ldr r1, =0x07000000 @DirectCmd chip0 Deselect

str r1, [r0, #DMC_DIRECTCMD]

發(fā)送nop指令將CKE置高

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

step15.  Wait for minimum 400ns.

因為此前CKE一直為高,所以這里無需再等。

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[1] [2]
關(guān)鍵字:S5PV210  DDR2  初始化 引用地址:S5PV210 DDR2初始化 28個步驟總結(jié)

上一篇:S5PV210 LCD顯示
下一篇:uboot啟動過程理解

推薦閱讀最新更新時間:2025-07-08 17:50

第四章之S5PV210內(nèi)存初始化
1,既然UART可以打印出信息來,那我們可以打印內(nèi)存中的值。在506行添加如下代碼: 1 2 /***UART transmit function by xu ***/ 3 display_addr_dat: 4 5 ldr r0, 6 7 ldr r1,=0xE2900020 8 9 ldr r2,=0x30 10 str r2, @UTXH0='0' 11 12 ldr r2,=0x78 13 str r2, @UTXH0='x' 14 15 ldr r3,=28 16 17 display_loop_count: 18
[單片機]
第四章之<font color='red'>S5PV210</font>內(nèi)存<font color='red'>初始化</font>
高速數(shù)據(jù)傳輸接口DDR2 I/F 的特性及測試
前言 近年來隨著視頻設(shè)備、個人電腦的發(fā)展,在這些設(shè)備上進(jìn)行的3d處理,視頻交換以及復(fù)雜的運算導(dǎo)致數(shù)據(jù)量急劇增大,為了滿足這些數(shù)據(jù)要在處理器、memory和外圍設(shè)備之間的高速交換,近年來出現(xiàn)了多種多樣的高速接口。同時,由于數(shù)據(jù)的高速傳輸,也給測試帶來的新技術(shù)上及測試成本上的挑戰(zhàn)。本文將基于advantest的t6500系列測試系統(tǒng),針對最近出現(xiàn)的高速數(shù)據(jù)傳輸接口ddr2 i/f的特性及測試進(jìn)行簡單介紹。 高速memory i/f概要 為了簡單說明,表1列出了從1990年至今 pc memory總線,微處理器,memory單元以及高速接口的對應(yīng)情況。從表中可以看出傳輸總線的速度隨著從sdr到ddr2的轉(zhuǎn)變而迅速提高。隨著數(shù)據(jù)量的
[測試測量]
高速數(shù)據(jù)傳輸接口<font color='red'>DDR2</font> I/F 的特性及測試
DDR2好日子終結(jié)? DDR3加快腳步
  本周二,中國臺灣DRAM產(chǎn)業(yè)官員表示,今年第三季度,DDR3內(nèi)存芯片將被應(yīng)用在更多的PC中。   今年,Inotera Memories開始試生產(chǎn)1Gb DDR3 DRAM芯片,計劃在第三季度大批量生產(chǎn)這種芯片,以滿足日益增長的需求。Inotera總裁查爾斯在一次新聞發(fā)布會上說,DDR3芯片已經(jīng)有需求了,而且會越來越大   Nanya Technology一名副總裁PaiPei-lin預(yù)計,第四季度30%的DRAM芯片需求將是DDR3。在DRAM芯片市場上這是一個相當(dāng)大的份額,標(biāo)志著DDR2的好日子將很快結(jié)束了。   在過去數(shù)年中,DDR2一直是PC市場主流。DDR3是升級版標(biāo)準(zhǔn),提供更快的數(shù)據(jù)傳輸速度、更大和帶寬,同時
[焦點新聞]
S5PV210開發(fā) -- 啟動流程
講完啟動模式、燒寫更新,接下來我們看一下啟動流程。 參看:S5PV210開發(fā) -- 燒寫/啟動模式 參看:S5PV210開發(fā) -- 通過 SD 卡燒寫 參看:S5PV210開發(fā) -- 通過 DNW、fastboot 燒寫 參看:DM368開發(fā) -- Bootloader 開發(fā)(轉(zhuǎn)畢設(shè)) 學(xué)習(xí)S5PV210 啟動流程部分,需要查看芯片手冊和相關(guān)的文檔。 下載:相關(guān)文檔 一、iROM啟動方式簡介 在講燒寫/啟動模式的時候其實已經(jīng)提到,S5PV210 采用 iROM 啟動方式進(jìn)行啟動,支持從MoviNAND/iNand, MMC/SD Card ,pure Nand, eMMC, eSSD, UART and U
[單片機]
<font color='red'>S5PV210</font>開發(fā) -- 啟動流程
u-boot中nandflash初始化流程分析
下面對nand flash的初始化代碼nand_init()進(jìn)行分析: 1.如果定義(CONFIG_COMMANDS & CFG_CMD_NAND)沒定義(CFG_NAND_LEGACY) 則start_armboot()調(diào)用driver/nand/nand.c中的nand_init(),否則如果定義(CONFIG_COMMANDS & CFG_CMD_NAND)并且有定義了CFG_NAND_LEGACY,則調(diào)用自己定義的nand_init()。在我當(dāng)前的情景中是使用driver/nand/nand.c中的nand_init()。 2.nand_init()調(diào)用本文件中的nand_init_chip()對nand進(jìn)行初始化。
[單片機]
STM8L 芯片 DA 功能初始化注意
最近項目中,使用到了STM8L151芯片的DAC的功能。參照官網(wǎng)的例程后,DA輸出還是不對。 后來也是百度其他大神的資料,發(fā)現(xiàn)有個大神中,代碼多了打開比較器時鐘的語句。我在代碼中也加入該語句,最后結(jié)果對了 下面是DAC的初始化代碼 void DAC_Config(void) { CLK_PeripheralClockConfig(CLK_Peripheral_DAC, ENABLE); //打開DAC電源 CLK_PeripheralClockConfig(CLK_Peripheral_COMP,ENABLE); //注意COMP一定要打開,否則不能配置RI的寄存器,原因還不清楚 // RI- IOCMR3
[單片機]
STM32F10x uart初始化以及寄存器說明
USART(Universal Synchronous Asynchronous Receiver Transmitter) 也就是通用同步異步收發(fā)。它根據(jù)NRZ非同步串行數(shù)據(jù)工業(yè)標(biāo)準(zhǔn),提供了靈活的全雙工數(shù)據(jù)交換功能。它支持同步單向通信和半雙工單線通信,也支持LIN(局部互連網(wǎng)),智能卡協(xié)議和IrDA(紅外數(shù)據(jù)組織)SIR ENDEC規(guī)范,以及硬件控制操作(需要增加兩個管腳,分別是CTS/RTS)。 這里我只簡單講講如何用USART模塊來實現(xiàn)標(biāo)準(zhǔn)EIA-232 串口通訊。 我們首先使用的是硬件控制,然后以中斷方式實現(xiàn)了uart數(shù)據(jù)的收發(fā)。 1.uart管腳和clk初始化很簡單,整個流程如下: int main(){
[單片機]
STM32F0(6)ADC采樣初始化
void ADC_Init(void) { // PA1 -- 電池電壓采樣引腳 -- 浮空輸入 GPIOA- MODER &= ~GPIO_MODER_MODER1_1; // 浮空輸入 GPIOA- MODER &= ~GPIO_MODER_MODER1_0; GPIOA- PUPDR &= ~GPIO_PUPDR_PUPDR1_1; GPIOA- PUPDR &= ~GPIO_PUPDR_PUPDR1_0; // 配置adc相關(guān)功能 RCC- APB2ENR |= RCC_APB2ENR_ADC1EN; ADC1- CFGR1 |= ADC_CFGR1_CONT; // 連續(xù)轉(zhuǎn)換 ADC1- SMPR |=
[單片機]
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved