全部博文(395)
分类: 嵌入式
2010-12-25 18:50:34
最近基本上完成了u-boot在我的2440开发板上移植,虽然网上资料很多,还是费了不少的劲。一是因为自己是初次移植,再就是网上的很多资料都是针对s3c2410的。虽说它们很相近,但相近不等于相同,这个不相同,如果没有处理好,失败也是注定的。
将近一个月的u-boot移植跌跌撞撞地完成之后,就有了想对2410和2440做一个比较的想法,我很想做一份真正的全方位对比,但是时间有限,对它们的操作实践也有限,只能把自己已经遇到的,尽量写出来,希望对自己的以后学习工作有帮住。
为了尽可能地全面,我从网上参考了一些别人写的对比,随着自己以后学习的深入和全面,如果遇到了新的不同点,再补充上来。
*****************************************************************************************************
1. 最高主频不相同:2410为200M,2440为400M。
我们在用这两款处理器时,一般使用的主频是不相同的,而这个不相同,不仅影响是的运行的速度,最主要的是会影响一些外设(如串口)的时钟,这些外设的时钟如果不正确,就会出现问题。
又比如内存总线设置,2410 和 2440 主频不一样,总线定时所要求的时钟数也会不一样。
----------------------------------------------------------------------------
2. MPLL和UPLL的计算公式不相同:2440的MPLL是2410的两倍;2440的MPLL计算与UPLL的计算不相同。
2410输出时钟频率 Mpll/Upll 相对于参考输入时钟频率 Fin 如以下公式所示:
PLL Control Register (MPLLCON and UPLLCON)
(M/U) pll = (m * Fin) / (p * 2s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
2440输出时钟频率 Mpll 相对于参考输入时钟频率 Fin 如以下公式所示:
MPLL Control Register
Mpll = (2 * m * Fin) / (p * 2^S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
2440输出时钟频率 Upll 相对于参考输入时钟频率 Fin 如以下公式所示:
UPLL Control Register
Upll = (m * Fin) / (p * 2^S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
----------------------------------------------------------------------------
3. 时钟寄存器设置:2410 需设置 clkdivn、clkcon、upllcon、mpllcon 共 4 个寄存器,2440则多一个寄存器 camdivn 需要设置。 2410 设置完 mpllcon 后可以立即设置 upllcon, 2440则需要在两者中间插入 7 条 nop 指令。
时钟分频寄存器也有很大的区别:2440的CLKDIVN比2410多了一个字段DIVN_UPLL;而且字段DIVN比2410多了几种选择,并且和 CAMDIVN有关,如下所示:
2440 DIVN_UPLL:
UCLK select register(UCLK must be 48MHz for USB) 0
0: UCLK = UPLL clock
1: UCLK = UPLL clock / 2
Set to 0, when UPLL clock is set as 48MHz
Set to 1. when UPLL clock is set as 96MHz.
2440 HDIVN:
00 : HCLK = FCLK/1. 00
01 : HCLK = FCLK/2.
10 : HCLK = FCLK/4 when CAMDIVN[9] = 0.
HCLK= FCLK/8 when CAMDIVN[9] = 1.
11 : HCLK = FCLK/3 when CAMDIVN[8] = 0.
HCLK = FCLK/6 when CAMDIVN[8] = 1.
----------------------------------------------------------------------------
4. CPU需从快速总线模式转变为异步模式的条件不同,如下所示:
2410:
If HDIVN=1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus
mode using following instructions.
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
2440:
If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
bus mode using following instructions(S3C2440 does not support synchronous bus mode).
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
----------------------------------------------------------------------------
5. 2410 和 2440 的 nand 驱动也非常相似,主要区别在于:
(1)2410 仅支持小块 nandflash,2440 则同时支持大块 nandflash。
(2)为支持大块 nandflash,2440 增加了许多寄存器。
(3)2440 增加了一个控制寄存器 NFCONT,原 2410 中 config 寄存器 NFCONF 中的部分功能被转移到 NFCONT 中。
两者代码的主要不同,体现在 nand.h 文件中,差异点:
(1)struct nand_reg 结构的定义不同。
(2) 两者 NFCONF 寄存器中对 talcs 的定义不同,在 nand.h 中:
#define cn_talcs 0 //1clk(10ns)------for2410
#define cn_talcs 1 //1clk(10ns)------for2440
(3) 2410 中,片选控制在 NFCONF 寄存器的 bit.11 中,2440 则在 NFCONT 的 bit.1 中,使下列两个宏的定义不同。
2410 中:
#define ce_active() (pg_nand_reg->NFCONF &= ~(1<<11))
#define ce_inactive() (pg_nand_reg->NFCONF |= (1<<11))
2440 中:
#define ce_active() (pg_nand_reg->NFCONT &= ~(1<<1))
#define ce_inactive() (pg_nand_reg->NFCONT |= (1<<1))
---------------------------------------------------------------------------------------
6. 2440比2410新增加AC'97编解码器接口。
7. 2440比2410新增加Camera interface,摄像头的接口。
8. 2440比2410具有更多可用的I/O口,主要增加了DPJ端口组,其13个。
9. 2410 和 2440 的串口结构几乎一样,不同点在于:
(1)、2410 的串口 fifo 是 16 字节,而 2440 是 64 字节。
(2)、由于 fifo 深度不同,导致 UFSTAT 寄存器中个位的定义不一致。
这种相似性使得两者驱动程序的差异也非常小,读者可以直接比较两者的 uart.c 文件。
10. 支持更多分辨率液晶屏;无需外围电路的触摸屏接口。
11. 引脚:2440和2410不是pin-to-pin compatible,引脚功能相差很大。
12. 封装:2410为 272-FBGA;2440 为289-FBGA。
13. 具有工业级温度范围。
14. 更低的内核电压,支持低电压存储器。
(肯定还有很多的区别,以后随着实践的增加,再继续完善添加)
本文来自:我爱研发网(52RD.com) - R&D大本营