找回密码
 注册
搜索
查看: 1812|回复: 9

[讨论] mtk平台,如何读到flash id ?熟悉flash操作的达人请进~

[复制链接]
发表于 2007-11-1 17:06:05 | 显示全部楼层 |阅读模式
flash是 x16 device,intel 的nor mcp,尝试过使用scs指令集或cfi进行操作都不成功,如果把读id的动作放在初始化阶段直接导致不能开机,放在mmi代码里执行到系统就复位。
举例如下:
typedef kal_uint16 FLASH_CELL;
INTEL_CheckDevIDvolatile uint16 *die1_addr)
{
     kal_uint32 savedMask;
    kal_uint16 code1,code2,code3;

volatile FLASH_CELL * fp = (FLASH_CELL *)die1_addr;
   
savedMask = SaveAndSetIRQMask();
  
     fp[0xaa] = 0x0098;
     code1 = fp[0x20];
     code2 = fp[0x22];
     code3 = fp[0x24];
     fp[0]   =0xFF;
RestoreIRQMask(savedMask);

}

传入0调用这个函数,目的是使flash进入cfi模式,并试图读取Q, R, Y三个字符以判断flash是否支持cfi,可每次执行到这都是导致系统不能启动,若使用scs 命令写入0x90,再在0地址开始读id号也是遇到同样的情况,请问有什么办法在mtk系统运行时读到flash id吗?
 楼主| 发表于 2007-11-1 18:27:12 | 显示全部楼层
现在发现是无法进入相关模式,对flash的操作fp[0xaa] = 0x0098其实是往aah写98h,没有能进入cfi模式,可是试了在这条语句前reset flash还是不行。
点评回复

使用道具 举报

 楼主| 发表于 2007-11-2 20:23:45 | 显示全部楼层
已经解决
点评回复

使用道具 举报

发表于 2007-11-5 10:07:05 | 显示全部楼层
LZ如何解决的呀?说来听听
点评回复

使用道具 举报

发表于 2007-11-9 19:40:47 | 显示全部楼层
楼主是怎么解决的?我现在也碰到同样的问题,能否赐教一下,不甚感激
点评回复

使用道具 举报

 楼主| 发表于 2007-11-12 12:09:20 | 显示全部楼层
使用fat所在的partition来操作
点评回复

使用道具 举报

发表于 2007-11-13 23:44:35 | 显示全部楼层
楼主能不能说的稍微具体一点共享一下
目前也有同样的问题
总是开不了机
点评回复

使用道具 举报

发表于 2007-11-16 18:01:37 | 显示全部楼层
kal_uint16 code1,code2,code3;
typedef kal_uint16 FLASH_CELL;
void INTEL_CheckDevID(volatile kal_uint16 *die1_addr)
{
#if 0

        kal_uint32 savedMask;
        kal_uint16 code1,code2,code3;

        volatile FLASH_CELL * fp = (FLASH_CELL *)die1_addr;
        savedMask = SaveAndSetIRQMask();
        fp[0xaa] = 0x0098;
        code1 = fp[0x20];
        code2 = fp[0x22];
        code3 = fp[0x24];
        fp[0]   =0xFF;
        RestoreIRQMask(savedMask);
//        kal_prompt_trace(MOD_AUX,"code1 =%x code2=%x code3=%x",code1,code2,code3);

#else
        kal_uint32 savedMask;
       

        volatile FLASH_CELL * fp = (FLASH_CELL *)die1_addr;
        savedMask = SaveAndSetIRQMask();
/*
        fp[0] = 0x50;
        fp[0] = 0x90;
        code1 = fp[0x0];
        code2 = fp[0x1];
*/       
        *(kal_uint16 *)(0x00E00000) =0x50;
        *(kal_uint16 *)(0x00E00000) =0x90;
        code1 = *(kal_uint16 *)(0x00E00000);
        code2 = *(kal_uint16 *)(0x00E00001);

        RestoreIRQMask(savedMask);
//        m_trace2("factory code=%x,devicecode=%x",code1,code2);
       
//        kal_prompt_trace(MOD_AUX,"code1 =%x code2=%x ",code1,code2);
#endif
}
读出来全是0,好像还是不对,能不能说的更清楚一些,多谢了!
有福同享呀~[em06]
点评回复

使用道具 举报

 楼主| 发表于 2007-11-21 23:07:06 | 显示全部楼层
我的mtk下支持多flash启动代码基本上做好了,一个机子是用的intel 256+64的sibley flash,另外一个也是intel的128+32,不是sibley的。同一个bin档先后烧到两个机子都能开机,只是开机后画面一团糟。。。
要这个代码的可以发邮件给我 fla168@163.com
点评回复

使用道具 举报

发表于 2007-11-22 09:26:51 | 显示全部楼层
学习,进步!
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-15 19:36 , Processed in 0.047822 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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