嵌入式开发者社区

标题: Omapl138 emif cs5 挂接16c554总线没有动作问题 [打印本页]

作者: custar    时间: 2014-11-26 11:32
标题: Omapl138 emif cs5 挂接16c554总线没有动作问题
您好! 我们使用 创龙omapl138核心板 + 自制底板的方案通过emif cs5 扩展 16c554,使用最新的u-boot和内核,通过sd卡启动,内核和文件系统全部在SD卡上,在这种情况下在Board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005,用来设置EMIF总线频率为456M/6=76M,但是发现操作CS5对应的ioremap后的地址,总线地址线并没有动作。我想请教一下:/ a4 H+ b6 g7 l6 N" b

7 Q+ }5 u1 `4 ~. @1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了?
7 \% N3 h3 m, t5 ~2.在board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005, 这样设置是否能起作用?/ _( `* [( @# j$ H$ b( w
3.要让cs5正常工作需要注意哪些寄存器的设置,目前只设置了CE5CFG寄存器。  b  s" i( Y8 \5 a0 I$ v
* y' K0 }/ ^) A! R6 [3 [5 I
搞了好久CS5都不能正常工作,还请帮忙解答一下疑问,多谢!
( W2 g; |7 k5 h* u4 v
. p7 ^) x4 O+ E- P, w2 `8 C; Y
作者: custar    时间: 2014-11-26 22:20
纠正一下问题 OMAPL138的U-BOOT和内核设置PLLM和POSTDIV之后到SYS0_CLK3的频率是多少,内核默认配置sys0_clk3的分频系数是2 也就是div36 Q) n5 Z% `, z/ K

作者: teddy    时间: 2014-11-27 10:03
1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了?
/ Z* p2 x" }. p现在emifa在u-boot里面配置的频率是114M;无论从那个地方启动,emifa总线模块是使能的。& W- Q* a8 m/ {3 j
2.在board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005, 这样设置是否能起作用?/ R/ K  b8 u6 d* I" I
可以起作用的,不过需要使用ioremap对物理地址做映射,内核才能访问。: a+ v: Z- y6 ]
3.要让cs5正常工作需要注意哪些寄存器的设置,目前只设置了CE5CFG寄存器。0 J- Y1 S% q! z% M% R- C# B: P, Z
下面我给的是CS2的一个配置例子,您可以参考下:8 R2 D2 }. |* H1 @/ E
#define DA8XX_AEMIF_CE2CFG_OFFSET        0x10' u' Q6 Z" L: U; @0 p# i1 V; T
#define DA8XX_AEMIF_CE4CFG_OFFSET        0x18
/ {3 I3 d+ w3 |5 R/ w3 ]) p#define DA8XX_AEMIF_CE5CFG_OFFSET        0x1c" c0 H! N* W7 N  P+ k, v9 o1 n% l
#define DA8XX_AEMIF_ASIZE_MASK                0x31 x( l$ ]( S& e3 O
#define DA8XX_AEMIF_ASIZE_16BIT                0x15 W4 H3 q  l! K7 o" k7 o
#define DA8XX_AEMIF_ASIZE_8BIT                0x0* X) K  b- D9 h! K- u/ \
' E$ O5 Y6 @6 n
#if defined(CONFIG_MACH_DAVINCI_DA850_PHYSMAP_FLASH). U5 ]; L$ j0 f* M+ G" {
static void __init da850_evm_init_nor(void)
8 g& t. ~- }6 }+ Z! \5 b3 Z' Z{
) f% q& R3 q. P        void __iomem *aemif_addr;
; _* g8 a6 v9 D
( t0 o! a. _, Q' e1 v" D7 H        aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);  B( E( n5 |: V0 B/ E

0 ?3 w, e# i+ l1 f        /* Configure data bus width of CS2 to 16 bit */8 G; w) l0 q( o$ v
        writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |: Q. J1 t+ V7 K/ f6 v, B
                DA8XX_AEMIF_ASIZE_16BIT,& i/ ]' E+ L$ x% V1 K3 L# `/ B/ n5 Z
                aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);0 g( L! b/ V9 s! ]: H: N! d! H

3 }' e& J2 m' b- ^6 |        iounmap(aemif_addr);
, ^, Y- z, R% I  K% a}1 v; m9 z9 [8 F  x
#endif
0 |1 \% k2 {% v% y; d& q- D& X
作者: custar    时间: 2014-11-27 14:10
teddy 发表于 2014-11-27 10:03. h* j! n$ {$ W& B0 u4 l
1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了 ...
! _0 A. e, n$ n
多谢您的解答,还有些问题没搞明白$ Q' {1 Z& I7 @2 G" [, N- L" x
1.目前我在board_da850_evm.c中的da850_set_emif_clk_rate里打印出来sys0_clk3的寄存器为0x8002 也就是div3 = 76M, 可是在davinci_nand.c中的davinci_aemif_setup_timing初始化nand时序时设置时使用的时钟频率为aemif,而aemif在clk初始化的时候添加打印打印出来的时钟是114000000,这样的话EMIF是哪一个频率?$ d1 M; _6 t6 `8 N( g# E7 o+ [
        aemif_clk = clk_get(NULL, "aemif");0 a0 }, C; V- q! X& E9 C& G
        if (IS_ERR(aemif_clk))& u( k5 y6 y! d
                return PTR_ERR(aemif_clk);
* b6 a( x+ f9 ~. K6 x9 `' N9 l+ v5 z0 n) c
        clkrate = clk_get_rate(aemif_clk);" ]0 h3 p/ P  L3 t
3 d  [' a  Y' {# ]8 @
        clkrate /= 1000;        /* turn clock into kHz for ease of use */- n% M4 H3 r- o6 H. k, z

: h! K) ~: h7 u# J( t        ta        = aemif_calc_rate(t->ta, clkrate, TA_MAX);
$ z7 }5 d) C) W: r) u! V        rhold        = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
+ z$ G% _' q$ M. z. X- a/ S5 T        rstrobe        = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);. y0 l7 R) r: c, Q' b$ X' K3 J/ ]
        rsetup        = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);1 \: Q( q, _2 Y6 Q2 u, j
        whold        = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);
& }3 `( ]5 e) M0 I! X5 K        wstrobe        = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);8 }0 S  |) v/ C; W# a6 h
        wsetup        = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);' W8 g% ~5 A1 b! `6 T6 ?. ]
2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?1 G6 \! o% g1 L! x
  |- ?) k, l- f! b& M1 _: P
期待您的解答。
% {; A* N$ k9 c
作者: teddy    时间: 2014-11-30 16:48
你好,456/4=114M。请注意emifa 8bit 数据的连接方式(如附件)。7 K% t8 {4 [/ z( Q$ ]8 G
$ E2 n- p1 _/ {9 O

作者: custar    时间: 2014-12-1 14:19
teddy 发表于 2014-11-30 16:48- d( g+ G" g1 \4 ?2 C7 b% T
你好,456/4=114M。请注意emifa 8bit 数据的连接方式(如附件)。

1 b% E' F. k$ |! B6 ]好的! teddy, EMIF时钟频率还是没搞清楚,在开发板系统起来之后,通过仿真器去查看寄存器 prediv、pllm和postdiv以及pll0_sysclk3寄存器, prediv 的ratio = 0,pllm的值为18, postdiv的ratio = 0, pll0_sysclk3的ratio = 00010,
8 D! a1 }" r# d$ f2 _如果核心板用的是24M晶振,那么24x1= 24, 24 x 19 = 456, 456/1 = 456, 456/3 = 152, 那么EMIF应该是152M, 可是davinci_nand.c中按照aemif的114M频率来配置时序,能否帮忙详细解释一下开发板的时钟频率的设置。
- L9 S8 c+ N) ^/ S$ J9 I
作者: teddy    时间: 2014-12-1 22:39
您好!请确认你的pll0_sysclk3的ratio = 00010是否正确,这里的值应该是0x8003。
: {9 g7 p0 [! k$ S& x. Y( A$ w, v8 P
作者: custar    时间: 2014-12-2 08:32
teddy 发表于 2014-12-1 22:39
5 m6 a3 F( r2 y, q5 R8 u( k您好!请确认你的pll0_sysclk3的ratio = 00010是否正确,这里的值应该是0x8003。

2 h7 g$ y' {9 d" q' `7 rteddy,  pll0_sysclk3的值是0x8002,内核是百度网盘上2014.11.06最新版本
" z+ |( ^3 D  H. V# c; g
作者: custar    时间: 2014-12-2 08:37
在11.06号的内核代码里board-da850-evm.c的da850_evm_init中会调用da850_set_emif_clk_rate函数去设置pll0_sysclk3寄存器为0x8002,通过仿真器,从dsp端读出的寄存器值也是0x8002# J  ^: e& G$ d! y$ p





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4