首页
/
每日頭條
/
科技
/
如何确定flash和spi連接
如何确定flash和spi連接
更新时间:2026-05-18 15:54:07

如何确定flash和spi連接?來源:百問網_嵌入式Linux wiki_jz2440 新1期視頻維基教程 (視頻文字版),我來為大家科普一下關于如何确定flash和spi連接?下面希望有你要的答案,我們一起來看看吧!

如何确定flash和spi連接(SPIFLASH編程讀ID)1

如何确定flash和spi連接

來源:百問網_嵌入式Linux wiki_jz2440 新1期視頻維基教程 (視頻文字版)

作者:韋東山

本文字數:1277,閱讀時長:1.5分鐘

這節講解如何使用SPI操作Flash,我們在上節課的代碼上進行修改,添加一個文件 spi_flash.c 和其頭文件 spi_flash.h 。

我們先做一個最簡單的spi操作,讀取Flash的ID, SPIFlashID() 。

Flash的ID有廠家ID和設備ID,分别用pMID和pDID來保存。

根據Flash的芯片手冊 W25Q16DV.pdf 可以知道需要先發出一個指令0x90,再發送24位的地址0,再讀取數據前8位是設備ID,然後是8位設備ID。進行操作前必須要片選SPI Flash,片選完還是釋放SPI Flash:

void SPIFlashReadID(int *pMID, int *pDID) { SPIFlash_Set_CS(0); /* 選中SPI FLASH */ SPISendByte(0x90); SPIFlashSendAddr(0); *pMID = SPIRecvByte(); *pDID = SPIRecvByte(); SPIFlash_Set_CS(1); }

把其中的發送24地址封裝成了一個函數 SPIFlashSendAddr() :

static void SPIFlashSendAddr(unsigned int addr) { SPISendByte(addr >> 16); SPISendByte(addr >> 8); SPISendByte(addr & 0xff); }

依次完成上面的子函數,先是SPI片選,上一節的原理圖可以看到SPI Flash的片選是GPG2:

static void SPIFlash_Set_CS(char val) { if (val) GPGDAT |= (1<<2); else GPGDAT &= ~(1<<2); }

SPISendByte() 和前面OLED的是一樣的,就不用寫了,因此就隻剩下 SPIRecvByte() ,放在 gpio_spi.c 裡面實現:

unsigned char SPIRecvByte(void) { int i; unsigned char val = 0; for (i = 0; i < 8; i ) { val <<= 1; SPI_Set_CLK(0); if (SPI_Get_DI()) val |= 1; SPI_Set_CLK(1); } return val; }

在每個時鐘周期讀取DI引腳上的值,對于SOC就是MISO引腳:

static char SPI_Get_DI(void) { if (GPGDAT & (1<<5)) return 1; else return 0; }

至此,讀取Flash的ID基本實現,最後在主函數裡調用打印,分别在串口和OLED上顯示:

SPIFlashReadID(&mid, &pid); printf("SPI Flash : MID = 0xx, PID = 0xx\n\r", mid, pid); sprintf(str, "SPI : x, x", mid, pid); OLEDPrint(4,0,str);

Makefile記得加上新生成的 spi_flash.o 。

「新品首發」STM32MP157開發闆火爆預售!首批僅300套

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
夏季家電使用四大注意事項
夏季家電使用四大注意事項
夏季天氣炎熱,家電使用集中、頻繁,如使用不當,會造成家用電器損壞。因此家電使用有四忌:一忌将家電放置于陽光直射的地方。夏季氣溫高,家電應放在通風處,尤其是電冰箱、彩電等耐用電器,使其周圍形成良好的空氣對流環境,有利于家電及時散熱。二忌頻繁地啟動家電。若頻繁地啟動家電,使家電長時間在大電流狀态下工作,...
2026-05-18
這樣選購直發器最安全哦
這樣選購直發器最安全哦
這樣選購直發器最安全哦這樣選購直發器最安全哦品牌:目前市場上在售的家用直發器品牌很多,質量也是參差不齊,因此大家在選購直發器時應該重點關注品牌好、口碑佳、質量過關的優質産品。如果選擇不好或者買到山寨的器具,對消費者的安全也是很大的威脅。建議要購買正規的有注冊商标的廠家的産品。認證:由于一般使用的直發...
2026-05-18
傳真機的使用方法
傳真機的使用方法
傳真機是應用掃描和光電變換技術,把文件、圖表、照片等靜止圖像轉換成電信号,傳送到接收端,以記錄形式進行複制的通信設備。【1】發傳真①、取下聽筒,把要傳真的資料文字面向下,放在指定的位置。②、聽到“嘟”聲後,拔電話号碼。③、請對方給信号(如對方設為自動接收此步驟可省),聽到信号...
2026-05-18
電砂鍋和普通砂鍋哪個好?
電砂鍋和普通砂鍋哪個好?
電砂鍋和普通砂鍋哪個好?電砂鍋和普通砂鍋哪個好?電砂鍋可以預先設定啟動時間、烹饪時間和保溫時間,實現完全自動工作,這些都是普通鍋具不具備的。比如早晨出門前,我們在電砂鍋裡放上排骨和調料,設定好烹饪時間和自動保溫,晚上回家就能喝上一碗營養美味的排骨湯了。電砂鍋具有耐酸耐堿的特性,而且熱容量大,保溫時間...
2026-05-18
如何正确使用跑步機
如何正确使用跑步機
初學者在使用跑步機健身時,需要注意以下幾個事項:訓練前吃點東西:空腹鍛煉容易造成運動性貧血,運動前喝杯果汁,或者吃個香蕉,就能讓你體力充沛地鍛煉,但不要吃垃圾食品,比如油炸面包圈。選用快速啟動模式:好的跑步機會預置一套程序,你在跑步時,隻需按照提示輸入數據,就可以選擇不同鍛煉方式,比如“...
2026-05-18
Copyright 2023-2026 - www.tftnews.com All Rights Reserved