嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 5 元微信扫码支付:5 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
采用STC89LE516RD软件模拟SPI时序,读写W25Q16 FLASH,有PC串口控制指令,读取数据串口输出显示。
void main(void)
{
uint i;
W25X_HOLD=1; //SPI flash复位
init_uart(); //串口通信初始化
SPI_init(); //SPI通信初始化
tx_buff[0]='O'; //赋值buff第一个字符
tx_buff[1]='K'; //赋值buff第一个字符
trace(tx_buff,2); //描述字符
for(;;)
{if(rx_ok==1) //串口接收标志位
{
rx_ok=0;
switch(Rxtemp) //串口指令解析
{
case 0x01:
Rxtemp=0;
tx_buff[0]=SPI_Read_ID1(); //读SPI器件ID
trace(tx_buff,1); //串口发送读取到的数据信息
break;
case 0x02:
i=SPI_Read_ID2(0x00);
tx_buff[1]=(uchar)i;
tx_buff[0]=(uchar)(i>>8);
trace(tx_buff,2);
break;
case 0x03:
i=SPI_Read_ID3();
tx_buff[1]=(uchar)i;
tx_buff[0]=(uchar)(i>>8);
trace(tx_buff,3);
break;
case 0x04:
tx_buff[0]=SPI_Read_Byte(0x00000000); //读SPI 一字节数据
trace(tx_buff,1);
break;
case 0x05:
tx_buff[0]=0x55;
SPI_Write_Byte(0x00000000,0xa5); //写SPI 一字节数据
trace(tx_buff,1);
break;
case 0x06:
tx_buff[0]=SPI_Read_StatusReg(); //读SPI 状态寄存器
trace(tx_buff,1);
break;
case 0x07:
SPI_Write_Enable(); //开SPI写使能
break;
case 0x08:
upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04; //多字节(max=128)数据写入
SPI_Write_nBytes(0x00000000,4);
break;
case 0x09:
SPI_Erase_Chip(); //全部擦除
break;
case 0x0a:
SPI_Erase_Sector(0x000ff000); //扇区擦除=64k
while(1)
{
tx_buff[0]=SPI_Read_StatusReg(); //擦除进行中状态print
if(tx_buff[0]==0)
{
trace(tx_buff,1);
break;
}
}
break;
case 0x0b:
test_page(0x2000);
break;
case 0x0c:
read_page(0x20);
break;
default:
break;
}
}
}
}