FLASH、AM29LV800B读写出错
DSP用的是TI的5509A,FLASH芯片为AM29LV800B,连上CCS3.3,单步运行到擦除函数,发现只有奇地址变了,而且不是FFFF,是0010。写数据的时候也是只能写入奇地址,欧地址根本写不进。以下是我部分代码和CCS图/*FLASH写命令操作*/
void FLASH_write_byte(unsigned int offset, unsigned int data)
{
*((volatile unsigned int*)(CE1+offset))=data;
}
/*FLASH擦除函数*/
void erase_FLASH()
{
FLASH_write_byte(0x0555,0xaa);
FLASH_write_byte(0x2aa,0x55);
FLASH_write_byte(0x0555,0x80);
FLASH_write_byte(0x0555,0xaa);
FLASH_write_byte(0x02aa,0x55);
FLASH_write_byte(0x0555,0x10);
delay(100);
}
/*FLASH写数据初始化*/
void FLASH_write_initial()
{
FLASH_write_byte(0x0555,0xaa);
FLASH_write_byte(0x02aa,0x55);
FLASH_write_byte(0x0555,0xa0);
}
/*FLASH写数据*/
void FLASH_write(unsigned int write_addr,unsigned int data)
{
// FLASH_write_byte(write_addr,0xa0);
FLASH_write_byte(write_addr,data);
delay(10000);
}
main()
{
int i;
/*初始化CSL库*/
CSL_init();
/*EMIF为全EMIF接口*/
CHIP_RSET(XBSR,0x0a01);
/*设置系统的运行速度为144MHz*/
PLL_config(&myConfig);
flash=0;
erase_FLASH();
FLASH_write_initial();
fwaddr=CE1;
fwaddr+=1000;
for(i=1000;i<2000;i++)
{
FLASH_write(fwaddr+i,i);
}
本帖最后由 wushaojay 于 2015-2-14 16:11 编辑
发现从CE0到CE3空间偶地址都是零,DSP_EMIF_ARDY引脚接到CPLD,CPLD直接给DSP_EMID_ARDY赋1,CCS3.3才能使用Memory观察到CE空间数据也就是从20000开始的数据。上电复位从20000开始偶地址都是0,奇地址都是FFFF,FLASH擦除操作之后,偶地址依然为0,奇地址为0X0010,用十进制显示的时候是16.CPLD设计中是扩展了FLASH高6位地址FA13-FA18。 DSP A1-A13接FLASH FA0-FA12。 DSP_EMIF_AWE接FWE,DSP_EMIF_ARE接FOE,DSP_EMIF_CE1接FCE FBYTE直接赋1,位字模式。 硬件的问题吧?程序是自己写的还是例程?换一个FLASH试下。
页:
[1]