修改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时钟为基准的)。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值