日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机开发板(W25Q16学习)

發布時間:2024/9/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机开发板(W25Q16学习) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

教程資料

鏈接:https://pan.baidu.com/s/142JRSPisQO2Cu6VZ2Y5YrQ?密碼:eom0

今天測試開發板的W25Q16(16Mbit--Flash)寫一篇文章備忘一下

先說一下容量的單位

計算機存儲單位一般用B,KB、MB、GB、TB、PB、EB、ZB、YB、BB來表示,它們之間的關系是: ? ?

位 bit (比特)(Binary Digits):存放一位二進制數,即 0 或 1,最小的存儲單位。 ? ?字節 byte:8個二進制位為一個字節(B),最常用的單位。

?

1KB(Kilobyte 千字節) = 2^10 B = 1024 B; ? ?

1MB(Megabyte 兆字節) = 2^10 KB = 1024 KB = 2^20 B; ? ?

1GB(Gigabyte 吉字節) = 2^10 MB = 1024 MB = 2^30 B; ? ?

1TB(Trillionbyte 太字節) = 2^10 GB = 1024 GB = 2^40 B; ?

?1PB(Petabyte 拍字節) = 2^10 TB = 1024 TB = 2^50 B; ? ?

1EB(Exabyte 艾字節) = 2^10 PB = 1024 PB = 2^60 B; ? ?

1ZB(Zettabyte 澤字節) = 2^10 EB = 1024 EB = 2^70 B; ? ?

1YB(YottaByte 堯字節) = 2^10 ZB = 1024 ZB = 2^80 B; ? ?

1BB(Brontobyte ) = 2^10 YB = 1024 YB = 2^90 B; ? ?

1NB(NonaByte ) = 2^10 BB = 1024 BB = 2^100 B; ? ?

1DB(DoggaByte) = 2^10 NB = 1024 NB = 2^110 B

?

所以16Mbit = 16*1024KB= 16384KB

16384KB = 16384*1024 bit =?16777216 bit

1字節=8位(bit)

也就是說W25Q16最多可以存儲16777216 /8 = 2097152個字節的數據

可以先看一下數據手冊

https://wenku.baidu.com/view/7b361c5cba1aa8114531d936.html

http://www.51hei.com/bbs/dpj-41029-1.html

?

芯片呢對2097152個字節進行了分配

每256個字節自己作為一頁 ? 所以就有 ?2097152/ 256 = 8192頁

然后呢又對8192頁進行了分配 ? ?

每16頁作為一個扇區 ? ? 所以就有 ?8192/ 16 = 512個扇區

還有就是 讓每 256頁作為一個塊

所以 就有?8192 /?256 = 32 個塊

?

每次寫數據之前需要先擦除

芯片規定最小擦除的單位是扇區,所以最小需要擦除16頁,也就是16*256 = 4096個字節,也可以說最小擦除的空間是4KB, 4096 / 1024 = 4KB

當然也可以使用塊擦除,那么每次擦除一個塊,也就是256頁 ?,就是 ?256*256 = 65536個字節.. ?就是64KB ? 65536 / 1024 = 64KB

最后呢還有一個全片擦除指令,就是說寫一個指令就可以擦除整個空間

看資料上還有

?

?這個..............不確定...也可以擦除128頁???還是說W25Q80是可以擦除128頁....最后寫程序試一試就知道了....

然后呢就是一些指令...測試完所有的功能再寫

?附上自己的程序,,,,,,史上最簡單

/** * @brief SPI函數 * @param value--發送的數據 * @param None * @param None * @retval None * @example **/ unsigned char SPIWriteRead(unsigned char value) {unsigned char i=0,temp=0;SPI_CLK = 0;//進入之前其實是高電平if(SPI_MISO)temp|=0x80;//接收數據for(i=0;i<8;i++){SPI_MOSI=value&(0x80>>i);//準備數據SPI_CLK=1;SPI_CLK = 0;if(i<7)if(SPI_MISO)temp|=0x80>>(i+1);//接收數據 }return temp; }

測試

SPI_CS=0;SPIWriteRead(W25X_PowerON_ID);SPIWriteRead(0xff);SPIWriteRead(0xff);SPIWriteRead(0xff);aa=SPIWriteRead(0xff);SPI_CS=1;printf("%X\r\n",(int)aa);DelayMs(1000);SPI_CS=0;SPIWriteRead(W25X_JEDEC_ID);aa=SPIWriteRead(0xff);bb=SPIWriteRead(0xff);cc=SPIWriteRead(0xff);SPI_CS=1;DelayMs(1000);printf("%X%X%X\r\n",(int)aa,(int)bb,(int)cc);DelayMs(1000);

?

#ifndef W25QXX_H_ #define W25QXX_H_#ifndef W25QXX_C_ #define W25QXX_C_ extern #else #define W25QXX_C_ #endif//以自己買的型號為準 #define FLASH_ID 0xC84015 //GD25Q16CSIG DeviceID 0x14 // #define FLASH_ID 0xEF3015 //W25X16 // #define FLASH_ID 0xEF4015 //W25Q16 // #define FLASH_ID 0XEF4018 //W25Q128 // #define FLASH_ID 0XEF4017 //W25Q64#define W25X_ReadStatus 0x05 //讀狀態寄存器 #define W25X_WriteStatus 0x01 //寫狀態寄存器 #define W25X_ReadDATA8 0x03 //普讀_數據 #define W25X_FastRead 0x0B //快讀_數據 #define W25X_DualOutput 0x3B //快讀_雙輸出 #define W25X_Writepage 0x02 //寫_數據_0~255個字節 #define W25X_S_Erase 0x20 //扇區擦除4KB #define W25X_B_Erase 0xD8 //塊區擦除64KB #define W25X_C_Erase 0xC7 //整片格式化 #define W25X_PowerDown 0xB9 //待機 #define W25X_PowerON_ID 0xAB //開機或是讀ID #define W25X_JEDEC_ID 0x9F //十六位的JEDEC_ID #define W25X_WriteEnable 0x06 //寫允許 #define W25X_WriteDisable 0x04 //寫禁止sbit SPI_CS = P1^0; // 片選 sbit SPI_MISO = P1^1; // 數據輸入引腳 sbit SPI_MOSI = P1^2; // 數據輸出引腳 sbit SPI_CLK = P1^3; // 時鐘#endif

?

轉載于:https://www.cnblogs.com/yangfengwu/p/8806984.html

總結

以上是生活随笔為你收集整理的51单片机开发板(W25Q16学习)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。