某宝买了几个型号: W25Q128JVSQ,参考手册和正点原子的例程操作。可以读出FlashID与手册相同。但是擦写都不成功,使能写后读状态寄存器也由00变为02,写操作后读状态变为00. 没有busy状态。读出内容还是FF。求指点。
这个是调试串口输出信息:
Flash ID:0XEF17
JEDEC ID:0XEF4018
Status all:0X600200
chip_erase cost ms:1
Status after erase:0X600200
SPI_FLASH data addr=0~16:
//测试代码如下
SPI_Flash_Init();
print_hex("Flash ID:",SPI_Flash_ReadID());
print_hex("JEDEC ID:",flash_read_jedec_id());
print_hex("Status all:",flash_read_state_all());
ms_cnt = 0;
SPI_Flash_Erase_Chip();
print_num("chip_erase cost ms:",ms_cnt);
print_hex("Status after erase:",flash_read_state_all());
for(temp=0;temp<16;temp++)
{
send.buf[temp]= temp;
}
flash_page_write(send.buf,0x0,0x0,16);
send_string("SPI_FLASH data addr=0~16:");
SPI_Flash_Read(send.buf,0x0,16);
send.end = 15;
send.cnt=0;
send.state = SEND_RUN;
SBUF = send.buf[send.cnt++];
//flash驱动如下
void flash_page_write(uint8 *pBuffer,uint16 page,uint8 addr,uint8 NumByteToWrite)
{
u8 i;
SPI_FLASH_Write_Enable(); //SET WEL
SPI_FLASH_CS=0; //使能器件
SPI1_ReadWriteByte(W25X_PageProgram); //发送写页命令
SPI1_ReadWriteByte(page>>8); //发送24bit地址
SPI1_ReadWriteByte(page);
SPI1_ReadWriteByte(addr);
for(i=0;i<NumByteToWrite;i++)SPI1_ReadWriteByte(pBuffer);//循环写数
SPI_FLASH_CS=1; //取消片选
SPI1_ReadWriteByte(0xff); //延时8个时钟
SPI_Flash_Wait_Busy(); //等待写入结束
}
|