MTK MCP FLASH 兼容设计思路
系列:
最近将MTK平台MT6225的兼容设计完成了,实现了 AMD &INTEL系列的局部兼容,所谓局部兼容,即兼容的那么几个MCP可同时兼容。大致实现思路如下,仅供参考
Flash启动流程:
使用NOR FLASH 架构时,当按下POWER key,硬件就从0×00000000地址开始运行代码,此地址在没有REMAPPING时,正好为CS0片选地址,即 nor Flash0地址。做一些基本配置,如 colck ,EMI golden timming等。
要实现 FLASH兼容,必须在配置时序之前,获取FLASH的具体型号,并查表得出具体时序及Regions配置信息。
获取ID:
那么,我没应该在调用BL INT_Config之前,将我们获取FLASH ID的代码复制到INTRAM运行,并将ID保存在CPU的寄存器中,比如DMA的src addr 和dstaddr寄存器,都是32位寄存器。获取ID后,应该返回继续初始化。
获取ID后,在函数 custom_setEMI 中设置 FLASH 的时序,那么,应该在这里建立一个 timing table,索引为FLASH ID,搜索到ID后,即可配置timing了。
配置好timing 后,应该需要再配置Regions信息,在Initialize_FDD_tables 中,还需要识别不同的FLASH driver,是AMD还是INTEL,这些都需要通过指针来选择,动态选择。
可能,还会遇到一些比较复杂的MCP,比如SIBLEY系列,操作不同的部分,都需要使用指针来区别。MTK实现中,宏很多,我们需要仔细的替换成指针实现。
实现后,运行了一段时间,没有问题的。欢迎广大MTK同仁交流。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kuanghanli/archive/2009/08/13/4443742.aspx
================================================================================
如何获取Nor FlashID
Nor Flash 目前主要有两个系列,一个是 AMD 另外一个就是 INTEL,其他系列的,我没有接触到,再此不讨论。
这两个系列的各自的命令集,差不多,至少,获取ID的命令集应该是一样的。针对一些厂商的Flash,可能驱动需要特别优化,延时需要特别修改等,由于获取ID , 对时序要求并不高,一般都能读取到ID的。
下面我把AMD 及 INTEL 获取 Flash ID 的命令放出,希望对大家有帮助,其实,这里写的,在 MCP的Datasheet 上都能查得。
AMD 系列
以下按照 word 来操作,byte操作方式,将偏移乘2即可
flash_base[0x0] = 0xF0; //reset Flash
flash_base[0x555] = 0xaa;
flash_base[0x2aa] = 0x55;
flash_base[0x555] = 0x90;
以上发送完成后,可以读取如下位置,获得相应的ID
AMD_MANUFACTURE_CODE = flash_base[0x0];
AMD_DEV_CODE = flash_base[0x1];
AMD_EXTDEV1_CODE = flash_base[0xe];
AMD_EXTDEV2_CODE = flash_base[0xf];
INTEL 系列
flash_base[0x0] = 0xFF;
flash_base[0x0] = 0x50;
flash_base[0x0] = 0x90;
以上发送完成后,可以读取如下位置,获得相应的ID
INTEL_MANUFACTURE_CODE = flash_base[0x0];
INTEL_DEV_CODE = flash_base[0x1];
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kuanghanli/archive/2009/08/13/4443702.aspx
================================================================================
不同厂家的flash,大小一样,封装一样,可以兼容。目前支持nor-flash
我说说思路;
1、首先要把mtk里面mem