zhange
发表于 2024-7-29 11:44:02
Read Data 03h
先去测试这两个先看看
zhange
发表于 2024-7-29 11:48:22
本帖最后由 zhange 于 2024-7-29 12:31 编辑
先来读id吧慢慢来
0xab 是读取id指令发送后 芯片会返回3个字节的id数据
测试下
===
上边指令 不对
读取id 应该为0x9f
zhange
发表于 2024-7-29 11:59:13
失败了 全是00000
zhange
发表于 2024-7-29 12:47:23
先前指令不对 现在读出来了
zhange
发表于 2024-7-29 12:49:29
读id指令 貌似好几个 用这个可以读出来读取id 应该为0x9f
其他的我再试下{:4_188:}{:4_188:}{:4_188:}先吃饭
angmall
发表于 2024-7-29 13:28:01
可以试试这个。
#define u8unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define xu8xdata unsigned char
#define xu16 xdata unsigned int
#define xu32 xdata unsigned long
#include "STC8H.h"
sbit spi_cs=P2^5;
sbit spi_sck =P3^7;
sbit spi_mosi=P3^5;
sbit spi_miso=P3^6;
sbit FMQ_OUT=P3^3; //定义蜂鸣器输出使能io
u8 spi_rwbyte(u8 dat);
void delay_ms(u8 n);
void w25q32_readpage(u32 padr,u8 *p);
void w25q32_writepage(u32 padr,u8 *p);
void w25q32_SectorErase(u32 sadr);
/******************************************************************
- 函数名称:main()
- 功能说明:主程序
- 参数说明:无
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void main()
{
xu8 buf;//数据比较数组
u16 i;
FMQ_OUT=1; //允许蜂鸣器输出
w25q32_SectorErase(0); //擦除存储器0扇区
for(i=0;i<256;i++)buf=i;//初始化数组
w25q32_writepage(0,buf); //将初始化的数组写入存储器第0页
for(i=0;i<256;i++)buf=0;
w25q32_readpage(0,buf);//重新读出写入存储器的数据
for(i=0;i<256;i++) //比较数据只要有一个数据不对则报警
{
if(buf!=i)FMQ_OUT =0;
}
while(1)
{
}
}
/******************************************************************
- 函数名称:delay_ms(u8 n)
- 功能说明:ms延时函数
- 参数说明:延时值,单位ms
- 返回说明:无
- 备注说明:使用51单片机,外部晶体频率:22.1184MHZ-1T模式
******************************************************************/
void delay_ms(u8 n)
{
u8 a,b,c;
while(n--)
{
for(c=5;c>0;c--)
for(b=68;b>0;b--)
for(a=31;a>0;a--);
}
}
/******************************************************************
- 函数名称:u8 spi_rwbyte(u8 dat)
- 功能说明:spi软件模拟读写函数
- 参数说明:要发送的数据
- 返回说明:读取的数据
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
u8 spi_rwbyte(u8 dat)
{
u8 i,tmp=0;
for(i=0x80;i!=0;i>>=1)
{
spi_sck =0;
spi_mosi =(dat&i)?1:0;
spi_sck =1;
if(spi_miso)tmp|=i;
}
return tmp;
}
/******************************************************************
- 函数名称:w25q32_wen()
- 功能说明:存储器写使能
- 参数说明:无
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_wen()
{
spi_cs =0;
spi_rwbyte(0x06);
spi_cs =1;
}
/******************************************************************
- 函数名称:w25q32_busy()
- 功能说明:存储器写判忙
- 参数说明:无
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_busy()
{
u8 sr;
do
{
spi_cs =0;
spi_rwbyte(0x05);//rsr
sr =spi_rwbyte(0xff);
spi_cs =1;
}while(sr&0x01);
}
/******************************************************************
- 函数名称:w25q32_SectorErase(u32 sadr)
- 功能说明:存储器删除擦除
- 参数说明:当前要擦除的扇区
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_SectorErase(u32 sadr)//0,1,n=(0~4095)(4096+2096)
{
w25q32_wen();//0 = (0x00)0000 0000-> 0001 0000
sadr *=4096;
spi_cs =0;
spi_rwbyte(0x20);
spi_rwbyte(sadr>>16); // 0x00123456
spi_rwbyte(sadr>>8);
spi_rwbyte(sadr);
spi_cs =1;
w25q32_busy();
}
/******************************************************************
- 函数名称:w25q32_ChipErase()
- 功能说明:存储器整片擦除
- 参数说明:无
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_ChipErase()
{
w25q32_wen();
spi_cs =0;
spi_rwbyte(0x60);
spi_cs =1;
w25q32_busy();
}
/******************************************************************
- 函数名称:w25q32_setaddress(u32 adr)
- 功能说明:设置存储器内存地址
- 参数说明:当前要设置的字节地址
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_setaddress(u32 adr)
{
spi_cs =0;
spi_rwbyte(0x03);
spi_rwbyte(adr>>16);
spi_rwbyte(adr>>8);
spi_rwbyte(adr);
}
/******************************************************************
- 函数名称:w25q32_readpage(u32 padr,u8 *p)
- 功能说明:存储器读一页数据
- 参数说明:padr页地址,p数据缓冲区指针
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_readpage(u32 padr,u8 *p)//buf;
{
u16 i;
w25q32_setaddress(padr*256);
for(i=0;i<256;i++)p=spi_rwbyte(0xff);
spi_cs =1;
}
/******************************************************************
- 函数名称:w25q32_writepage(u32 padr,u8 *p)
- 功能说明:存储器写一页数据
- 参数说明:padr页地址,p数据缓冲区指针
- 返回说明:无
- 备注说明:使用51单片机,晶体频率:22.1184MHZ-1T模式
******************************************************************/
void w25q32_writepage(u32 padr,u8 *p)//0,1,2,n
{
u16 i;
w25q32_wen();
padr *=256;
spi_cs =0;
spi_rwbyte(0x02);
spi_rwbyte(padr>>16);
spi_rwbyte(padr>>8);
spi_rwbyte(padr);
for(i=0;i<256;i++)spi_rwbyte(p);//buf;
spi_cs =1;
w25q32_busy();
}
zhange
发表于 2024-7-29 14:27:21
angmall 发表于 2024-7-29 13:28
可以试试这个。
{:2_25:}多谢老哥 我得自己研究 老是看例程 学完就忘
zhange
发表于 2024-7-29 14:34:15
Release Power-down / ID ABh Dummy Dummy Dummy (ID7-ID0)(2)
这个ab指令 读出来是 0x15 不知道干嘛的 翻译出来是释放断电???谁研究过??
zhange
发表于 2024-7-29 14:45:50
晚上在研究 读写 下午有事{:4_168:}{:4_168:}{:4_168:}
zhange
发表于 2024-7-29 14:47:46
soma 发表于 2024-7-29 11:32
32Mb的就是4M做中文字库完全足够啊
奥我一直以为是32m字节那 原来是位