本帖最后由 jinglixixi 于 2020-11-21 08:23 編輯
在CH32V103開發板上配置了W25Q16存儲器,其接口電路如圖1所示。
1.jpg (14.12 KB, 下載次數: 52)
下載附件
2020-11-21 00:45 上傳
圖1 接口電路
此外,官方還提供了測試例程。其實,從程序看它是一個W25QXX系列的廣譜測試程序,所支持的芯片有: W25Q80、 W25Q16、 W25Q32、W25Q64及W25Q128,除了容量不同外,也就剩下名稱不同了。 由于是例程,大家都能得的到,程序就不在這里提供了。 其實際的測試過程主要有下列語句實現: printf("Start Write W25Qxx....\r\n"); SPI_Flash_Write((u8*)TEXT_Buf,0,SIZE); printf("W25QxxWrite Finished!\r\n"); Delay_Ms(500); printf("Start ReadW25Qxx....\r\n"); SPI_Flash_Read(datap,0x0,SIZE); printf("%s\r\n", datap ); Delay_Ms(500); printf("Start Erase W25Qxx....\r\n"); SPI_Flash_Erase_Sector(0); printf("W25Qxx EraseFinished!\r\n"); Delay_Ms(500); printf("Start ReadW25Qxx....\r\n"); SPI_Flash_Read(datap,0x0,SIZE); printf("%s\r\n", datap ); 也就是說,它是按照這樣的流程來處理的,即: 寫入-->讀取--->顯示-->刪除-->讀取 在對程序編譯后,給出的提示為:
2.jpg (36.27 KB, 下載次數: 64)
下載附件
2020-11-21 00:45 上傳
天哪,23個錯誤! 仔細一看,錯誤只是一種,原始而又低級,竟像使用單片機一樣直接通過賦值0和1來輸出高低電平! 以函數SPI_Flash_ReadID()為例,其原內容為:
3.jpg (21.73 KB, 下載次數: 51)
下載附件
2020-11-21 00:45 上傳
修改后,其內容則為:
4.jpg (26.34 KB, 下載次數: 53)
下載附件
2020-11-21 00:45 上傳
經再次編譯,其結果為:
在完成程序下載后,其運行結果如圖2所示。
5.jpg (34.95 KB, 下載次數: 50)
下載附件
2020-11-21 00:45 上傳
圖2 運行結果
完了,沒戲呀!讀寫失敗。 看過一遍原理圖之后,才發現原來片選信號竟被截流了,起連接作用的電阻R11原來沒有焊。 找到問題就好辦了,較R11的位置直接短接即可。 再進行測試,一切OK,其運行效果見圖3所示。
6.jpg (39.64 KB, 下載次數: 60)
下載附件
2020-11-21 00:45 上傳
圖3 正確結果
有了W25Q16存儲器,后面再遇到存儲容量緊張的問題就好辦了,直接扔給W25Q16即可。
|