flamegirl2046 发表于 2010-11-1 22:34:49

STC单片机SPI EEPROM读写问题

我使用STC12C5A60S2单片机去读写SPI的EERPOM (at25F1024。我的寄存器初始化设置如下:SPCTL=0xDC, SPDAT = 0, SPSTAT=0xC0;我的程序就是将一个数组 txt = {0,1,2,3,4,5,6,7,8,9} 写入到AT25F1024这个SPI EEPROM中。 我设STC单片机为主机,首先是擦除EEPROM的片子,然后将数组写入EEPROM中,最后读出数据。 但是我觉得我连擦除都没有成功,如果片子被擦除了,里面的数据就是0xff了。擦除片子后读出的数据为“0”。 我求大家给我提供一个样例关于读写SPI EEPROM的程序。 我的程序代码如下:(如果程序有错, 请高手为我指出)
void spi(unsigned char spi_data)
{
SPDAT = spi_data
      while(!(SPSTAT&0x80));
      SPSTAT = 0xC0;
}

//写数据
void putData(unsigned long addr, unsigned int num, unsigned char* source)
{
   //读写状态寄存器
   SS = 0; //片选
   GetStatusRegister();
   WriteCmd(0x06)//写使能
   SPDAT = 0x03; //PROGRAM
   SPDAT = (addr>>16);
   SPDAT = (addr>>8);
   SPDAT = (addr&0xFF);
   for(i=0;i<num;i++)
   {
      spi(*source++);
   }
   SS =1;
}

//读数据
void getData(unsigned long addr, unsigned uint num, unsigned char* des)
{
   SS = 0;
   GetStatusRegister();
   spi(0x03);            //transmitt the op_code READ   
   spi((uchar)(addr>>16));      // Address phase is 3 byte long for SPI flashes
   spi((uchar)(addr>>8));   //send MSByte address first
   spi((uchar)(addr));
   for(i=0;i<num;i++)
   {
      *(des++) = spi(0x00);
   }
   SS=1;
}
请帮我看看是否是读写方式错误,造成读写数据部正确。

flamegirl2046 发表于 2010-11-1 22:48:07

请大家帮帮忙!回复我一下!! 是连续读写错呢, 还是程序有问题呢????
页: [1]
查看完整版本: STC单片机SPI EEPROM读写问题