Omapl138 emif cs5 挂接16c554总线没有动作问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9103|回复: 8
打印 上一主题 下一主题

Omapl138 emif cs5 挂接16c554总线没有动作问题

[复制链接]

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
跳转到指定楼层
楼主
发表于 2014-11-26 11:32:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好! 我们使用 创龙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后的地址,总线地址线并没有动作。我想请教一下:
+ n6 L" r# q" {: S# g: F. m5 F) T6 k! W. |' y& t& }
1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了?. y* f  j3 g/ Y- ?+ M
2.在board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005, 这样设置是否能起作用?
8 T- e+ G* c7 m3.要让cs5正常工作需要注意哪些寄存器的设置,目前只设置了CE5CFG寄存器。/ {/ I& a& y) z) u# G, h

) n7 ?! s  z# q+ N搞了好久CS5都不能正常工作,还请帮忙解答一下疑问,多谢!
1 i0 f2 p  N9 f+ z( e/ Z, j* X: F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
沙发
 楼主| 发表于 2014-11-26 22:20:57 | 只看该作者
纠正一下问题 OMAPL138的U-BOOT和内核设置PLLM和POSTDIV之后到SYS0_CLK3的频率是多少,内核默认配置sys0_clk3的分频系数是2 也就是div3- N6 h4 d2 _( G1 y
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
板凳
发表于 2014-11-27 10:03:11 | 只看该作者
1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了?
( L% y2 c  Z4 ^" ~( ~8 j现在emifa在u-boot里面配置的频率是114M;无论从那个地方启动,emifa总线模块是使能的。
- p- L) x- c% ?2.在board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005, 这样设置是否能起作用?
( H, W$ B" Y0 L' S1 D1 P可以起作用的,不过需要使用ioremap对物理地址做映射,内核才能访问。
- R& W; w+ T- a6 R* S3.要让cs5正常工作需要注意哪些寄存器的设置,目前只设置了CE5CFG寄存器。2 @2 X6 \1 {$ j& s6 K5 w- ~6 n' X" B
下面我给的是CS2的一个配置例子,您可以参考下:
+ }- r) `4 L0 u7 H3 S#define DA8XX_AEMIF_CE2CFG_OFFSET        0x10/ o  S) ?6 Q2 l5 k- n
#define DA8XX_AEMIF_CE4CFG_OFFSET        0x18. g' f7 S' `5 T8 a1 z0 W  D/ {- ?
#define DA8XX_AEMIF_CE5CFG_OFFSET        0x1c8 G5 I: q+ G, O- Q; c
#define DA8XX_AEMIF_ASIZE_MASK                0x3% [/ _( C* r4 m' Q3 Q- k
#define DA8XX_AEMIF_ASIZE_16BIT                0x1
4 P) e7 C8 ]- {  ?#define DA8XX_AEMIF_ASIZE_8BIT                0x0+ i+ u+ K: q6 i: H; W9 k; w
% Q! k4 Q2 c* H1 P* ~7 e7 w
#if defined(CONFIG_MACH_DAVINCI_DA850_PHYSMAP_FLASH)
" b' \! Q- `. z: Hstatic void __init da850_evm_init_nor(void)
% K6 W6 H' Q! _/ i  d% S{: m8 m9 m- {5 x/ L8 N8 U
        void __iomem *aemif_addr;9 }0 f. Y2 G0 o' A9 M1 o. L% J
1 \; A7 ]. K5 X
        aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);! X2 a9 [: Q/ i* P+ u2 w

* z3 j) X8 n' q7 C+ r; c        /* Configure data bus width of CS2 to 16 bit */
! |9 w' x' X  y1 g        writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |
2 v% K! C; Q* w! M% r9 \6 N                DA8XX_AEMIF_ASIZE_16BIT,% n+ s1 h( X" X! z
                aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);
: l# u$ q7 s  k4 Y1 |6 A+ V. a0 Y; T+ n5 j% K# z- p7 J( B
        iounmap(aemif_addr);
8 X1 r. E2 \9 H}
) B$ U& s' X1 z! C5 ^/ k' k5 u; ]#endif
3 f7 n8 P# ], r7 F3 m0 d1 [
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
地板
 楼主| 发表于 2014-11-27 14:10:17 | 只看该作者
teddy 发表于 2014-11-27 10:03& v5 @& ?6 b5 V- c
1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了 ...

7 a$ O" L2 v; L) c& `多谢您的解答,还有些问题没搞明白% Q/ n* M& Q4 @, q3 z
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是哪一个频率?
9 x8 j7 l6 a; m2 X        aemif_clk = clk_get(NULL, "aemif");. a# q; K1 s8 ~) p1 h
        if (IS_ERR(aemif_clk))
9 F9 {6 u& r% N# r                return PTR_ERR(aemif_clk);
+ V% J* k0 _, n' c0 r/ z
" P6 e" t( D1 x; z0 z( v        clkrate = clk_get_rate(aemif_clk);
: \- d, e+ l# [9 U& ^( R& H1 I! s3 b& R. |
        clkrate /= 1000;        /* turn clock into kHz for ease of use */
) O0 ?& f. g0 |7 L1 G4 E
, ^/ W7 t, e( Y9 A        ta        = aemif_calc_rate(t->ta, clkrate, TA_MAX);1 A9 j& r! a: f9 w# R; U
        rhold        = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
0 K: f5 H  i6 ^& a        rstrobe        = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);7 A1 [( ]2 H8 f4 ^& ?" _
        rsetup        = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);- u5 i. _: V; g/ x
        whold        = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);% x* N1 v9 u, Y. O: R) [/ F
        wstrobe        = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
# t. |0 a' L4 d        wsetup        = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);* d# e9 W6 I: f
2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?$ U( _3 M! g4 m" X0 g; N

8 M& t- z% H2 i. B! v, H期待您的解答。+ l7 s, P+ f  {# D# N
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
5#
发表于 2014-11-30 16:48:54 | 只看该作者
你好,456/4=114M。请注意emifa 8bit 数据的连接方式(如附件)。6 ^) t8 S2 M* h1 s- Z5 b

0 m  P0 D' a4 x

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
6#
 楼主| 发表于 2014-12-1 14:19:34 | 只看该作者
teddy 发表于 2014-11-30 16:483 v7 V' e! `* M# O; g" s
你好,456/4=114M。请注意emifa 8bit 数据的连接方式(如附件)。
3 D' _7 e3 |1 W& c& P" H
好的! teddy, EMIF时钟频率还是没搞清楚,在开发板系统起来之后,通过仿真器去查看寄存器 prediv、pllm和postdiv以及pll0_sysclk3寄存器, prediv 的ratio = 0,pllm的值为18, postdiv的ratio = 0, pll0_sysclk3的ratio = 00010,6 Y1 S$ \# W: W  w7 A
如果核心板用的是24M晶振,那么24x1= 24, 24 x 19 = 456, 456/1 = 456, 456/3 = 152, 那么EMIF应该是152M, 可是davinci_nand.c中按照aemif的114M频率来配置时序,能否帮忙详细解释一下开发板的时钟频率的设置。$ `; ?) f5 X0 N: W( @  e* E% E
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
7#
发表于 2014-12-1 22:39:46 | 只看该作者
您好!请确认你的pll0_sysclk3的ratio = 00010是否正确,这里的值应该是0x8003。
/ K% V4 }9 b( @8 @9 b
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
8#
 楼主| 发表于 2014-12-2 08:32:24 | 只看该作者
teddy 发表于 2014-12-1 22:39
0 k+ ^3 _) g  S您好!请确认你的pll0_sysclk3的ratio = 00010是否正确,这里的值应该是0x8003。

; d' |0 Y: h$ V' X! ~' J" Y" Steddy,  pll0_sysclk3的值是0x8002,内核是百度网盘上2014.11.06最新版本
  s2 ^0 R+ p5 X- j
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
9#
 楼主| 发表于 2014-12-2 08:37:13 | 只看该作者
在11.06号的内核代码里board-da850-evm.c的da850_evm_init中会调用da850_set_emif_clk_rate函数去设置pll0_sysclk3寄存器为0x8002,通过仿真器,从dsp端读出的寄存器值也是0x8002% {" T' ]% c' {; Q
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 03:52 , Processed in 0.043661 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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