我在使用AT45DB321D时,我写的程序只要是有涉及到有擦除功能的命令,在命令+地址+无关位4字节写入后要再加写1字节无关字节才能正常工作否则就被忽略不执行为啥。所有的读功能都没问题不用加1个字节无关字节,我查了好几天哪里都对看不出哪有问题,希望高手指点一二。使用stm32f103C8T6的SPI2串口 。
传个函数大家看看
//*****************************************************************************
//!\缓冲区编程到主存储器页。操作码(缓冲区1 0x88,缓冲区2 0x89)
//! \参数BufferNum指定缓冲器1或2作为目标。
//! \参数PageAddr页起始地址。
//!将指定的缓冲区的数据转到指定的主存储器页里带内无擦除
//*****************************************************************************
void AT45DB321DBuf_PageW(unsigned char BufferNum, unsigned short PageAddr)
{
while(!(Status_Reg_Read ()&0x80));//判断是否忙
AT45DB321D_CS_CLR;
if (BufferNum == AT45DB321D_BUF1)
{
SPI_WriteByte (0x88);//将缓冲区1的数据写入到页带擦除指令
}
else
{
SPI_WriteByte (0x89);//将缓冲区2的数据写入到页带擦除指令
}
SPI_WriteByte ((unsigned char)(PageAddr>>6));
SPI_WriteByte ((unsigned char)(PageAddr<<2));
SPI_WriteByte (0x00);
SPI_WriteByte (0x00);//不加这一句不工作
AT45DB321D_CS_SET;
} |