我用W25Q16的读写函数测试w25Q64怎么总是失败?需要改动什么吗?

2019-07-21 05:59发布

 w25q64的SPI引脚和w25x16一样,只不过把片选改了,求解惑啊 [mw_shl_code=c,true]#define SPI_FLASH_PageSize 256 #define SPI_FLASH_PerWritePageSize 256 /* Private define ------------------------------------------------------------*/ #define W25X_WriteEnable 0x06 #define W25X_WriteDisable 0x04 #define W25X_ReadStatusReg 0x05 #define W25X_WriteStatusReg 0x01 #define W25X_ReadData 0x03 #define W25X_FastReadData 0x0B #define W25X_FastReadDual 0x3B #define W25X_PageProgram 0x02 #define W25X_BlockErase 0xD8 #define W25X_SectorErase 0x20 #define W25X_ChipErase 0xC7 #define W25X_PowerDown 0xB9 #define W25X_ReleasePowerDown 0xAB #define W25X_DeviceID 0xAB #define W25X_ManufactDeviceID 0x90 #define W25X_JedecDeviceID 0x9F #define WIP_FlagMask 0x01 /* Write In Progress (WIP) flag */ #define Dummy_Byte 0xA5 u32 SPI_FLASH_ReadID(void) { u32 Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0; /*????SPI_FLASH??????????*/ SPI_FLASH_CS_LOW(); /* ×???????ID ?±?ò??·????ü??*/ SPI_FLASH_SendByte(W25X_JedecDeviceID); Temp0 = SPI_FLASH_SendByte(Dummy_Byte); Temp1 = SPI_FLASH_SendByte(Dummy_Byte); Temp2 = SPI_FLASH_SendByte(Dummy_Byte); /*????SPI_FLASH??????????*/ SPI_FLASH_CS_HIGH(); Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2; return Temp; } void SPI_FLASH_Test(void) { __IO uint32_t FlashID = 0; __IO uint32_t DeviceID = 0; /*????SPI_Flash??ID*/ FlashID = SPI_FLASH_ReadID(); printf(" ??????ID?? 0x%X", FlashID); /* ??????????SPI_Flash??ID??·????· */ // if ((FlashID == W25X16_FLASH_ID)) { /* ????SPI FLASH???????? */ SPI_FLASH_SectorErase(FLASH_SectorToErase); printf(" ????SPI FLASH????????: %s", Tx_Buffer); /* ??Tx_Buffer??????SPI FLASH?? */ SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, BufferSize); /* ??SPI FLASH??????????*/ SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize); /* ?ì?é??????????????????????·????? */ TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize); if(PASSED == TransferStatus1) { printf(" ??????????????????????! "); } else { printf(" ?í?ó-->????????????????????????! "); } /* ????SPI FLASH???????? */ SPI_FLASH_SectorErase(FLASH_SectorToErase); /* ??SPI FLASH??????????*/ SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize); /* ?ì?é??????????????·????· */ for (Index = 0; Index < BufferSize; Index++) { if (Rx_Buffer[Index] != 0xFF) { TransferStatus2 = FAILED; } } if(PASSED == TransferStatus2) { printf(" ?????ó??????????0xFF?????·! "); } else { printf(" ?í?ó-->?????ó????????????0xFF! "); } if((PASSED == TransferStatus1) && (PASSED == TransferStatus2)) { printf(" W25x16???????é????! "); } else { printf(" W25x16???????é?§°?! "); } } // else // { // printf(" W25x16???????é?§°?! "); // } /*SPI FLASH????????????*/ SPI_Flash_PowerDown(); }[/mw_shl_code] 我的板子上是w25q16芯片,w25Q64的外围电路是照着这个弄得,应该合适的吧 怎么连ID都读不出来……板子上的芯片用惯了,实际用个芯片感觉好难!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
LIUYABO
1楼-- · 2019-07-22 19:02
难道是我的芯片烧坏了,不应该啊 ,我都试了3片了,用万用表把每个引脚都测了的啊 ,用电热风吹吹上去的,才100多度啊。难道还要给SPI线接上拉电阻吗?
LIUYABO
2楼-- · 2019-07-22 21:32
回复【11楼】正点原子:
---------------------------------
呵呵,谢谢原子哥的解答,终于调出来了! 竟然是初始化时没有把SPI引脚拉高(GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);),但是试验箱上并没有拉高,为什么也可以出来?哈哈,反正出来了,字库终于写进去了!
zi_yang
3楼-- · 2019-07-22 22:09
 精彩回答 2  元偷偷看……
ning23
4楼-- · 2019-07-22 22:25
LIUYABO 发表于 2014-12-19 09:38
回复【12楼】八度空间:
---------------------------------
呵呵,谢谢你的解答,终于调出来了!&nbsp;竟然 ...

我的ID没问题,但是读写数据怎么不行啊?我的程序和你的一样
SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);
TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize);
根本读不到数据,为什么?大神,帮帮忙把。。。。。。。。。
LIUYABO
5楼-- · 2019-07-22 23:23
zi_yang 发表于 2015-10-24 21:40
回复【15楼】LIUYABO:
---------------------------------
什么意思,怎么还跟初始化有关系,不是引脚复用 ...

初始引脚状态和SPI的时序要一致
一号小鱼
6楼-- · 2019-07-23 04:07
ning23 发表于 2016-4-21 11:43
我的ID没问题,但是读写数据怎么不行啊?我的程序和你的一样
SPI_FLASH_BufferRead(Rx_Buffer, FLASH_Re ...

我的也是,读ID可以,读数据出来全是0.后来测试了,擦除的之后FLASH的状态寄存器会告擦除错误。你的问题后来是怎么解决的?大家有没有遇到过这种情况

一周热门 更多>