单片机用模拟SPI写数据到外部FLASH时的问题
通过串口接收数据内容,然后写入外部FLASH芯片里面,每次发送8F+512字节,单片机接收到后发送F8给PC,接着PC再发送8F+512字节,目前问题是我的FLASH每次只能编写256字节,所以接收一次要按两次存储,我现在每次可以接收到8F+512字节,但是每次只能写入前面的256个字节,以下是写入的程序:
//*********页编程*****************
void page_program(uint32 address,uchar count)
{
uint i;
H.long_4byte=address; //联合变量
write_enable(); //写使能
CS=0;
write(0x02); //页编程命令
write(H.char_1byte[1]);
write(H.char_1byte[2]);
write(H.char_1byte[3]);
for(i=0;i<256;i++)
{
if (count == 1)
{
write(serialdata[1+i]);//向flash写前256字节数据
}
else
if (count == 0)
{
write(serialdata[257+i]);//向flash写后256字节数据
}
}
address = address & 0xFFFF00;
CS=1;
}
下面的程序是串口接收判断的程序
if (serialdata[0] == 0x8F)//serialdata[]数组存储接收的数据
{addr=0x000000; //flash首地址地址
do
{
addr = addr + num*0x100; //num为无符号整型变量
page_program(addr,temp3);//temp3每次写完之后都赋值为1
num++; //计数
addr =0x000000; //每次写完flash后地址赋值为首地址
}while(temp3--);
byte_num=0; //数组下标清零
senddata(0xF8); //发送F8接收下一段
}
[解决办法]
后256字节不能写入是不是由于FALSH的时序有问题呢 直接写后256字节试试