TI中文支持网
TI专业的中文技术问题搜集分享网站

6455 emifnorfash

最近接手一个很老的项目,需要新增程序远程跟新功能。

芯片是c6455,norflash是S29GL512P10TFIV10,目前对flash的读写擦除都失败的,获取ID也不成功,下面是代码:

void EMIFA_Init (void)

{

EMIFA_BPRIO = 0x000000FE;
EMIFA_CE2CFG = 0x011488ae; //fpga
EMIFA_CE3CFG = 0x00240120; //flash
EMIFA_CE4CFG = 0x8000000F;
EMIFA_CE5CFG = 0x8000000F;
EMIFA_AWCC = 0x000002FF;

}

void norflash_readID()
{
Uint16 Manufacturer_ID = 0;
Uint16 Device_ID_word1 = 0;
Uint16 Device_ID_word2 = 0;
Uint16 Device_ID_word3 = 0;

*((Uint16 *)FLASH_CTL555) = FLASH_CMD_AA;
*((Uint16 *)FLASH_CTL2AA) = FLASH_CMD_55;
*((Uint16 *)FLASH_CTL555) = FLASH_CMD_90;

Manufacturer_ID = *((Uint16 *)FLASH_BASE + 0x000);
Device_ID_word1 = *((Uint16 *)FLASH_BASE + 0x001);
Device_ID_word2 = *((Uint16 *)FLASH_BASE + 0x00E);
Device_ID_word3 = *((Uint16 *)FLASH_BASE + 0x00F);
printf("norflash Manufacturer_ID : 0x%x\n", Manufacturer_ID);
printf("norflash Device_ID_word1 : 0x%x\n", Device_ID_word1);
printf("norflash Device_ID_word2 : 0x%x\n", Device_ID_word2);
printf("norflash Device_ID_word3 : 0x%x\n", Device_ID_word3);

*((Uint16 *)FLASH_BASE_123) = FLASH_RESET;
}

我怀疑是emif初始化的问题,请问flash的初始化与什么有关,还有请问有没有emif norflash的例程。

谢谢~

Shine:

EMIF寄存器需要根据NOR FLASH读写命令时序参数做相应配置,您可以用示波器量一下烧写时序是否满足flash的要求。

user6027759:

回复 Shine:

如何去配置nor flash的时序呢,我查了资料似乎只需要配置CEnCFG这个寄存器就可以了

Shine:

回复 user6027759:

根据nor flash数据手册里的时序要求去配置EMIF CEnCFG这个寄存器的setup, strobe, hold,ASIZE等参数。
4.2 Programmable ASRAM Parameters
www.ti.com/…/spru971e.pdf

Shine:

回复 Shine:

另外,nor flash是要经过clear->erase->program一系列命令完成烧写的,具体要看数据手册。

您也可以google/baidu一些flash烧写例程作为参考。
wenku.baidu.com/…/58a13e87ec3a87c24028c4aa.html

user6027759:

回复 Shine:

谢谢您的回复,我已经能够成功烧写了。
但是出现了一个新问题,当我把烧写flash的代码集成到网口程序中去,发现无法对flash进行读写,获取芯片ID也失败;
即使屏蔽掉其他功能和初始化代码,只留下关于flash的代码依然如此。
请问这种情况可能是什么原因,如何去排查
谢谢.

user6027759:

回复 Shine:

我怀疑bios的配置问题,但是对bios不熟悉,无从下手

user6027759:

回复 Shine:

请问shine,对flash有影响的寄存器除了CEnCFG,还有哪些?

Shine:

回复 user6027759:

如果您已经可以烧写flash的话,说明EMIF口的配置是正确的。您可以看看从网口传到flash烧写程序里的数据是否正确?是否和您成功烧写时的代码一样?

user6027759:

回复 Shine:

你好,现在情况是这样的:1.裸机读写flash程序是正常的;2.在bios上读写flash是失败的 我做了以下尝试 a.我先用bios的初始化代码(只含emif初始化),初始化了emif接口及norflash,然后下载并运行裸机的读flash代码(不含初始化),能够正常读写; b.我先用bios的初始化代码(只含emif初始化),初始化了emif接口及norflash,然后运行读flash代码,不能正常读写。 请问这可能是什么原因造成的,没有思路,望指点,谢谢~

最后附上我的工程

2047.6455.zip

Shine:

回复 user6027759:

a. 您是把bios里的emif初始化代码添加到裸机程序中运行的?不是两个工程吧?
b. 这个只能用仿真器跟了,先看一下EMIF初始化的寄存器值是否和裸机时的值一样,再一步步往下跟。

赞(0)
未经允许不得转载:TI中文支持网 » 6455 emifnorfash
分享到: 更多 (0)