Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345803
  • 博文数量: 97
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 636
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-12 22:41
文章分类

全部博文(97)

文章存档

2017年(8)

2015年(87)

2014年(2)

我的朋友

分类: 嵌入式

2015-06-13 13:55:37

本文以AM3352为例,硬件ddr3从128MB改为512MB,芯片更换系统中的设置当然也需要更换了。
参考资料:
关于内存配置的WIKI:

关于DDR3的WIKI:


1、修改一级boot中DDR配置,AM3352与DDR相关的寄存器是 EMIF寄存器,需要配置的EMIF寄存器如下 
SDRAM_CONFIG
SDRAM_REF_CTRL
SDRAM_TIM_1
SDRAM_TIM_2
SDRAM_TIM_3
DDR_PHY_CTRL_1
这些配置均XLDR代码中 中。  修改完成后,在XLDR中可正常测试读写DDR。

2、修改addrtab_cfg.inc 和 config.bib中内存分配,这两个文件可见附件。
在addrtab_cfg.inc中,分配好所有的内存空间。 注意Wince6.0所能支持的uncache范围为512MB, 我们还需要映射一些系统上所需的I/O,处理器的寄存器,335X上其他资源耗费75M~~  所以这512MB的内存只能用437M会有所浪费(映射512的话,系统会挂)

config.bib中,主要是注意 RAM 地址的分配,关于config.bib的说明可见附件的网页文件。 有一个坑: RAM的地址必须是连续的内存地址,对于非连续内存地址,需要在OAL中使用g_pOemGlobal->pfnEnumExtensionDRAM这个函数提交内存给系统使用。

3、如果修改了Eboot的加载地址,那么这个eboot.bib也需要对应的进行修改。 XLDR中eboot跳转地址需要与 eboot.bib中的ROMSTART相同。 

4、因为这个512MB内存无法连续分配,所以得在OAL提交内存给系统,操作方法为:
声明函数: 
DWORD OEMEnumExtensionDRAM(PMEMORY_SECTION pMemSections,DWORD cMemSections);                

在OALInit中添加:
//Add extern Ram
g_pOemGlobal->pfnEnumExtensionDRAM          = OEMEnumExtensionDRAM;         // Add extern RAM
函数实现如下:

点击(此处)折叠或打开


  1. /*********************************************************************************************************
  2. ** Function name: OEMEnumExtensionDRAM
  3. **
  4. ** Descriptions: 系统内存分配,可以添加多片不连续的内存
  5. ** 1、根据DSP的应用需求,将多余的DSP保留区内存添加到系统内存
  6.                             2、添加另外增加的MB内存到系统内存
  7.                             注意:
  8.                             1、使用OEMEnumExtensionDRAM函数,在初始化时付给g_pOemGlobal->pfnEnumExtensionDRAM即可
  9.                             2、g_pOemGlobal->pfnEnumExtensionDRAM指针初始化过后,原来的OEMGetExtensionDRAM函数就无效了
  10. ** input parameters:
  11. ** output parameters:
  12. ** Returned value: 额外添加的内存片数
  13. *********************************************************************************************************/
  14. DWORD OEMEnumExtensionDRAM(PMEMORY_SECTION pMemSections,DWORD cMemSections)
  15. {

  16.     DWORD cSections = 0;

  17.     RETAILMSG(1, (_T("OEMEnumExtensionDRAM cMemSections = %d\r\n"),cMemSections));

  18.       //添加额外309MB内存
  19.     if (cSections < cMemSections) {
  20.         pMemSections[cSections].dwFlags = 0;
  21.         pMemSections[cSections].dwStart = 0x8CB00000;
  22.         pMemSections[cSections].dwLen = 0x13500000; //309MB
  23.         cSections++;
  24.     }
  25.     RETAILMSG(1, (_T("OEMEnumExtensionDRAM (cSections=%d)\r\n"), cSections));


  26.     return cSections;
  27. }

5、到这一步就大功告成. 查看系统可用内存为381MB.
阅读(2213) | 评论(0) | 转发(0) |
0

上一篇:wince格式化nand

下一篇:Silverlite 组件体验

给主人留下些什么吧!~~