首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机用模拟SPI写数据到外部FLASH时的有关问题

2012-03-20 
单片机用模拟SPI写数据到外部FLASH时的问题通过串口接收数据内容,然后写入外部FLASH芯片里面,每次发送8F+5

单片机用模拟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字节试试

热点排行