前言:
STM32中的通信接口:
UART? ? 單總線? ?IIC? ?SPI? ?CAN
1.?SPI???FLASH??W25Q64的關系
SPI:一種通信接口,可以用于和搭載SPI接口的設備通信
FLASH:是一種掉電不丟失的存儲 -- 手機8+256G的256? 單片機 64K+512K的512
芯片內部flash:64K+512K的512K -- 存放個代碼的地方
芯片外部flash:獨立于芯片外部
W25Q64:是flash的一種
如果我們想把數據存儲起來可以有以下幾個方案:
- ?5.4.1 備份數據寄存器? -- 并不是每個單片機都有
- ?IIC+EEPROM(AT24C02)
- ?SPI+FLASH(W25Q64)
- 存儲在芯片內部的flash中 -- 512K
1.1?SPI 簡介
SPI作為一種通信接口其數字接口為:
發送:發送方控制數據線的高低電平
接收:接收方讀取對方控制數據線的高低電平
一主多從
CS | 片選? ? --? 選擇和誰通信 |
SCK | 時鐘線 |
MOSI | 主機輸出? ?--? 從機輸入 |
MISO | 主機輸入? --? 從機接收 |
MOSI :主機控制這根線的高低電平? 從機讀取這跟線的高低電平 如果STM32作為主機? MOSI要配置成輸出模式 |
MISO :從機控制這根線的高低電平,主機讀取這根線的高低電平 如果STM32作為主機? MISO要配置成輸入模式 |
SCK :? 一般是主機控制時鐘線 如果STM32作為主機? SCK要配置成輸出模式 |
CS :?? 由主機控制 如果STM32作為主機? SCK要配置成輸出模式 |
1.2 SPI 物理層
1.3 數據鏈路層
時鐘極性CPOL | 空閑時候,時鐘線的點平為0(低電平)空閑點平為1(高電平) |
時鐘相位CPHA | CPHA=0,在串口同步時鐘的第一個(奇數)跳變沿(上升或下降)數據被采集 CPHA=1,在串行同步時鐘的第二個(偶數)跳變沿(上升或下降)數據被采集 |
所謂的采集:就是讀取對方控制線的高低點平
主機讀取MISO的高低點平
從機讀取MOSI的高低點平
其中的四種模式:
CPOL | CPHA | ||
SPI0 | 0 | 0 | CLK空閑為低,上升沿采樣;下降沿就發送 |
SPI1 | 0 | 1 | CLK空閑為低,下降沿采樣;上升沿就發送 |
SPI2 | 1 | 0 | CLK空閑為高,下降沿采樣;上升沿就發送 |
SPI3 | 1 | 1 | CLK空閑為高,上升沿采樣;下降沿就發送 |
1.4 SPI 引腳功能選擇
2 W25Q64
W25Q64? 容量大小:? 64M BIT??? ==? 8M字節
0x0--0x7FFFFF(111 1111 1111 1111 1111 1111)
000 0000 0000 0000 0000 0000
?? 塊?? 扇區? 頁???? 字節
0x700000
111 0000 0000 0000 0000 0000
第112塊(編號從0開始) 0 扇區? 0頁? 0字節
5.1 指令操作
使用的五大原則:
- FLASH使用的時候,必須先擦除,再寫。擦除之后,里面放的數據全部都是0xff,flash只能由1變0,不能由0變1。
- 不能跨頁寫,超過1頁會從該頁的起始位置覆蓋
- 寫之前必須要寫使能
- 最小擦除指令就是扇區擦除
- 指令執行完,檢測狀態寄存器是否操作完成