S3C2440启动流程.docx

上传人:b****4 文档编号:4416915 上传时间:2022-12-01 格式:DOCX 页数:9 大小:44.16KB
下载 相关 举报
S3C2440启动流程.docx_第1页
第1页 / 共9页
S3C2440启动流程.docx_第2页
第2页 / 共9页
S3C2440启动流程.docx_第3页
第3页 / 共9页
S3C2440启动流程.docx_第4页
第4页 / 共9页
S3C2440启动流程.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

S3C2440启动流程.docx

《S3C2440启动流程.docx》由会员分享,可在线阅读,更多相关《S3C2440启动流程.docx(9页珍藏版)》请在冰豆网上搜索。

S3C2440启动流程.docx

S3C2440启动流程

我想请问下。

主板上的DL1灯是在什么阶段点亮的?

[2010-6-13下午02:

40:

44]michael:

早上打电话给你,还怕打扰你休息了。

原来你们也需要上班。

呵呵

[2010-6-13下午02:

40:

58]ZhilongWu:

应该在uboot里.一开机的时候.

[2010-6-13下午02:

42:

00]michael:

我们现在有些板启动不了。

发现UART口没有U-BOOT输出信息。

DL1灯不亮

[2010-6-13下午02:

44:

03]ZhilongWu:

每个flash芯片,烧uboot的时候,有没有重新读出一遍,做检查.确保uboot是烧好的

[2010-6-13下午02:

44:

05]michael:

DL1灯是UBOOT来控制的还是什么模块控制的?

[2010-6-13下午02:

44:

51]ZhilongWu:

uboot,通过cpu的io

[2010-6-13下午02:

47:

44]michael:

烧写UBOOT的时候,应该是怎样的流程?

我们现在是erase--->blank_check-->program---->verify

[2010-6-13下午02:

48:

07]ZhilongWu:

这样也可以

[2010-6-13下午02:

49:

42]michael:

DL1有几个阶段:

[2010-6-13下午02:

50:

12]michael:

不亮,常亮,慢闪,快速

[2010-6-13下午02:

50:

32]ZhilongWu:

在uboot就是一个状态.

[2010-6-13下午02:

50:

46]ZhilongWu:

长亮.

[2010-6-13下午02:

51:

12]ZhilongWu:

能闪的时候,表示uboot没问题.起来wince了

[2010-6-13下午02:

51:

21]michael:

噢。

也就是说长亮的时候还在执行UBOOT阶段

[2010-6-13下午02:

51:

30]ZhilongWu:

[2010-6-13下午02:

51:

41]michael:

慢闪就表示离开了UBOOT运行OS了?

[2010-6-13下午02:

51:

50]ZhilongWu:

[2010-6-13下午02:

52:

38]michael:

那慢闪和快速是指示什么的?

我们发现有些机器,停留在慢闪阶段。

[2010-6-13下午02:

53:

04]ZhilongWu:

慢闪,应该是wince正常运行了.

[2010-6-13下午02:

53:

25]ZhilongWu:

这样的话,应该是显示有问题.

[2010-6-13下午02:

53:

46]ZhilongWu:

串口应该可以看到启动信息

[2010-6-13下午02:

53:

53]michael:

是的

[2010-6-13下午02:

54:

59]michael:

那快速又是指示什么状态的?

[2010-6-13下午02:

55:

13]michael:

那快闪又是指示什么状态的?

[2010-6-13下午02:

56:

02]ZhilongWu:

快闪是wince正在启动过程.

[2010-6-13下午02:

56:

47]ZhilongWu:

还有就是,硬件中断很多的时候有.比如鼠标不停移动

[2010-6-13下午02:

57:

28]michael:

这会有什么影响?

[2010-6-13下午02:

58:

17]ZhilongWu:

没有什么影响

[2010-6-13下午02:

58:

47]ZhilongWu:

其实你就区分一下这几个过程.

[2010-6-13下午02:

59:

16]ZhilongWu:

1.灯不亮,cpu基本是没有工作.

[2010-6-13下午03:

00:

06]ZhilongWu:

2.灯常亮,但是没有串口打印.cpu工作了.

[2010-6-13下午03:

00:

53]ZhilongWu:

但是还是除了很大问题.有可能sdarm,

[2010-6-13下午03:

01:

31]ZhilongWu:

3.灯常亮,有串口打印.到go30201000.表示uboot执行完了.进入wince

[2010-6-13下午03:

03:

04]ZhilongWu:

4.灯快闪后停止变常亮了,但没有显示,启动wince的过程出了问题.

[2010-6-13下午03:

03:

57]ZhilongWu:

5.灯进入慢闪,而且很有规律.就是wince正常运行了.应该是显示部分有问题.LCD,逆变器灯

[2010-6-13下午03:

05:

00]ZhilongWu:

大概就是这些.这些也是大体的判断大概那个步骤出了问题

[2010-6-13下午03:

05:

04]michael:

好的。

谢谢这么详细的解析。

[2010-6-13下午03:

05:

26]michael:

还有就是,在CPU初始化IO口时,IO口的状态不定,会不会导致UBOOT启动不了?

因为有些机器连上LCD背光后,有可能启动不了(有时可以启动,有时启动不了,很奇怪)。

[2010-6-13下午03:

06:

22]ZhilongWu:

这样的话,你直接有那个主板上的电原口,供电.

[2010-6-13下午03:

06:

39]ZhilongWu:

应该是那个电源版的问题.

[2010-6-13下午03:

06:

50]ZhilongWu:

不要电源版试试

[2010-6-13下午03:

06:

54]michael:

明白。

[2010-6-13下午03:

07:

52]michael:

我先根据你的以上的指导去试试。

[2010-6-13下午03:

08:

01]ZhilongWu:

好的.

启动的处理流程

 

 

MPLL

2010-05-2621:

01

S3C2440有两个PLL(phaselockedloop)一个是MPLL,一个是UPLL。

MPLL用于CPU及其他外围器件,UPLL用于USB。

用于产生FCLK,HCLK,PCLK三种频率,这三种频率分别有不同的用途:

 

FCLK是CPU提供的时钟信号。

 

HCLK是为AHB总线提供的时钟信号,AdvancedHigh-performanceBus,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器,DMA等。

 

从S3C2440的DataSheet里可以看到,S3C2440最大支持400MHz的主频,但是这并不意味着一定工作在400MHz下面,可以通过设定MPLL,UPLL寄存器来设定CPU的工作频率。

 

PCLK是为APB总线提供的时钟信号,AdvancedPeripheralsBus,主要用于低速外设,比如看门狗,UART控制器,IIS,I2C,SDI/MMC,GPIO,RTCandSPI等。

在这里,需要了解一下AMBAsystemarchitecture了。

这个可以到官方网站下载相关资料。

简单的说,AMBA是一种协议,这种协议已经称为片上组织通信的事实上的标准(thedefactostandardforon-chipfabriccommunication)。

下面给出英文描述:

TheAMBAprotocolisanopenstandard,on-chipbusspecificationthatdetailsastategyfortheinterconnectionandmanagementoffunctionalblocksthatmakesupasystem-on-chip(SoC).Itfacilitates"right-first-time"developmentofembeddedprocessorswithoneormoreCPU/signalprocessorsandmultipleperipherals.TheAMBAprotocolenhancesaresuabledesignmethodologybydefiningacommonbackboneforSoCmodules.需要知道的是,AMBA总线是ARM提出的一种解决方案,它并非唯一的规范,但是因为ARM的广泛使用,AMBA总线也就成为了事实上的规范了。

现在AMBA总线最新为AMBA3specification版本,包括AMBA3AXIInterface、AMBA3AHBInterface、AMBA3APBInterface、AMBA3ATBInterface。

而s3c2410还只能支持AMBA2specification,这个版本包含AMBA2AHBInterface、AMBA2APBInterface。

也就是在s3c2410的框图中看到的两种总线接口。

需要注意的是,这两种总线所连的外设是有区别的。

AHB总线连接高速外设,低速外设则通过APB总线互连。

显然,对不同总线上的外设,应该使用不同的时钟信号,AHB总线对应Hclk,APB总线对应Pclk。

那么事先就应该弄清楚,每条总线对应的外设有那些,这样在设置好时钟信号后,对应外设的初始化的值就要依此而确定了。

AHBbus上的外设有LCDcontroller(CONT代表controller,控制器)、USBHostCONT、ExtMaster、NandCONT和nandflashbootloader、busCONT、interruptCONT、powermanagement、memoryCONT(sram/nor/sdram等)。

APBbus上的外设有UART、USBdevice、SDI/MMC、WatchDogTimer、busCONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。

 

s3c2410有两个pll(phaselockedloop,锁相环,在高频中学过,可以实现倍频,s3c2410的高频就是由此电路产生的)。

其中一个是MPLL,M即为main,用来产生三种时钟信号:

Fclk(给CPU核供给时钟信号,我们所说的s3c2410的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期)、Hclk(为AHBbusperipherals供给时钟信号,AHB为advancedhigh-performancebus)、Pclk(为APBbusperipherals供给时钟信号,APB为advancedperipheralsbus)。

需要注意的是,这两种总线所连的外设是有区别的。

AHB总线连接高速外设,低速外设则通过APB总线互连。

显然,对不同总线上的外设,应该使用不同的时钟信号,AHB总线对应Hclk,APB总线对应Pclk。

那么事先就应该弄清楚,每条总线对应的外设有那些,这样在设置好时钟信号后,对应外设的初始化的值就要依此而确定了。

   AHBbus上的外设有LCDcontroller(CONT代表controller,控制器)、USBHostCONT、ExtMaster、NandCONT和nandflashbootloader、busCONT、interruptCONT、powermanagement、memoryCONT(sram/nor/sdram等)。

   APBbus上的外设有UART、USBdevice、SDI/MMC、WatchDogTimer、busCONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。

主时钟源来自外部晶振或者外部时钟。

复位后,MPLL虽然默认启动,但是如果不向MPLLCON中写入value,那么外部晶振直接作为系统时钟。

这个主要是基于PLL的特点。

简单的描述就是,上电复位后,几个ms后晶振起振。

当OSC时钟信号稳定之后,nRESET电平拉高(这是硬件自动检测过程)。

这个时候,PLL开始按照默认的PLL配置开始工作,但是特殊性就在于PLL在上电复位后开始是不稳定的,所以s3c2410设计为把Fin在上电复位后直接作为Fclk,这是MPLL是不起作用的。

如果要想是MPLL起作用,那么方法就是写入MPLLCON寄存器值,然后等待LOCKTIME时间后,新的Fclk开始工作。

下面把这些步骤分来来描述,软件步骤部分结合程序进行。

   1、上电几个ms后,晶振输出稳定。

Fclk=晶振频率。

nRESET恢复高电平后,cpu开始执行指令,这完全是硬件动作,不需要软件设置。

   2、第一步软件工作:

设置PMSdividercontrol,也就是设置MPLLCON寄存器。

   关于PMS,可以看Figure7-2.寄存器MPLLCON的设置呢,其实有一定的规则,并非你想要的每个Fclk频率都可以得到。

官方推荐了一个表PLLVALUESELECTIONTABLE,要按照这个进行。

否则的话,就需要自己按照公式推算,但是mizi公司并不保证你的设置是合适的。

所以,如果想要工作在200MHz,还是按照vivi的推荐值即可。

@step1:

setPMSdividercontrol

        movr1,#CLK_CTL_BASE

        ldrr2,=vMPLLCON_200

        strr2,[r1,#oMPLLCON]

   其中,MDIV=0x5c,PDIV=0x04,SDIV=0x00.公式Mpll(Fclk)=(m×Fin)/(p×(2^s))【m=MDIV+8,p=PDIV+2,s=SDIV】

   3、第二步软件工作:

设置CLKDIVN。

   这一步是设置分频系数,即Fclk为cpu主频,Hclk由Fclk分频得到,Pclk由Hclk分频得到。

假设Hclk是Fclk的二分频,Pclk是Hclk的二分频,那么分频系数比就是Fclk:

Hclk:

Pclk=1:

2:

4.那么Hclk为100MHz,总线时钟周期为10ns。

Pclk为50MHz。

@step2:

changeclockdivider

        movr1,#CLK_CTL_BASE

        movr2,#vCLKDIVN

        strr2,[r1,#oCLKDIVN]

   4、第三步软件工作:

CLKDIVN的补充设置

  

IfHDIVN=1,theCPUbusmodehastobechangedfromthefastbusmodetotheasynchronousbusmodeusingfollowinginstructions.

MMU_SetAsyncBusMode

       mrcp15,0,r0,c1,c0,0

       orrr0,r0,#R1_nF:

OR:

R1_iA

       mcrp15,0,r0,c1,c0,0

IfHDIVN=1andtheCPUbusmodeisthefastbusmode,theCPUwilloperatebytheHCLK.ThisfeaturecanbeusedtochangetheCPUfrequencyasahalfwithoutaffectingtheHCLKandPCLK.

   看了上段话,只需要翻译出来就可以了。

@FCLK:

HCLK=1:

2

.macroMMU_SetAsyncBusMode

        mrcp15,0,r0,c1,c0,0

        orrr0,r0,#(R1_iA|R1_nF)

        mcrp15,0,r0,c1,c0,0

.endm

        @step3:

setasynchronousbusmode

        MMU_SetAsyncBusMode

   5、第四步软件工作:

等待locktime时间,让新的Fclk生效

@step4:

staylocktime

        movr1,#CLK_CTL_BASE

        ldrr2,=vLOCKTIME

        strr2,[r1,#oLOCKTIME]

 

禁止看门狗

TheWatchdogtimerisusedto

resumetheS3C2440Arestartonmal-functionafteritspoweron;ifcontrollerrestartisnotdesired,theWatchdog

timershouldbedisabled.

@disablewatchdogtimer

movr0,#WTCON

movr1,#0x0

strr1,[r0]

禁止中断

在初始化的过程中,在中断模式irq下的堆栈初始化之前,为了防止未预制的中断发生,我们必须把中断掩码都掩上。

ldrr0,=INTMSK

ldrr1,=0xffffffff;allinterruptdisable

strr1,[r0]

ldrr0,=INTSUBMSK

ldrr1,=0x3ff;allsubinterruptdisable

strr1,[r0]

 

初始化堆栈

为了在各个CPU模式下在恰当的位置建立堆栈。

我们需要初始化SP寄存器。

@irqmode

msrcpsr_c,#0xd2

ldrsp,=IRQ_STACK_BASE

@sysmode

msrcpsr_c,#0xdf

ldrsp,=SVC_STACK_BASE

@enableirqinterrupts

msrcpsr_c,#0x5f

 

拷贝数据

系统上电后将自动将NANDFLASH的前4K的内容,加载到地址从0x0000_0000开始的SDRAM中,然后开始执行这4K的代码。

所以我们自己需要将烧写在NAND中整个Boot程序拷贝到SDRAM中然后跳转到以后的main处理。

movr1,#S3C2440_NAND_BASE

@initialvaluetacls=3,rph0=7,rph1=7

ldrr2,=0xfff0

ldrr3,[r1,#oNFCONF]

orrr3,r3,r2

strr3,[r1,#oNFCONF]

ldrr3,[r1,#oNFCONT]

orrr3,r3,#1@enablenandcontroller

strr3,[r1,#oNFCONT]

ldrr0,_TEXT_BASE/*upper128KiB:

relocateduboot*/

subr0,r0,#CFG_MALLOC_LEN/*mallocarea*/

subr0,r0,#CFG_GBL_DATA_SIZE/*bdinfo*/

subsp,r0,#12/*leave3wordsforabort-stack*/

@copyu-boottoRAM

ldrr0,_TEXT_BASE

movr1,#0x0

movr2,#CFG_UBOOT_SIZE

blnand_read_ll

tstr0,#0x0

beqok_nand_read

ok_nand_read:

@verify

movr0,#0

@ldrr1,=0x33f00000

ldrr1,_TEXT_BASE

movr2,#0x400@4bytes*1024=4K-bytes

go_next:

ldrr3,[r0],#4

ldrr4,[r1],#4

teqr3,r4

bnenotmatch

subsr2,r2,#4

beqdone_nand_read

bnego_next

notmatch:

LDRR0,=GPJDAT

LDRR1,=0x4

STRR1,[R0]

1:

b1b

done_nand_read:

LDRR0,=GPJDAT

LDRR1,=0x2

STRR1,[R0]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1