|
| 如何读取flash id? |
| 新闻出处:21ic
发布时间: 2007-11-01 |
fla888 发布于 2007-11-1 23:19:00 基于手机平台mtk:cpu: 台湾联发科技mtk6230 (arm7) os: nucleus
flash是 x16 device,intel 的nor mcp (移动设备里常用的scsp封装,将sram,flash等做到一个片子里)。尝试过使用scs指令集或cfi进行操作都不成功,如果把读id的动作放在系统初始化阶段直接导致不能开机,放在mmi应用层代码里执行到代码段系统就复位。mcp里的flash 型号是28F128L18_B。
代码举例如下: 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,可每次执行到这都是导致系统不能启动,而使用intel系列的scs 命令往任意地址写入0x90,再在0地址开始读id号也是遇到同样的情况,甚至写0x70(scs指令)到任意地址,然后从任意地址读状态寄存器也不能成功,请问我的操作流程是不是还忽略了什么?若flash当前状态未知,我要使它进入cfi模式安全的流程是怎样?
|
| 【关闭】 【打印】 |
|
|
|
|