完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
确认DDR时钟源选择
PERI_CRG13 为SOC 频率配置寄存器 PERI_CRG13 为SOC 频率配置寄存器 表3-7 CRG寄存器概览(基址是0x1201_0000) 偏移地址 名称 描述 页码 0x0034 PERI_CRG13 SOC 频率配置寄存器 3-23 对应内存地址为:0x12010034 uboot下命令:mm 0x12010034 linux下命令:devmem 0x12010034 获取到的值为:0x00001191 bit[2:0]=0x1, 则时钟源选择:DPLL POSTDIV 时钟 PERI_CRG79 为SOC 频率状态寄存器 表3-7 CRG寄存器概览(基址是0x1201_0000) 偏移地址 名称 描述 页码 0x013C PERI_CRG79 SOC 频率状态寄存器 3-61 对应内存地址为:0x1201013c uboot下命令:mm 0x1201013c linux下命令:devmem 0x1201013c 获取到的值为:0x0000024b bit[8:6]=0x1, 则时钟源选择:DPLL POSTDIV 时钟 通过读取对应的内存地址,获取当前的DDR时钟选择。 笔者获取到的值为:0x00001191。 对应时钟源为DPLL POSTDIV 时钟。 确认DPLL POSTDIV 时钟频率 Hi3519V101内部使用了4 个PLL,每个PLL 使用两组配置寄存器,DDR对应使用DPLL,相应配置寄存器为PERI_CRG_PLL4和 PERI_CRG_PLL5。 计算DPLL POSTDIV 时钟频率的公式为: FOUTPOSTDIV = FOUTVCO / (pstdiv1 * pstdiv2) 其中: FOUTVCO = FREF * ( fbdiv + frac/2^24) / refdiv 展开为: FOUTPOSTDIV = (FREF * ( fbdiv + frac / 2^24) / refdiv) / (pstdiv1 * pstdiv2) 这里有很多的变量,它们分别都通过配置寄存器PERI_CRG_PLL4和 PERI_CRG_PLL5去设置,如下: 表3-7 CRG寄存器概览(基址是0x1201_0000) 偏移地址 名称 描述 页码 0x0010 PERI_CRG_PLL4 DPLL 配置寄存器0 3-14 对应内存地址为:0x12010010 uboot下命令:mm 0x12010010 linux下命令:devmem 0x12010010 获取到的值为:0x12c00000 bit[30:28]=0x1,对应dpll_postdiv2=1 bit[30:28]=0x2,对应dpll_postdiv1=2 bit[30:28]=0x2,对应dpll_frac=12582912(0xc00000) 偏移地址 名称 描述 页码 0x0014 PERI_CRG_PLL5 DPLL 配置寄存器1 3-15 对应内存地址为:0x12010014 uboot下命令:mm 0x12010014 linux下命令:devmem 0x12010014 获取的值为: 0a50204d bit[17:12]=0x2,对应dpll_refdiv=2 bit[11:0]=0x4d,对应dpll_fbdiv=77 通过上述寄存器,笔者得到的相应变量的值分别如下: FREF = 24MHz // PLL 输入参考时钟,Hi3519V101要求固定输入24MHz fbdiv = 77 // PERI_CRG_PLL5[17:12]:整数倍频系数 frac = 0xc00000 // PERI_CRG_PLL4[23: 0]:小数倍频系数 refdiv = 2 // PERI_CRG_PLL5[11: 0]:参考时钟分频系数 pstdiv1 = 1 // PERI_CRG_PLL4[30:28]:第一级输出分频系数 pstdiv2 = 2 // PERI_CRG_PLL4[26:24]:第二级输出分频系数)这两个参数在寄存器 带入计算公式,计算: FOUTPOSTDIV = (FREF * ( fbdiv + frac / 2^24) / refdiv) / (pstdiv1 * pstdiv2) = ( 24MHz * ( 77 + 0xc00000 / 0x1000000 ) / 2 ) / (1 * 2) = ( 24MHz * ( 77 + 12582912 / 16777216 ) / 2 ) / (1 * 2) = 466.5MHz FOUTPOSTDIV时钟提供给ddr控制器,经过倍频(DDRC_CFG_WORKMODE:)后作为时钟输出给ddrPHY, 即:466.5M *2 = 933M, 对应的ddr颗粒读写速率为1866M: 933M *2=1866M 重新设置DDR时钟频率 通过上述分析,我们了解到,可以通过配置寄存器PERI_CRG_PLL4和 PERI_CRG_PLL5去设置DDR的时钟频率。 最终输出的DDR时钟频率,由以下公式计算得出: FOUTPOSTDIV = (FREF * ( fbdiv + frac / 2^24) / refdiv) / (pstdiv1 * pstdiv2) Ps: FREF // PLL 输入参考时钟,Hi3519V101要求固定输入24MHz fbdiv // PERI_CRG_PLL5[17:12]:整数倍频系数 frac // PERI_CRG_PLL4[23: 0]:小数倍频系数 refdiv // PERI_CRG_PLL5[11: 0]:参考时钟分频系数 pstdiv1 // PERI_CRG_PLL4[30:28]:第一级输出分频系数 pstdiv2 // PERI_CRG_PLL4[26:24]:第二级输出分频系数)这两个参数在寄存器 设置寄存器的方式是通过uboot表格进行配置,如下: 也可以通过软件的方式去配置,在DDR初始化的代码中修改对应寄存器。但如果在正常运行的状态下去操作DDR,可能会导致不可预知的错误。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
436 浏览 0 评论
1477 浏览 3 评论
RK 主流平台参数对比文档:助力设计阶段快速选型(包含RK3588 RK3588S RK3588S2 RK3576 RK3568)
1077 浏览 0 评论
行业集结:共同定制 RK3566 集成 AI 眼镜的前沿 AR 方案
1701 浏览 1 评论
816 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-6 02:22 , Processed in 0.668894 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191