2019-07-21 01:31发布
yp8282092 发表于 2014-1-28 10:18 读出来错的啊!不过我解决了 嘻嘻!
正点原子 发表于 2014-1-19 12:49 Q128读ID是0XFFFF?
最多设置5个标签!
---------------------------怎么解决的啊 我的也是ffff 大神
请问是如何解决的.....被这个问题困扰....
不是用原子哥的程序,但是程序在开发板上的EN25Q64用得了,然而换到自己板子上,只是换了FLASH_CS,换成了W25Q64(地址改成了EF14),就用不了了......
/* ¶¨òåFLASH ê1óÃμÄIO¿ú */
#define FLASH_CS_SET GPIO_SetBits(GPIOB, GPIO_Pin_12)
#define FLASH_CS_CLR GPIO_ResetBits(GPIOB, GPIO_Pin_12)
/*#define FLASH_CS_CLR {GPIO_ResetBits(GPIOG, GPIO_Pin_13);
GPIO_SetBits(GPIOG, GPIO_Pin_14);GPIO_SetBits(GPIOB, GPIO_Pin_12);}*/
/* ¶¨òå¸÷¸öFLASHμÄID */
#define EN25Q80 0X1C13
#define EN25Q16 0X1C14
#define EN25Q32 0X1C15
//#define EN25Q64 0X1C16
#define EN25Q64 0Xc816
#define W25Q64 0XEF16
u16 FLASH_ReadID(void)
{
u16 ID = 0;
FLASH_CS_CLR; //′ò¿aƬѡ
SPI2_WriteReadData(0x90); //·¢Ëí¶áè¡IDÃüáî
SPI2_WriteReadData(0x00);
SPI2_WriteReadData(0x00);
SPI2_WriteReadData(0x00);
ID |= SPI2_WriteReadData(0xFF) << 8; //¶áè¡16λID
ID |= SPI2_WriteReadData(0xFF);
FLASH_CS_SET; //1رÕƬѡ
return ID;
}
void CheckFlash(void)
{
u16 FID;
FID = FLASH_ReadID();
while(FID != EN25Q64)
{
USART_SendData(USART1,(u8)(FID>>8));
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET){}
USART_SendData(USART1,(u8)(FID));
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET){}
FID = FLASH_ReadID();
}
}
1、看主函数(还是原子哥的原代码改的)
const u8 TEXT_Buffer[]={"WarShipSTM32 SPI TEST"}; //首先这是主函数里面定义需要写入的字符串
#define SIZE sizeof(TEXT_Buffer) //这是字符串的长度
u8 datatemp[SIZE];//读取数据缓存区,长度跟需要写入的数据长度相等
u32 FLASH_SIZE; //这里定义了一个FLASH大小的变量
while(W25QXX_ReadID()!=W25Q64)//这一句把原来的W25Q128改成W25Q64
FLASH_SIZE=128*1024*1024; //这是例程里面的参数(问题就在这里)改成64*512*1024;就好了
//原本我以为W25Q128改成W25Q64就只需要64*1024*1024;后来发现改了
//还是不能读,后来改成64*512*1024就好了,可以写入,可以读。但是写入一次后
//就不能写入第二次了,只能读出数据。必须要进行扇区或者全盘清除才能再次写入数 据,W25Q128是16M位的FLASH,应该是128*1024*1024位。换成字节是除以8等于16*1024*1024字节
W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);//这个函数中间的FLASH_SIZE-100应该是字节,而不是位,应为一个字母都是1个字节,而写入也是以字节为单位的。(总的来说就是写入的地址超范围了)。。。。
但是我改了以后芯片擦除函数不能用,擦不掉。(郁闷)。还有就是不知道4K扇区擦除函数怎么用,全盘擦除可能比较慢,想用扇区擦除。(求教)
2、对应的库里面也要稍作修改
//u16 W25QXX_TYPE=W25Q128; //W25Q128(原来的128屏蔽)
u16 W25QXX_TYPE=W25Q64; //W25Q64(换成现在自己手工外搭的Q64)
再没有其他的了。现在项目里面需要用到W25Q64,摸了好久。求大神指点指点
我现在把用户RFID的卡号和密码全部事先存入W25Q128中,当有卡进入RC522的天线区域内时读取卡号和事先存储的所有卡号进行对比,
现在我不太明白怎么样寻找flash中和读到的卡号一样的卡号
一周热门 更多>