TL138 uboot是怎么区分配置两款核心板的 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4873|回复: 1
打印 上一主题 下一主题

TL138 uboot是怎么区分配置两款核心板的

[复制链接]

14

主题

102

帖子

821

积分

创龙

Rank: 8Rank: 8

积分
821
楼主
发表于 2014-9-11 18:55:41 | 显示全部楼层
DDR通过检查最大有效地址来识别容量,具体请看uboot的common/memsize.c文件中的检查代码,也可以看如下:
! a6 m" Y3 K1 s' W/*
& y1 [0 ]- U- m0 P* Check memory range for valid RAM. A simple memory test determines
1 H+ v- R. E/ G' n4 c* the actually available RAM size between addresses `base' and: v7 [, w) l" `+ X6 ?; ^
* `base + maxsize'." K( `% i) j& B/ X9 u
*/
0 ^& J( @: m& `: Z) v9 dlong get_ram_size(long *base, long maxsize)
/ e: K8 k% v+ B1 D. ?3 F: R{
5 A, r% Q2 `% l* Q" h( U        volatile long *addr;
% p3 e: h: f: I# X5 s* D        long           save[32];
4 _: n! W3 E2 ^        long           cnt;4 E/ _$ T; R& ^2 d; W$ p
        long           val;- \/ j4 r2 k3 r, ]
        long           size;' @" W$ y" l" \. X/ I. _
        int            i = 0;+ W$ U# E, Q' s
  ^8 U9 I0 N+ s: `: w
        for (cnt = (maxsize / sizeof (long)) >> 1; cnt > 0; cnt >>= 1) {' a! R( i% q, s) H" @
                addr = base + cnt;        /* pointer arith! */
, _1 e! m" g6 i3 {( _                sync ();& }+ G% ~$ A: W2 \! j  i; \$ F
                save[i++] = *addr;
+ l7 g& w) ~! X) ~7 H  W1 d                sync ();& g4 N1 u& |4 m& a7 l
                *addr = ~cnt;; O2 j# l: |9 m2 \% q+ `
        }
9 Z; q5 l( u  Q! U% J- L
* h8 e  m* C% h" X! x        addr = base;
3 V3 ~  s4 ~" d        sync ();( \. a4 V. v  p2 c0 D. [! ^5 @+ h0 U
        save = *addr;( i- }& r9 s5 j% k
        sync ();
  G! j7 c7 x# o. T% l6 q        *addr = 0;
- K( V2 l8 \7 A7 m
. h! x0 O/ S! ~' h! G( ~* \- J        sync ();4 k! U4 I( {- W; P2 c% N+ o& l, L
        if ((val = *addr) != 0) {2 S3 {: t( s( q2 `" h! l0 R
                /* Restore the original data before leaving the function.. n* Z) q8 p" z" g* P+ l
                 */: |% q/ |% x0 i8 x6 D1 C" `$ d
                sync ();$ x6 l: y4 Q, h; T
                *addr = save;
, |- @! _7 N3 X2 X                for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) {) W8 ]0 ]$ o3 `0 I& {
                        addr  = base + cnt;
, m9 N9 ]* h7 s8 Y- c; V                        sync ();
- x2 q* x7 \# j" r7 `                        *addr = save[--i];
, U. ]# R0 R) L9 o0 d                }, X# ?/ s6 I/ r  h7 P3 }
                return (0);
$ C- X: u. S' E7 R4 L        }
% V3 y# w" u1 {- N% }  B+ c+ M+ d
, Y4 s0 a6 j$ _3 D3 M- K0 h! ?: [        for (cnt = 1; cnt < maxsize / sizeof (long); cnt <<= 1) {9 a0 j: A/ J! R
                addr = base + cnt;        /* pointer arith! */
- ]( |. n- C* G. y8 V5 y" P2 x  R                val = *addr;
6 q8 i4 l6 _) K, S" i7 S                *addr = save[--i];& ^- h) U$ P$ s3 F& f' y% X  {
                if (val != ~cnt) {
* a* J( R/ U9 y7 y0 V& L. ^                        size = cnt * sizeof (long);6 B9 e0 ]1 d% K0 P) i
                        /* Restore the original data before leaving the function.# }+ M7 U* Y+ B. \* `5 c
                         */: u! v. Z4 H2 j" k: E
                        for (cnt <<= 1; cnt < maxsize / sizeof (long); cnt <<= 1) {
& S: m8 m) z) e% S; r7 b                                addr  = base + cnt;( V) U" |5 B" f* n
                                *addr = save[--i];& @! e! w& x3 x8 J2 m  }
                        }3 _- R3 O; h) ]) P9 F8 B' d$ |7 P
                        return (size);
3 N, S9 x8 ]  F" k! [                }
7 K& D% n" z& l, Q0 }, O1 ]0 `        }
/ E6 ^: n  p& `6 Y$ N4 B
- i3 U' M" C2 M$ \7 j8 }8 y/ D        return (maxsize);9 c3 L9 J0 P3 u$ U. ^, k  u
}- \3 r. h7 b# H0 H% R
int dram_init(void)
# x6 G/ Y* K# W; q- Y{
  t, ^0 p4 ~* i        /* dram_init must store complete ramsize in gd->ram_size */
' Y$ l1 d0 [  l        gd->ram_size = get_ram_size(3 Q0 b1 n2 U! u) g9 D
                        (void *)CONFIG_SYS_SDRAM_BASE,
+ v- ~/ F' h9 s# ]( ]$ [1 f6 `                        CONFIG_MAX_RAM_BANK_SIZE);( y: P9 o( F( u: l$ w' _
        return 0;
( a% \* v! x7 K; q5 Y# _; I}
$ {  H2 ^$ \" l  y; ]% o7 E0 E
( J# o2 [. C2 o' e( e. _) n5 m  x) y
& |! I- Z: y# G( e( X9 ^, s! B6 a0 V* Q- y& e* Y$ m8 Z0 ~/ P

! c" j* u. Y1 X+ R8 o" A6 x  Q4 SFLASH是通过检查FLASH内部的ID识别容量,希望对您有帮助!- S* `! l+ L* s3 V4 D

! j: t: _( M9 ~% J2 s' P- t0 f0 i  r: W# p/ P9 j  `# N

9 ^; V0 z, r" `1 E6 m
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-7-5 00:09 , Processed in 0.035756 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表