当前位置:编程学习 > 网站相关 >>

修改ARMS3C2440的Bootloader的FCLK注意的情况及处理

我的bootloader用的是飞凌公司提供的2440BOOT_V5.1,想降频,我是直接修改了inc/Option.inc文件的
这是没有修改过的
;(3) Select FCLK
;FCLK SETA296352000
;FCLK SETA  271500000
;FCLK SETA  100000000 
;FCLK SETA  240000000 
;FCLK SETA  280000000 
;FCLK SETA  320000000 
;FCLK SETA  360000000 
FCLK SETA400000000
 
我是直接把FClK SETA 400000000给注释掉了,把FCLK  SETA  100000000给打开。重新编译通过H-Jtag烧写到nandflash。
但是bootloader启动不起来,H-Jtag能识别CPU,但是识别不了nandflash。H-flasher提示如下错误
error:can't halt target and make it enter
 DEBUG state.....并且LED灯也不正常(全部亮)。。。。。
 
不能停止目标CPU,说明你的CPU程序已经在运行了。但是运行程序不正确。
能检测到CPU,说明JTAG连接正确,CPU供电OK
解决办法:
一:调节板的OM脚,不要让它从Nand启动,如调成从NOR启动,这时,IROM就不会将Nand里的错误程序拷到DRAM并运行了。然后再试试h-flash,检测nand,烧入正确的程序。
 
二:直接换一块新的或者全部格过的flash,再试。如果第二步仍然不行,检查2440的大小页配置问题。
 
三:使用JLINK,通过halt命令停止CPU的运行,然后导入一个初始化BIN文件并运行,再通过h-jtag引导正确的boot在DRAM运行
 
我采用的是第一种方法,把nand跟nor的管脚跳线设置为nor启动,然后就识别了nandflash芯片。
 
造成这个的原因后来查证是,FCLK:HCLK:PCLK= 1:4:8采用的分频形式,也就是主频400MHz,HCLK为100MHz,PCLK为50MHz
FCLK is used by ARM920T,内核时钟,主频。
HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是总线时钟,包括USB时钟。
PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI.即IO接口时钟,例如串口的时钟设置就是从PCLK来的;
 
我只是修改了FCLK为100MHz,但是比值关系没有改,相应的HCLK为50MHz,PCLK为12.5MHz。
大概过程如下,这些值在外部晶振12MHz的基础上通过PLL的作用倍频到我们需要的核心频率如400MHz,由于该频率过高,需要通过对预分频器进行适当的设置获取外围设备能够正常工作的频率如HCLK 100MHz、PLCK 50MHz。
Fclk(给CPU核供给时钟信号,我们所说的s3c2410的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期)、Hclk(为AHB bus peripherals供给时钟信号,AHB为advanced high-performance bus)、Pclk(为APB bus peripherals供给时钟信号,APB为advanced peripherals bus)。
AHB总线连接高速外设,低速外设则通过APB总线互连。显然,对不同总线上的外设,应该使用不同的时钟信号,AHB总线对应Hclk,APB总线对应Pclk。那么事先就应该弄清楚,每条总线对应的外设有那些,这样在设置好时钟信号后,对应外设的初始化的值就要依此而确定了。
 
    AHB bus上的外设有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
 
    APB bus上的外设有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。
S3C2440使用了三个倍频因子MDIV、PDIV和SDIV来设置将FIN倍频为MPLL,也就是FCLK
MPLL=(2*m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s="SDIV"
寄存器MPLLCON就是用来设置倍频因子的
 
理论上,你可以通过设置该寄存器来实现不同的频率,然而,由于实际存在的各种约束关系,设置一个适当的频率并不容易,手册上列出了一些常用频率的表格,
 
例如,假设输入时钟FIN=16.9344M,MDIV=110, PDIV="3", SDIV="1",
利用上面的公式,FCLK=2*16.9344*(110+8)/((2+3)*2)=399.65
关于USB时钟
S3C2440有两个锁相环,一个主锁相环MPLL提供给FCLK的,另外一个UPLL是提供给USB时钟(48MHz)的,与MPLL一样,UPLL的产生也是通过UPLLCON寄存器设置分频因子得到,计算公式稍有不同:
UPLL=(m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s="SDIV",同样,可以通过查表得到一个合适的值。
最后值得一提的是,在CLKDIVN的第三位DIVN_UPLL用来设置USB时钟UCLK和UPLL的关系,如果UPLL已经是48Mhz了,那么这一位应该设置为0,表示1:1的关系,否则是1:2的关系
在这里有必要说明FCLK、HCLK、PCLK的含义:
FCLK为内核时钟,
HCLK为总线时钟(包括USB时钟):HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是总线时钟,包括USB时钟。
PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI.即IO接口时钟,(如常用的SPI、I2C、UART的时钟配置都是通过PCLK时钟为基准的)。
 
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,