我是这样配置SPI的:
void SPIInit()
{
uint8 i;
//LPC_SYSCON->PRESETCTRL &= (0x01<<0);
//for(i=0; i<100; i++);
LPC_SYSCON->PRESETCTRL |= (0X01<<0); //禁止SSP复位
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<11); //使能SSP时钟
LPC_SYSCON->SSP0CLKDIV = 0X02; //设置SSP分频值
LPC_IOCON->SCK_LOC = 0x02; //选择P0.6为SSP时钟功能
//LPC_SSP0->CR0 = 0x0707;
LPC_SSP0->CR0 = (0x07<<0)| //每帧数据长8位
(0x00<<4)| //设置帧格式为SPI
(0x01<<6)| //空闲时SCK为高电平有效
(0x01<<7)| //数据在SCK第2个时钟沿采样
(0X00<<8); //设置SCR串行时钟速率SPI时钟分频
LPC_SSP0->CR1 = (0x00<<3)| //从机输出使能
(0x00<<2)| //SSP为主机模式
(0x01<<1)| //使能SSP
(0x00<<0); //不使用回写模式
LPC_SSP0->CPSR = 0x2; //PCLK分频值
LPC_SSP0->ICR = 0X03; //中断清除寄存器
}
主函数是这样测试的:
main
{
uint8 a[20],b[20];
SSTF016B_Erase(0, 511);
for(i=0;i<10;i++)
{
a=i;
}
SSTF016B_WR(0x00,a,10);
while(1)
{
//SendByte(sign);
//SendByte(sign);
SSTF016B_RD(0x00, 10,b);
//SendByte(sign);
for(i=0;i<10;i++)
{
Delay(1000000);
SendByte(b);
}
Delay(1000000);
}
}
读出来的数据全是FF,这些程序曾经正常工作过也正常使用过一段时间,但现在不知怎么回事就不行了,以为是新编写的程序与其有冲突
但把其余所有程序注释掉之后还是不行,以为是flash芯片坏了但换过后还是不行,哪位高人曾遇到过这种或类似的问题,给小弟指点一二
不胜感激
先谢过了
注:
flash SST25的擦出,读,写函数是正确的
读出FF说明擦除和读取成功了,但是没有写入成功。可以尝试检查写函数,即SSTF016B_WR。
每次写入或者擦除等有更改的操作之前都要WREN的,即置写入使能。还有可以看下WP引脚是不是写保护状态。貌似你也是用Keil嘛~终于找到不是周公,不是那个EclipseIDE的啦~
还有种可能是没有检验WIP位,即擦除后可能芯片在忙,无法响应写入的请求。
M0有附带的SSP程序,可以参考的。
[ 本帖最后由 elulis 于 2010-11-22 01:30 编辑 ]
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
经过一番痛苦的挣扎,终于发现问题所在,在设置SPI速率的问题上出现了错误,小弟参考了绝大部分周工提供的SSP设置,下面那段程序,把其中的SSP分频值改为1就行了,具体什么缘由,由于时间紧迫还没来得及研究,等出国产品有时间了再搞吧...