我是这样配置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的擦出,读,写函数是正确的
此帖出自小平头技术问答
每次写入或者擦除等有更改的操作之前都要WREN的,即置写入使能。还有可以看下WP引脚是不是写保护状态。貌似你也是用Keil嘛~终于找到不是周公,不是那个EclipseIDE的啦~
还有种可能是没有检验WIP位,即擦除后可能芯片在忙,无法响应写入的请求。
M0有附带的SSP程序,可以参考的。
[ 本帖最后由 elulis 于 2010-11-22 01:30 编辑 ]
一周热门 更多>