37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒於本人手頭積累了一些傳感器和模塊,依照實踐(動手試試)出真知的理念,以學習和交流為目的,這里准備逐一做做實驗,不管能否成功,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
實驗五十:W25Q64 64Mbit FLASH外擴存儲模塊 (DataFlash SPI接口 )
W25X64
該系列是華邦公司推出的大容量SPI FLASH 產品,W25X64 的容量為 64Mbit(8M),該系列還有 W25Q80/16/32 等W25X16、W25X32、W25X64分別有8192、16384、32768個可編程頁,每頁256字節,用扇區擦除指令每次可以擦除16頁,用塊擦除指令每次可以擦除256頁,用整片擦除指令既可以擦除整個芯片,W25X16、W25X32、W25X64分別有512、1024、2048個可擦除扇區,或者32、64、128個可擦除的塊。W25Q64 的擦寫周期多達 10W 次,具有 20 年的數據保存期限,支持電壓為 2.7~3.6V,W25Q64 支持標准的 SPI,還支持雙輸出/四輸出的 SPI,最大 SPI 時鍾可以到 80Mhz(雙輸出時相當於 160Mhz,四輸出時相當於 320M)。
SPI總線
SPI,是英語Serial Peripheral Interface的縮寫,顧名思義就是串行外圍設備接口。SPI,是一種高速的,全雙工,同步的通信總線,並且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議。SPI是一個環形總線結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數據交換。上升沿發送、下降沿接收、高位先發送。上升沿到來的時候,sdo上的電平將被發送到從設備的寄存器中。下降沿到來的時候,sdi上的電平將被接收到主設備的寄存器中。
SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鍾線SCK,一條數據輸入線MOSI,一條數據輸出線MISO;用於 CPU與各種外圍器件進行全雙工、同步串行通訊。SPI主要特點有:可以同時發出和接收串行數據;可以當作主機或從機工作;提供頻率可編程時鍾;發送結束中斷標志;寫沖突保護;總線競爭保護等。
SPI 數據速率一般在1到70MHz的范圍內,字長為從8位及12位到這兩個值的倍數。數據傳輸一般由數據交換構成。在主控制器向從設備發送數據時,從設備也向主控制器發送數據。因此主控制器的內部移位寄存器和從設備都采用環形設置。在數據交換之前,主控制器和從設備會將存儲器數據加載至它們的內部移位寄存器。收到時鍾信號后,主控制器先通過MOSI線路時鍾輸出其移位寄存器的MSB。同時從設備會讀取位於SIMO的主控器第一位元,將其存儲在存儲器中,然后通過SOMI時鍾輸出其MSB。主控制器可讀取位於MISO的從設備第一位元,並將其存儲在存儲器中,以便后續處理。整個過程將一直持續到所有位元完成交換,而主控器則可讓時鍾空閑並通過/SS 禁用從設備。
在 SPI 中,主控制器可與單個或多個從設備通信。如果是一個單從設備,從設備選擇信號可連接至從設備的本地接地電位,實現永久接入。對使用多個從設備的應用,可使用兩種配置:獨立從設備與菊花鏈從設備。要與從設備單獨通信,主控制器必須提供多重從設備選擇信號。該配置通常用於必須單獨訪問多個模數轉換器 (ADC) 及數模轉換器 (DAC) 的數據采集系統中。菊花鏈從設備只需要主控制器提供一個從設備選擇信號,因為這種配置要求所有從設備同時啟用,以確保數據不間斷地流經該鏈路中的所有移位寄存器。典型應用是工業 I/O 模塊中的級聯多通道輸入串行器與輸出驅動器。注意,菊花鏈連接不一定適用於所有的SPI設備,特別是要求多字節傳輸的(比如存儲器芯片)設備。另外,要對外設芯片的數據表進行仔細分析,確定能對它做什么而不能做什么。如果芯片的數據表中沒有明確提到菊花鏈連接,那么該芯片不支持這種連接的幾率為50%。
W25Q64FWSSIG參數
功能數量 1 端子數量 8
最大工作溫度 85 Cel
最小工作溫度 -40 Cel
最大供電/工作電壓 1.95 V
最小供電/工作電壓 1.65 V
額定供電電壓 1.8 V
最大時鍾頻率 104 MHz
加工封裝描述 0.208 INCH, GREEN, SOIC-8 狀態 ACTIVE 工藝 CMOS
包裝形狀 SQUARE
包裝尺寸 SMALL OUTLINE
表面貼裝 Yes
端子形式 GULL WING
端子間距 1.27 mm
端子位置 DUAL
包裝材料 PLASTIC/EPOXY
溫度等級 INDUSTRIAL
內存寬度 1 組織 64M X 1
存儲密度 6.41E7 deg
操作模式 SYNCHRONOUS
位數 6.41E7 words
位數 64M
內存IC類型 FLASH 1.8V PROM
串行並行 SERIAL
W25Q64引腳
CS:CS為片選管腳,低電平有效。上電之后,在執行一條新的指令之前,必須讓/CS管腳先有一個下降沿。
DO(MISO):DO為串行數據輸出引腳,在CLK(串行時鍾)管腳的下降沿輸出數據。
WP:WP為寫保護管腳,有效電平為低電平。高電平可讀可寫,低電平僅僅可讀。
DI(MOSI):DI為串行數據輸入引腳,數據、地址和命令從DI引腳輸入到芯片內部,在CLK(串行時鍾)管腳的上升沿捕獲捕獲數據。
CLK(SLCK):CLK為串行時鍾引腳。SPI時鍾引腳,為輸入輸出提供時鍾脈沖。
HOLD:HOLD為保持管腳,低電平有效。當CS為低電平,並且把HOLD拉低時,數據輸出管腳將保持高阻態,並且會忽略數據輸入管腳和時鍾管腳上的信號。把HOLD管腳拉高,器件恢復正常工作。
VCC:電源2.7V~3.6V。
GND:地。
W25Q64內部框架圖
W25Q64操作原理
通過SPI接口,用標准的SPI協議發送相應指令給flash,然后flash根據命令進行各種相關操作。
W25Q64常用操作命令
模塊電原理圖
模塊接口定義
CS:為片選信號腳---D10
DI(MOSI):為串行數據輸入引腳----D11
DO(MISO):為串行數據輸出引腳---D12
CLK(SLCK):SPI總線---D13
VCC: 電源3.3V
GND:接地
/* 【Arduino】168種傳感器模塊系列實驗(50) 實驗五十:W25Q64 64Mbit FLASH外擴存儲模塊 (SPI接口 ) Arduino 的 uno 引腳 CS----------10 MOSI(DI)---11 MISO(DO)---12 CLK---------13 VCC 3.3V */ #include <SerialFlash.h> #include <SPI.h> // 文件大小 #define FSIZE 256 // 文件名 const char *filename = "Eagler8.txt"; // 文件內容 const char *contents = "The groundbreaking Intel Curie module expands the possibilities of what tech can do."; // 片選引腳 const int FlashChipSelect = 10; void setup() { Serial.begin(9600); while (!Serial) ; delay(500); // 初始化SPI Flash芯片 SerialFlash.begin(FlashChipSelect); // 如果文件已存在,則輸出提示 // 如果文件不存在,則創建文件並寫入 if(SerialFlash.exists(filename)) { Serial.println("File " + String(filename) + " already exists"); } else { Serial.println("Creating file " + String(filename)); SerialFlash.create(filename, FSIZE); // 新建SerialFlashFile對象用於文件操作 SerialFlashFile file; file = SerialFlash.open(filename); file.write(contents, strlen(contents) + 1); Serial.println("String \"" + String(contents) + "\" written to file " + String(filename)); } } void loop() { }