首页
/
每日頭條
/
科技
/
如何确定flash和spi連接
如何确定flash和spi連接
更新时间:2026-09-15 16:08:57

如何确定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-09-15
手機上有個圓圈是怎麼回事
手機上有個圓圈是怎麼回事
手機上有個圓圈是怎麼回事?手機上有個圓圈的原因是随着自己的觸摸屏幕而出現在屏幕上,其實是打開了顯示觸摸操作關閉方法如下:,下面我們就來聊聊關于手機上有個圓圈是怎麼回事?接下來我們就一起去了解一下吧!手機上有個圓圈是怎麼回事手機上有個圓圈的原...
2026-09-15
火星的大氣溫度
火星的大氣溫度
趣味探索訊最近,由于多天陰雨天氣,可能很多人覺得天氣非常寒冷,然而,事實上再怎麼寒冷也沒有火星寒冷。因為來自火星極樂世界洞察号的天氣傳感儀器最新測量數據顯示,火星最高溫-17攝氏度,最低溫為-95攝氏度。不過,溫差變化不大,或适合移民。2月...
2026-09-15
長安cs55plus新體驗
長安cs55plus新體驗
寫在前面:當新冠疫情時不時的來騷擾一下我們生活的時候,當所有自駕旅行計劃被迫擱淺的時候,我們依舊不能錯過戶外的美好天氣和景色,于是在2021年這個精緻露營的元年,開着一台心愛的車去露營,已經成為了很多年輕人的新選擇。所以,在東北十月深秋的某...
2026-09-15
手機能放在冰箱裡嗎
手機能放在冰箱裡嗎
手機能放在冰箱裡嗎?可以将手機放在冰箱中無論冰箱是冷凍機還是冷凍機,冰箱中的空氣濕度都非常低,因此,将手機短時間放置在冰箱中不會損壞手機例如,浸泡在水中的手機在放入冰箱一段時間後會迅速蒸發但是,如果将手機長時間放在冰箱中,可能會損壞手機,我...
2026-09-15
Copyright 2023-2026 - www.tftnews.com All Rights Reserved