FM25L256支持无限制读写,适用与需要对存储器经常性读写的系统。
/* 功能:把地址中Addr的数据读出放到指针指向的地址 调用外部函数:SPI0_RW_Byte(uint8); */ uint8 FMByteRead(uint16 Addr,uint8 *byte) { uint8 r_content;
FM25L256_CS_EN; SPI0_RW_Byte(READ); // read memory command SPI0_RW_Byte(Addr>>8); // high 8 bits address SPI0_RW_Byte((uint8)(0x00ff&Addr)); // low 8 bits address SPI_SPDR=0xFF; //写该寄存器将启动数据传输 while(0==(SPI_SPSR&0x80)); r_content = SPI_SPDR; FM25L256_CS_DIS; delay_ms(1); //读多一遍判断是否与上一次相同 FM25L256_CS_EN; SPI0_RW_Byte(READ); // read memory command SPI0_RW_Byte(Addr>>8); // high 8 bits address SPI0_RW_Byte((uint8)(0x00ff&Addr)); // low 8 bits address SPI_SPDR=0xFF; //写该寄存器将启动数据传输 while(0==(SPI_SPSR&0x80)); *byte = SPI_SPDR; FM25L256_CS_DIS;
//判断读出来的结果 if(r_content==*byte) return 1; else return 0; }
/* 功能:往地址Addr中写数据Data; 调用外部函数:SPI0_RW_Byte(uint8); */
uint8 FMByteWrite(uint16 Addr,uint8 Data) { uint8 r_content; //把数据写进去 FM25L256_CS_EN; SPI0_RW_Byte(WREN); // write enable command FM25L256_CS_DIS; delay_ms(1); FM25L256_CS_EN; SPI0_RW_Byte(WRITE); // write memory command SPI0_RW_Byte(Addr>>8); // high 8 bits address SPI0_RW_Byte((uint8)(0x00ff&Addr)); // low 8 bits address
SPI0_RW_Byte(Data);
FM25L256_CS_DIS;
//把写进去的数据在读出来看看是否相同 delay_ms(1); FM25L256_CS_EN; SPI0_RW_Byte(READ); // read memory command SPI0_RW_Byte(Addr>>8); // high 8 bits address SPI0_RW_Byte((uint8)(0x00ff&Addr)); // low 8 bits address SPI_SPDR=0xFF; //写该寄存器将启动数据传输 while(0==(SPI_SPSR&0x80)); r_content = SPI_SPDR; FM25L256_CS_DIS;
if(r_content==Data) return 1; else return 0; }
|