#include "SPI_FLASH.h"
#include "stdio.h"
#define BufferSize 1024
#define FLASH_WriteAddress 0x00000
#define FLASH_ReadAddress FLASH_WriteAddress
#define FLASH_SectorToErase FLASH_WriteAddress
void arr_split(Uint32 *p,Uint32 *q);
//发送缓冲区初始化
Uint32 Tx_Buffer[BufferSize] = {0};
Uint32 Rx_Buffer[BufferSize] = {0};
//Uint32 Tx_Buffer1[BufferSize*2] = {0};
//Uint32 Rx_Buffer1[BufferSize*2] = {0};
Uint32 DeviceID=0;
Uint32 FlashID=0;
void main()
{
InitSysCtrl();
InitPieCtrl();
IER = 0x00;
IFR = 0x00;
InitPieVectTable();
Uint16 i=0;
SPI_Init();
/* 获取 Flash Device ID */
DeviceID = FLASH_ReadDeviceID();
DELAY_US(20);
FlashID = FLASH_ReadJEDE_ID();
for(i=0;i<BufferSize;i++)
{
Tx_Buffer[i]=1;
Rx_Buffer[i]=0;
}
// arr_split(Tx_Buffer,Tx_Buffer1);
if(FlashID == SPI_FLASH_ID)
{
//扇区擦除
FLASH_32KErase(FLASH_SectorToErase);
SPI_FLASH_BufferWrite(Tx_Buffer,FLASH_WriteAddress,BufferSize);
SPI_FLASH_BufferRead(Rx_Buffer,FLASH_ReadAddress,BufferSize);
// SPI_FLASH_BufferWrite(Tx_Buffer1,FLASH_WriteAddress,BufferSize*2);
//
// SPI_FLASH_BufferRead(Rx_Buffer1,FLASH_ReadAddress,BufferSize*2);
}
while(1);
}
void arr_split(Uint32 *p,Uint32 *q)
{
Uint16 i=0,j=0;
for(i=0;i<BufferSize;i++)
{
q[j++] = (p[i]>>8);
q[j++] = (p[i]&0xFF);
}
}
#ifndef SPI_FLASH_H_
#define SPI_FLASH_H_
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include <stdio.h>
#define SPI_FLASH_ID 0xEF4015 //W25Q16
/*********************************************
- W25X16的操作指令表,MCU通过向W25X16
发送以下指令就可以对W25X16进行以下的操作
*********************************************/
#define W25X_WriteEnable 0x06 //Write Enable
#define W25X_WriteDisable 0x04 //Write Disable
#define W25X_ReadStatusReg1 0x05 //读状态寄存器1:S7~S0
#define W25X_ReadStatusReg2 0x35 //读状态寄存器2:S15~S8
#define W25X_WriteStatusReg 0x01 //写读状态寄存器:BYTE1:S7~S0 BYTE2:S15~S8
#define W25X_PageProgram