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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9105|回复: 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后的地址,总线地址线并没有动作。我想请教一下:& @( E+ k; |3 n; f. e

2 {% H2 _  [) \) j1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了?
' \8 j, i  O4 E: e2.在board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005, 这样设置是否能起作用?( N0 o/ K+ w  A& v
3.要让cs5正常工作需要注意哪些寄存器的设置,目前只设置了CE5CFG寄存器。
& j% a7 N+ C& y( G3 N  j
: Z4 ^5 S' [. E- n! u! F搞了好久CS5都不能正常工作,还请帮忙解答一下疑问,多谢!; I% D$ |8 T) x2 Q8 t1 {  q' g

  y  P6 E' [4 o) _: p
分享到:  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
! ^) E3 q2 P! M
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
板凳
发表于 2014-11-27 10:03:11 | 只看该作者
1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了?
" |9 `9 C1 P0 O" @0 S* o现在emifa在u-boot里面配置的频率是114M;无论从那个地方启动,emifa总线模块是使能的。7 @% M. A4 p! m& _
2.在board_da850_evm.c中的da850_set_emif_clk_rate里修改设置CE5CFG寄存器值为0x8005, 这样设置是否能起作用?
6 u' L2 ?0 Z. X6 N$ D可以起作用的,不过需要使用ioremap对物理地址做映射,内核才能访问。
& A1 L8 h; j, A' A: C3.要让cs5正常工作需要注意哪些寄存器的设置,目前只设置了CE5CFG寄存器。1 q1 L, \3 I, F$ d
下面我给的是CS2的一个配置例子,您可以参考下:9 a. C$ y. l  l5 K1 h3 Y
#define DA8XX_AEMIF_CE2CFG_OFFSET        0x108 {5 r! w% F& L3 X5 M1 u" u
#define DA8XX_AEMIF_CE4CFG_OFFSET        0x18
3 t3 I! X$ k# z* {#define DA8XX_AEMIF_CE5CFG_OFFSET        0x1c
( ~' J, y, C# F, F. p  b7 X#define DA8XX_AEMIF_ASIZE_MASK                0x3
$ Z- D0 [1 U8 d#define DA8XX_AEMIF_ASIZE_16BIT                0x1& A( a+ t1 a# P, I2 s/ Z5 |4 Y
#define DA8XX_AEMIF_ASIZE_8BIT                0x0$ P) d' f# X. ]* v* ~5 f" A# f

) S) ^$ u) l6 `. A' [2 P#if defined(CONFIG_MACH_DAVINCI_DA850_PHYSMAP_FLASH)2 Y0 t1 \. I9 n
static void __init da850_evm_init_nor(void)
2 T" Q6 _& Z: e: M{
7 g+ k; u: a6 p. k# a# ~3 T- q8 o        void __iomem *aemif_addr;; l( b6 L0 @0 J8 y" u: ?' j
. |0 N, F/ j6 C
        aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);
1 ~* h$ b3 ~. F. S; E1 C  T/ D- G- J* o5 ~$ B# H
        /* Configure data bus width of CS2 to 16 bit */
8 B+ A" N+ L% ?; m        writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |6 s7 i, Q4 [. z. Q- z; f7 Y$ W
                DA8XX_AEMIF_ASIZE_16BIT,9 G5 S8 J, a8 J# c9 X6 T
                aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);/ l$ d, ~5 N* p/ w

* W1 j: |( Z% D) T        iounmap(aemif_addr);
/ r2 J) w/ K# t. |}. t$ g3 b9 {  P- s7 d' t9 s
#endif& ?- ~9 S; N7 E2 M: E
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
地板
 楼主| 发表于 2014-11-27 14:10:17 | 只看该作者
teddy 发表于 2014-11-27 10:03
1 t6 c: v) w8 N& y. {% q: K1.最新的u-boot里的emif总线频率设置是多少?在u-boot中从SD卡启动内核和运行文件系统,emif总线是否使能了 ...
$ C9 r+ Q. b) \9 G7 k$ G6 K
多谢您的解答,还有些问题没搞明白
" u, c; k' K4 M! l! A1.目前我在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是哪一个频率?
" d2 e3 x, z0 V! g7 @, D2 R        aemif_clk = clk_get(NULL, "aemif");
! ~7 o: p4 H3 J, m0 V        if (IS_ERR(aemif_clk))
5 J, O( {( t, {- b                return PTR_ERR(aemif_clk);- n4 S# P4 T3 |- C* ^! l

8 D# [5 `4 g3 z4 L$ f6 P; _        clkrate = clk_get_rate(aemif_clk);
3 k/ z6 ~, }3 s! Q* L& A
# _0 h/ N( o: Y' Q        clkrate /= 1000;        /* turn clock into kHz for ease of use */
" }- M# ?  }  y7 {* Q# s
& Z* v/ u" Y6 \" ]) ^        ta        = aemif_calc_rate(t->ta, clkrate, TA_MAX);, p7 X- _# e) X! s
        rhold        = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
' e: b/ B; ~5 @        rstrobe        = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);
# q9 m4 f0 R# D/ ]3 w6 q        rsetup        = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);
. q9 n/ b! i( z, J        whold        = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);
/ d+ I2 q0 e$ }' A        wstrobe        = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);# M# ]6 |# [9 I0 z* H1 W0 Y; V
        wsetup        = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);' n1 Z: t; D1 d, S, w2 T( n
2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?3 u+ f. {  Z5 ~) @9 I- n) D

: F: y% q4 J$ L- @期待您的解答。& l( m2 p; a( ?- j* D! \4 q
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
5#
发表于 2014-11-30 16:48:54 | 只看该作者
你好,456/4=114M。请注意emifa 8bit 数据的连接方式(如附件)。
. j; m5 e; L! O" U# ?  L5 K7 f
* J. v4 Q& s6 k+ C9 x! M% A( a/ A

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

积分
391
6#
 楼主| 发表于 2014-12-1 14:19:34 | 只看该作者
teddy 发表于 2014-11-30 16:488 o- d; j4 g+ U( l/ {! f8 @
你好,456/4=114M。请注意emifa 8bit 数据的连接方式(如附件)。
! M- q* \, g6 K* Q" \. B9 v1 a: ?
好的! teddy, EMIF时钟频率还是没搞清楚,在开发板系统起来之后,通过仿真器去查看寄存器 prediv、pllm和postdiv以及pll0_sysclk3寄存器, prediv 的ratio = 0,pllm的值为18, postdiv的ratio = 0, pll0_sysclk3的ratio = 00010,; j/ f# x7 h6 h9 |% h: V0 F% F
如果核心板用的是24M晶振,那么24x1= 24, 24 x 19 = 456, 456/1 = 456, 456/3 = 152, 那么EMIF应该是152M, 可是davinci_nand.c中按照aemif的114M频率来配置时序,能否帮忙详细解释一下开发板的时钟频率的设置。( A# u# F0 T1 @# p" b$ [
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
7#
发表于 2014-12-1 22:39:46 | 只看该作者
您好!请确认你的pll0_sysclk3的ratio = 00010是否正确,这里的值应该是0x8003。
& n' \, S5 K- P
回复 支持 反对

使用道具 举报

89

主题

104

帖子

391

积分

中级会员

Rank: 3Rank: 3

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

* L( @/ P6 i  w5 \2 S2 steddy,  pll0_sysclk3的值是0x8002,内核是百度网盘上2014.11.06最新版本
2 v! ]7 v" Y' T* K6 g5 |/ C6 \
回复 支持 反对

使用道具 举报

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
  T6 ^4 f" Y, g/ u; ]2 \1 `
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 05:04 , Processed in 0.056696 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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