am335x ddr2 三 调试总结怎么解决

调试工作,最全面的调试工作文章 - 电子工程世界网
> 调试工作
在电子工程世界为您找到如下关于“调试工作”的新闻
调试工作资料下载
4.3.4 完整代码68
4.4 调试应用75
4.4.1 功能调试75
4.4.2 使用及维护76
第5章 电喷汽车喷油嘴清洗机
5.1 系统功能描述及工作原理77
5.1.1 系统功能描述77
5.1.2 电喷汽车喷油嘴清洗机的工作原理78
5.2 系统方案及电路设计78
5.2.1 系统方案78
5.2.2 PWM波调速原理79
5.2.3 PWM脉冲驱动电机的实现过程...
本书全面、系统地介绍了MCS-51系列单片机应用系统的各种实用接口技术及其配置。   内容包括:MCS-51系列单片机组成原理:应用系统扩展、开发与调试;键盘输入接口的设计及调试;打印机和显示器接口及设计实例;模拟输入通道接口技术;A/D、D/A、接口技术及在控制系统中的应用设计;V/F转换器接口技术、串行通讯接口技术以及其它与应用系统设计有关的实用技术等。   本书是为满足广大科技工作者从事...
(GPIOx_ODR) (x=A..E) 115
8.2.5 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 115
8.2.6 端口位清除寄存器(GPIOx_BRR) (x=A..E) 115
8.2.7 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 116
8.3 复用功能I/O和调试配置(AFIO) 116
8.3.1 把OSC32_IN...
1.2.2 一阶动态电路的设计与仿真
1.2.3 异步四位二进制计数器的设计及仿真
1.2.4 89C51与8255接口电路的调试及仿真
第2章 Proteus ISIS的原理图设计
2.1 Proteus ISIS编辑环境
2.1.1 Proteus ISIS编辑环境简介
2.1.2 进入Proteus ISIS编辑环境
2.2 Proteus...
1.2 线性调整器——开关调整器的原型
1.2.1 基本工作原理及优缺点
1.2.2 线性调整器的缺点
1.2.3 串接晶体管的功率损耗
1.2.4 线性调整器的效率与输出电压的关系
1.2.5 串接PNP型晶体管的低压差线性调整器
1.3 buck开关型调整器拓扑
1.3.1 基本工作原理
1.3.2 buck调整器的主要电流波形
1.3.3 buck...
的教材,也可作为从事开关电源设计、开发的工程师的设计参考资料。 图书目录第1部分拓扑分析第1章基本开关型调整器——buck、boost及反相型拓扑1.1简介1.2线性调整器——开关调整器的原型1.2.1基本工作原理及优缺点1.2.2线性调整器的缺点1.2.3串接晶体管的功率损耗1.2.4线性调整器的效率与输出电压的关系1.2.5串接pnp型晶体管的低压差线性调整器1.3buck开关型调整器拓扑...
可以根据应用软件规模和开发计划选用。
使用集成开发环境开发基于ARM的应用软件,包括编辑、编译、汇编、链接等工作全部在PC机上即可完成,调试工作则需要配合其他的模块或产品方可完成,目前常见的调试方法有以下几种:1、指令集模拟器
部分集成开发环境提供了指令集模拟器,可方便用户在PC机上完成一部分简单的调试工作,但是由于指令集模拟器与真实的硬件环境相差很大,因此即使用户使用指令集模拟器调试通过...
S3C4510B 及JTAG 接口电路 102
5.4.3 SDRAM 接口电路的调试 103
5.4.4 Flash 接口电路的调试 105
5.4.5 10M/100M 以太网接口电路 105
5.5 印刷电路板的设计注意事项 105
5.5.1 电源质量与分配 105
5.5.2 同类型信号线的分布 106
5.6 本章小节 106
第6 章 部件工作...
调试人员建立良好的沟通,积极主动的配合设备的安装调试工作,对技术过程做必要的记录;其次,对本单位技术设施施工人员要做好施工前的技能培训工作;最后,严格规范质量验收程序,避免故障后遗症的发生。4、运行阶段的技术风险,业主应该从两个方面来防控该类风险的发生。我们知道技术故障的发生是不可避免的,问题是如何减少故障发生的频率和故障发生后如何在最短时间内恢复正常工作?首先,业主应该加强本台技术人员的培训工作...
S3C4510B及JTAG接口电5.4.3 SDRAM接口电路的调试5.4.4 Flash接口电路的调试5.4.5 10M/100M以太网接口电路5.5 印刷电路板的设计注意事项5.5.1 电源质量与分配5.5.2 同类型信号线的分布5.6 本章小节第6章 部件工作原理与编程示例6.1 嵌入式系统的程序设计方法6.2 应用程序编程示例6.2.1 通用I/O口工作原理与编程6.2.2 串行通讯工作原理与...
调试工作相关帖子
我公司开发的ECAN Tools调试分析软件。该软件功能非常丰富且后续实用功能不断添加中,典型功能包括——数据收发、多段滤波、波特率自动识别、统计模式、数据保存、文件发送、错误帧接收、总线诊断等功能。灵活运用这些功能可以使分析工作事半功倍。我公司USBCAN-II&&Pro设备同时也可以使用周立功CAN Test和CAN Pro软件,这两款软件部分功能也极为实用,且对于习惯使用...
设计多旋翼飞机的大学生。这架飞机在校园内拍摄了一些视频。李念不断调试它,让它更稳定些。
第二架飞机拍摄的画面还是很抖。“如果不抖的话,需要一套云台,让摄像头能始终对着要拍摄的目标。”李念解释说,“那时,云台技术还很原始,我们用舵机做的,传感器性能也不太好,即使加了这种云台,画面抖动仍然很明显。”
直到第四架飞机,李念才真正实现了他的航拍梦。在大学期间,李念成立了自己的航拍工作室,现在,他的航怕事...
所示。从图2可以看出,上电或复位默认情况下,SYSCLK2分频产生XTIMCLK,XTIMCLK再通过2分频产生XCLKOUT时钟,该时钟信号通过引脚XCLKOUT输出,即默认情况下XCLKOUT=SYSCLK/4=OSCCLK/16,调试时可以观察该引脚的信号以判断设备是否在正确的时钟下工作。
- XCLKOUT引脚上电或者复位默认情况下是激活状态的。
- XCLKOUT引脚没有...
联系QQ:;
岗位:调试工程师;& & 招聘人数:5名;& &工作地点:杭州;
岗位职责:
1、 负责机器人模块的调试及调试说明的编写;
2、 负责对客户的技术支持,产品的维修等;
3、 负责对研发样板的焊接;
4、 负责对机器的组装、调试等。
5、 协助生产发货。
岗位要求:
1、 电子信息工程或自动控制等...
联系QQ:;
岗位:电子工程师;& & 招聘人数:3名;& &工作地点:杭州;
岗位职责:
1、 负责机器人模块的软硬件设计;
2、 负责编写产品测试文档,样机调试;
3、 负责编写相关说明文档以及专利的申请;
4、 协助销售到客户现场调试等。
岗位要求:
1、 电子信息工程或自动控制等相关专业,本科及以上学历...
和算法表达式,并由生成器解释产生完整的并行有限元计算C程序。FELAC 2.0 分为串行、并行两个版本。  FELAC 2.0的目标是通过输入微分方程表达式和算法之后,就可以得到所有有限元计算的程序代码,包含串行程序和并行程序。该系统采用一种语言(有限元语言)和四种技术(对象技术、组件技术、公式库技术生成器技术)开发而成。并且基于FELAC 1.0的用户界面,新版本扩充了工作目录中右键编译功能...
& && &&&最近在用CycloneV&&FPGA调试DDR3,画板子的时候没有注意到这个oct_rzqin管脚,该管脚处于悬空的状态,我看handbook中写道这个管脚应该接一个100欧姆的电阻到地,我现在没有接,不知道会不会影响到DDR3的工作。
& && &&nbsp...
特殊元件的位置时要遵守以下原则:
(1)尽可能缩短高频元器件之间的连线,设法减少它们的分布参数和相互间的电磁干扰。
易受干扰的元器件不能相互挨得太近,输入和输出元件应尽量远离。
(2)某些元器件或导线之间可能有较高的电位差,应加大它们之间的距离,以免放电引
出意外短路。带高电压的元器件应尽量布置在调试时手不易触及的地方。
(3)重量超过 15g 的元器件、应当用支架加以固定,然后焊接...
]Orima 发表于
08:32[/color][/url][/size]
用的是STM片子。多少米入手?地址?[/quote]
MCU不是STM的,懒的联系厂家问调试工具了
[url]/index.php?m=product.product_item&spm=49[/url]
这个版本的我也到了,据说圆版的米刷是...
去看,其实我们一直在说的430就是一款比较复杂的芯片,我们也一直在做关于软件的工作。那么对于一款传感器芯片我们该如何看他的软件部分呢?1.芯片的通信协议2.芯片的数据读取方式& & 关于芯片的通信协议我们都明白了,这里我们选择的是ADXL345的IIC方式,ADXL也可以采取SPI的方式进行读取,这需要在硬件上面发生改变,所以在一个板子的制作时,软件工程师是需要和硬件工程师密切...
调试工作视频
调试工作创意
本周热门资源推荐后使用快捷导航没有帐号?
查看: 3658|回复: 2
AM335X DDR3 512M调试过程
在线时间27 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
AM335x MPU 有很多有点:
1.有很高的性价比,集成 3D 图形加速引擎,2 个千兆以太网口,LCDC,TSC 等等。
2.有很完整的生态系统。Linux,Android SDK 都很完善,让人很容易上手。
3.TI 的资料很丰富,有 WIKI,Deyisupport,还有原厂和代理商 FAE 的支持。
4.有几种 EVM 可以选择来评估。
调试工具的准备:
1、准备CCS开发工具,下载后并安装,此工具用于使用gel文件配置cpu寄存器,运行out可执行文件,这些文件在下面会说明
2、准备XDS100v2调试仿真器,ccs调试板的调试器
根据WIKI的说明,
1、先下载Code Composer GEL file 文件。此文件用于CCS下载配置寄存器到CPU上,用于初始化内存使用,初始化后,cpu的寄存器,就根据这个配置文件里面的相同了
2、在下载好Executable CCS .out文件,此文件用于自动检测DDR3的内存参数,ddr3检测后,会将推荐值打印在ccs的控制台上,
3、内存计算工具,excel表格以上工具在wiki的链接里,都可以下载到
打开GEL文件,修改以下几个宏定义
#define DDR2_READ_LATENCY
#define DDR2_SDRAM_TIMING1& &
#define DDR2_SDRAM_TIMING2& &
#define DDR2_SDRAM_TIMING3& &
#define DDR2_SDRAM_CONFIG
#define DDR2_REF_CTRL
这些参数,必须根据实际DDR3的内存参数修改,不同的内存配置有可能不同
修改excel表格中的几个内存参数值,全部修改完成后,将参数写入GEL配置文件里,
打开CCS软件,导入刚才修改好的gel文件,连接好xds100v2到目标板后,gel文件将自动开始配置CPU寄存器,等配置完成后(此时内存还不可使用)最后加载out文件,并运行,
out文件将自动计算合适的内存参数,最后在将 out执行文件打印出来的值写入到gel文件中,
如果正确,这时内存就已经可以使用了。可以使用gel文件里的测试内存工具测试内存的正确性不同的板内存的值会不一样,请注意
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间256 小时
威望1625 分
芯币3719 枚
E金币129 枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1625, 距离下一级还需 375 积分
纯净的硅(高级), 积分 1625, 距离下一级还需 375 积分
Thanks a lot.
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
多谢楼主!正好需要AM3352下修改gel来匹配DDR3
Powered by
逛了这许久,何不进去瞧瞧?DDR调试,最全面的DDR调试文章 - 电子工程世界网
在电子工程世界为您找到如下关于“DDR调试”的新闻
DDR调试资料下载
DDR验证和调试的高级方法...
本资料讲述DDR电路的调试...
用fpga实现的 DDR接口的时序调试的实践...
随着信息社会的发展,人们要处理的各种信息总量变得越来越大,尤其在处理大数据量与实时处理数据方面,对处理设备的要求是非常高的。为满足这些要求,实时快速的各种CPU、处理板应运而生。这类CPU与板卡处理数据速度快,效率高,并且不断的完善与发展。此类板卡要求与外部设备通讯,同时也要进行内部的数据交换,于是板卡的接口设备调试与内部数据交换也成为必须要完成的工作。本文所作的工作正是基于一种高速通用信号处理...
JLink对AM335x StarterWare进行调试的步骤:涵盖了从IAR工程的建立、导入、编译,到配置、调试的每一步,可作为用户使用IAR连接JLink进行AM335x调试的参考教程。调试程序为StarterWare中的uartEcho工程。StarterWare是TI官方提供的一个非操作系统的软件开发包,提供了对CCS以及IAR的支持,源码中包含了SOC启动代码,DDR初始化代码,以及串口,USB...
DDR SDRAM 设计及调试经验总结
感觉还不错,可以给大家做一下参考!...
DDR内存接口电气验证和调试产品技术资料...
改善查看周期:调试DDR和DDR2系统中的间歇性存储器问题应用指南...
速度和容量的明显增长,当前流行的FPGA芯片都提供高速总线,例如DDR内存总线,PCI-X总线、SPI总线;针对超高速的数据传输,FPGA通过集成SerDes提供高速串行IO,支持各种诸如PCI-E、GBE、XAUI等高速串行总线协议,为各种不同标准的高速传输提供极大的灵活性。典型的高速FPGA器件提供的每一条物理链路的速度从200Mbps到高达10Gbps,高速IO的测试和验证更成为传统专注于...
华为路由器配置手册华为路由器配置手册:
第一章 系统基本命令:主要介绍命令行接口相关命令、配置文件管理命令、基本的 系统管理命令、网络测试工具命令、系统调试命令、SNMP配置命令、日志配置命令和终端服务命令。
第二章 接口配置命令:本章主要介绍以太网口配置命令、串口配置命令、CE1/PRI接口 配置命令和接口管理命令。
第三章 广域网协议配置命令 本章主要介绍PPP、SLIP、MP...
DDR调试相关帖子
& && &&&最近在用CycloneV&&FPGA调试DDR3,画板子的时候没有注意到这个oct_rzqin管脚,该管脚处于悬空的状态,我看handbook中写道这个管脚应该接一个100欧姆的电阻到地,我现在没有接,不知道会不会影响到DDR3的工作。
& && &&nbsp...
丰富的Demo程序,还提供详细的开发教程,全面的技术支持,协助客户进行底板设计、调试以及软件开发。 图8 SOM-TL8148正面 图9 SOM-TL8148背面 2&&产品特点& & 基于TI TMS320DM8148,浮点DSP C674x+ARM Cortex-A8+SGX530+HDVPSS+ HDVICP2;& & TI主推...
活动详情:.cn/huodong/201512Tektronix/survey.html
日期:即日起——12月31日
新一期泰克多媒体总线下载有礼活动来啦,本系列最后一期,还没参加过这个系列活动的小伙伴抓紧了哟。这次的主题是《DDR Memory》,讲述的是内存接口的测试与调试技术。 奖品一如既往的丰富多彩,参与步骤依旧那么简单便捷
存储若干连续字组成的“线”。在早期的缓存中,线长是32字节,现在一般是64字节。对于64位宽的内存总线,每条线需要8次传输。而DDR对于这种传输模式的支持更为高效。
当处理器需要内存中的某块数据时,整条缓存线被装入L1d。缓存线的地址通过对内存地址进行掩码操作生成。对于64字节的缓存线,是将低6位置0。这些被丢弃的位作为线内偏移量。其它的位作为标签,并用于在缓存内定位。在实践中,我们将地址分为...
从没测试过,另一方面是因为USB太慢了。用数据来说话吧,我写了一个简单的测试程序,通过USB连接PC在CCS中调试(单核运行),读取一张BMP图片然后做简单处理。对于一张400*300像素大小的图片,读取用时半分钟以上,如果是大尺寸图片,例如可能需要几分钟。实在是太慢了,主要是慢在USB传输过程,因为数据传输完成后进行的处理速度很快。这也加速了我要测试ETH接口的计划。虽然早有计划...
主要的工作频率和可能对系统造成影响的谐波频率,可以查一下相关厂商的电容资料或者参考厂商提供的资料库软件,根据具体的需要选择。至于个数就不一定了,看你的具体需要了,多加一两个也挺好的,暂时没用的可以先不贴,根据实际的调试情况再选择容值。如果你PCB上主要工作频率比较低的话,加两个电容就可以了,一个虑除纹波,一个虑除高频信号。如果会出现比较大的瞬时电流,建议再加一个比较大的钽电容。
其实滤波应该也包含...
uImage: make ARCH=arm uImage LOADADDR=0x8000
3)编译设备树:& &make ARCH=arm dtbs
Preloader:在Qsys中配置,如:DDR,USB,网口,SPI,IIC,SD等,除了时钟和DDR有相关参数需要修改,其它的都只是pin脚映射。真是需要调试的是uboot。 ou513 发表于
开发板平台简要介绍核心板Exynos4412有两种封装形式, 其中POP封装的芯片内含1GB内存, 所以不需要外扩DDR,可大大节省 PCB 面积,功耗控制方面也更好,多用于手持设备当中; SCP 封装优点是内存扩展更灵活,生产工艺相对更容易控制。电源芯片 S5M8767 的输入电压范围是 3.5v~5.5v,但是最佳的输入电压是 3.7v~4.2v,也就是 4v 左右,这样可以使...
接口协议,串口?I2C?网口?是需要控制存储器?SDRAM?DDR?还是需要完成一个算法实现?
2、 搜罗或编写相关代码。
有了明确的目标,我们就可以开始搜罗类似可用的代码啦,能力强自己写一段吧;当然现在的网络资源那么丰富,有大把可用的代码
3、 分析研究代码。
虽然提倡拿来主义,但是知己知彼方能百战不殆,最好还是能够认真的研究研究。读懂代码、分析算法、学习语法,在过程中不断的提升自己的内力...
平台,既可以用于AM335x的裸跑应用,又可以做一些底层驱动调试。目前只支持GPEVM,SK,BeagleBone三个平台,不支持BeagleBone Black。BeagleBone Black是BeagleBone的升级版,AM335x从PG1.0的720M升级到PG2.1的1G,DDR由256M DDR2升为512M DDR3L,PMU由TPS65217B改为TPS65217C,去掉了...
DDR调试视频
DDR调试创意
本周热门资源推荐1818人阅读
由Makefile可知,SPL的入口在u-boot-2011.09-psp04.06.00.08\arch\arm\cpu\armv7\start.S中
SPL的功能无非是设置MPU的Clock、PLL,Power,DDR,Uart,Pin Mux,完成对U-Boot的引导的工作,所以SPL board port主要针对以上几点。
在start.S中:
cpu_init_crit
board_init_f
board_init_r
cpu_init_crit
#ifndef CONFIG_SKIP_LOWLEVEL_INIT&
&&& bl&&& cpu_init_crit&
其中,CONFIG_SKIP_LOWLEVEL_INIT 在am335x_evm.h中定义:
/* Since SPL did all of this for us, we don't need to do it twice. */&
#ifndef CONFIG_SPL_BUILD&
#define CONFIG_SKIP_LOWLEVEL_INIT&
由此可知,cpu_init_crit 只在SPL中才进行编译,U-Boot中不编译,避免了同样的内容重复设置,比如DDR等。
cpu_init_crit
----& lowlevel_init& (u-boot-2011.09-psp04.06.00.08\arch\arm\cpu\armv7\omap-common\lowlevel_init.S)
&&&&&&& ----& s_init&& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Evm.c)
&&&&&&&&&&&&&&&&& ----& 关看门狗
&&&&&&&&&&&&&&&&& ----& pll_init();& //PLL和时钟设置
&&&&&&&&&&&&&&&&& ----& rtc32k_enable();& //使能RTC
&&&&&&&&&&&&&&&&& ----& 串口设置
&&&&&&&&&&&&&&&&& ----& init_timer();
&&&&&&&&&&&&&&&&& ----& preloader_console_init();
&&&&&&&&&&&&&&&&& ----& I2C0初始化,读EEPROM
&&&&&&&&&&&&&&&&& ----& DDR设置(DDR2\DDR3)
pll_init();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)
----& mpu_pll_config(MPUPLL_M_500);& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)&&
&&&&& //设置MPU的频率为500MHz,可以修改
----& core_pll_config();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)
&&&&& //设置CORE频率为1GHz
----& per_pll_config();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)&&&
&&&& //设置外设频率为960MHz&&&&&&&&&&&&&&&&&&&&&
----& interface_clocks_enable();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)&
&&&& //使能内部连接模块的时钟
----& power_domain_transition_enable();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)&&
&&&& //使能模块电源
----& per_clocks_enable();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c)&
&&&& //使能外设模块的时钟
在u-boot-2011.09-psp04.06.00.08\arch\arm\include\asm\arch-ti81xx\Clocks_am335x.h中,定义了所有时钟频率:
/* Put the pll config values over here */
#define OSC&&& 24&&&&&&&&&&&&&&/* 外部晶振为24MHz */
/* MAIN PLL Fdll = 1 GHZ, */&
#define MPUPLL_M_500&&& 500&&& /* 125 * n */&
#define MPUPLL_M_550&&& 550&&& /* 125 * n */&
#define MPUPLL_M_600&&& 600&&& /* 125 * n */&
#define MPUPLL_M_720&&& 720&&& /* 125 * n */
#define MPUPLL_N&&& 23&&& /* (n -1 ) */&
#define MPUPLL_M2&&& 1
/* Core PLL Fdll = 1 GHZ, */&
#define COREPLL_M&&& 1000&&& /* 125 * n */&
#define COREPLL_N&&& 23&&& /* (n -1 ) */
#define COREPLL_M4&&& 10&&& /* CORE_CLKOUTM4 = 200 MHZ */&
#define COREPLL_M5&&& 8&&& /* CORE_CLKOUTM5 = 250 MHZ */&
#define COREPLL_M6&&& 4&&& /* CORE_CLKOUTM6 = 500 MHZ */
* USB PHY clock is 960 MHZ. Since, this comes directly from Fdll, Fdll&
* frequency needs to be set to 960 MHZ. Hence,&
* For clkout = 192 MHZ, Fdll = 960 MHZ, divider values are given below&
#define PERPLL_M&&& 960&
#define PERPLL_N&&& 23&
#define PERPLL_M2&&& 5
/* DDR Freq is 266 MHZ for now*/&
/* Set Fdll = 400 MHZ , Fdll = M * 2 * CLKINP/ N + 1; clkout = Fdll /(2 * M2) */&
#define DDRPLL_M&&& 266&
#define DDRPLL_N&&& 23&
#define DDRPLL_M2&&& 1
MPU PLL结构:
配置MPU PLL:
代码如下:
void mpu_pll_config(int mpupll_M)&
&&& u32 clkmode, clksel, div_m2;
&&& clkmode = readl(CM_CLKMODE_DPLL_MPU);&
&&& clksel = readl(CM_CLKSEL_DPLL_MPU);&
&&& div_m2 = readl(CM_DIV_M2_DPLL_MPU);
&&& /* Set the PLL to bypass Mode */&
&&& writel(PLL_BYPASS_MODE, CM_CLKMODE_DPLL_MPU);
&&& while(readl(CM_IDLEST_DPLL_MPU) != 0x);
&&& clksel = clksel & (~0x7ffff);&
&&& clksel = clksel | ((mpupll_M && 0x8) | MPUPLL_N);&
&&& writel(clksel, CM_CLKSEL_DPLL_MPU);
&&& div_m2 = div_m2 & ~0x1f;&
&&& div_m2 = div_m2 | MPUPLL_M2;&
&&& writel(div_m2, CM_DIV_M2_DPLL_MPU);
&&& clkmode = clkmode | 0x7;&
&&& writel(clkmode, CM_CLKMODE_DPLL_MPU);
&&& while(readl(CM_IDLEST_DPLL_MPU) != 0x1);&
Core PLL&结构:
配置Core PLL:
代码如下:
static void core_pll_config(void)&
&&& u32 clkmode, clksel, div_m4, div_m5, div_m6;
&&& clkmode = readl(CM_CLKMODE_DPLL_CORE);&
&&& clksel = readl(CM_CLKSEL_DPLL_CORE);&
&&& div_m4 = readl(CM_DIV_M4_DPLL_CORE);&
&&& div_m5 = readl(CM_DIV_M5_DPLL_CORE);&
&&& div_m6 = readl(CM_DIV_M6_DPLL_CORE);
&&& /* Set the PLL to bypass Mode */&
&&& writel(PLL_BYPASS_MODE, CM_CLKMODE_DPLL_CORE);
&&& while(readl(CM_IDLEST_DPLL_CORE) != 0x);
&&& clksel = clksel & (~0x7ffff);&
&&& clksel = clksel | ((COREPLL_M && 0x8) | COREPLL_N);&
&&& writel(clksel, CM_CLKSEL_DPLL_CORE);
&&& div_m4 = div_m4 & ~0x1f;&
&&& div_m4 = div_m4 | COREPLL_M4;&
&&& writel(div_m4, CM_DIV_M4_DPLL_CORE);
&&& div_m5 = div_m5 & ~0x1f;&
&&& div_m5 = div_m5 | COREPLL_M5;&
&&& writel(div_m5, CM_DIV_M5_DPLL_CORE);
&&& div_m6 = div_m6 & ~0x1f;&
&&& div_m6 = div_m6 | COREPLL_M6;&
&&& writel(div_m6, CM_DIV_M6_DPLL_CORE);
&&& clkmode = clkmode | 0x7;&
&&& writel(clkmode, CM_CLKMODE_DPLL_CORE);
&&& while(readl(CM_IDLEST_DPLL_CORE) != 0x1);&
Peripheral PLL&结构
配置Peripheral PLL:
代码如下:
static void per_pll_config(void)&
&&& u32 clkmode, clksel, div_m2;
&&& clkmode = readl(CM_CLKMODE_DPLL_PER);&
&&& clksel = readl(CM_CLKSEL_DPLL_PER);&
&&& div_m2 = readl(CM_DIV_M2_DPLL_PER);
&&& /* Set the PLL to bypass Mode */&
&&& writel(PLL_BYPASS_MODE, CM_CLKMODE_DPLL_PER);
&&& while(readl(CM_IDLEST_DPLL_PER) != 0x);
&&& clksel = clksel & (~0x7ffff);&
&&& clksel = clksel | ((PERPLL_M && 0x8) | PERPLL_N);&
&&& writel(clksel, CM_CLKSEL_DPLL_PER);
&&& div_m2 = div_m2 & ~0x7f;&
&&& div_m2 = div_m2 | PERPLL_M2;&
&&& writel(div_m2, CM_DIV_M2_DPLL_PER);
&&& clkmode = clkmode | 0x7;&
&&& writel(clkmode, CM_CLKMODE_DPLL_PER);
&&& while(readl(CM_IDLEST_DPLL_PER) != 0x1);&
串口设置(u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Evm.c)
设置所使用串口的基地址、复位串口、关闭 smart idle。
u32 uart_base = DEFAULT_UART_BASE;&&&&&&&&// 默认使用的串口是UART0,基地址为 0x44E0_9000
enable_uart0_pin_mux();&&&&&&&&&&&&&&&&&&&// 配置uart0相关引脚为 UART模式
同样可以设置为其他串口,比如IA Motor Control Board就是使用的UART3,只要修改上面两步就可以了
init_timer();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Evm.c)
这里初始化的是timer2,在之前 pll_init();----& per_clocks_enable(); 中使能的也是timer2,使用24MHz OSC
preloader_console_init();& (u-boot-2011.09-psp04.06.00.08\arch\arm\cpu\armv7\omap-common\Spl.c)
主要是对串口波特率的设置,以及串口终端打印信息。BeagleBone板上使用的是USB转串口芯片,串口驱动drivers\serial\serial.c&、drivers\serial\ns16550.c
I2C0初始化,读EEPROM& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Evm.c)
i2c0接了一个eeprom ( CAT24C256W 256K *8 ),i2c读取eeprom的数据到 header 结构体,header 结构体原型为
struct am335x_baseboard_id {&
&&& unsigned int&&
&&& char name[8];&
&&& char version[4];&
&&& char serial[12];&
&&& char config[32];&
&&& char mac_addr[NO_OF_MAC_ADDR][ETH_ALEN];&
BeagleBone开发板提供的eeprom信息如下:
enable_i2c0_pin_mux();&&&&&&&&&&&&&&&&&&// 配置i2c0相关引脚为 I2C模式&&&&&&&&&&&&&&&&&&&&&
i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);//i2c初始化,速度为标准速度100000,从设备
if (read_eeprom())&{
printf(&read_eeprom() failure. continuing with ddr3\n&);
}&&&&&//读eeprom到 header 结构体,会判断magic是否为上表中提供的0xEE3355AA&
DDR设置(DDR2\DDR3)& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Evm.c)
u32&is_ddr3&= 0;&
if (!strncmp(&A335X_SK&, header.name, 8)) {&
&&&&is_ddr3&= 1;
&&&& * EVM SK 1.2A and later use gpio0_7 to enable DDR3.&
&&&& * This is safe enough to do on older revs.&
&&& enable_gpio0_7_pin_mux();&
&&& gpio_request(GPIO_DDR_VTT_EN, &ddr_vtt_en&);&
&&& gpio_direction_output(GPIO_DDR_VTT_EN, 1);&&&&&&&
&&&&//通过gpio0_7输出高电平来触发VTT稳压器,从而产生VTT_DDR电压&
if(is_ddr3&== 1){&
&&& ddr_pll_config(303);&
&&& config_am335x_ddr3();&
&&& ddr_pll_config(266);&
&&& config_am335x_ddr2();&
在设置DDR之前,要先判断是DDR2(变量is_ddr3 = 0)还是DDR3(变量is_ddr3 = 1),TI推出的开发板目前只有A335X_StarterKit支持DDR3,其余的均是DDR2,包括BeagleBone
一开始默认为DDR2(设置is_ddr3 = 0),但是通过比对header.name是否为A335X_SK,来确定DDR3(设置is_ddr3 = 1)
根据不同的DDR来进行相应的DDR配置,主要有4个部分需要设置,如下:
DDR PLL&结构:
配置DDR PLL:
代码如下:
ddr_pll_config();& (u-boot-2011.09-psp04.06.00.08\board\ti\am335x\Pll.c);
//配置ddr的时钟频率,DDR2为266MHz,DDR3为303MHz
void ddr_pll_config(unsigned int ddrpll_M)&
&&& u32 clkmode, clksel, div_m2;
&&& clkmode = readl(CM_CLKMODE_DPLL_DDR);&
&&& clksel = readl(CM_CLKSEL_DPLL_DDR);&
&&& div_m2 = readl(CM_DIV_M2_DPLL_DDR);
&&& /* Set the PLL to bypass Mode */&
&&& clkmode = (clkmode & 0xfffffff8) | 0x;&
&&& writel(clkmode, CM_CLKMODE_DPLL_DDR);
&&& while ((readl(CM_IDLEST_DPLL_DDR) & 0x) != 0x);
&&& clksel = clksel & (~0x7ffff);&
&&& clksel = clksel | ((ddrpll_M && 0x8) | DDRPLL_N);&
&&& writel(clksel, CM_CLKSEL_DPLL_DDR);
&&& div_m2 = div_m2 & 0xFFFFFFE0;&
&&& div_m2 = div_m2 | DDRPLL_M2;&
&&& writel(div_m2, CM_DIV_M2_DPLL_DDR);
&&& clkmode = (clkmode & 0xfffffff8) | 0x7;&
&&& writel(clkmode, CM_CLKMODE_DPLL_DDR);
&&& while ((readl(CM_IDLEST_DPLL_DDR) & 0x) != 0x1);&
config_am335x_ddr2();
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:25949次
排名:千里之外
转载:44篇
(2)(4)(2)(2)(4)(1)(8)(1)(6)(8)(4)(3)

我要回帖

更多关于 am335x ddr 的文章

 

随机推荐