首页
/
每日頭條
/
科技
/
如何确定flash和spi連接
如何确定flash和spi連接
更新时间:2026-03-02 20:53:20

如何确定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
推荐阅读
如何清潔電視機
如何清潔電視機
電視機久不清洗的危害:電視機的内部在使用一段時間後,會積滿厚厚的一層塵埃,這些髒物加速了機器的老化,增加輻射,出現雪花點,嚴重的可造成短路、燒毀元器件,甚至能引起顯像管爆炸。所以電視機的内部要每年清洗一次。【1】清洗電視機内部清洗電視機内部時,先斷電源半小時,再打開電視機的後蓋,用電吹風将積塵吹淨,...
2026-03-02
增強洗衣機洗滌效果的竅門
增強洗衣機洗滌效果的竅門
以往大家在使用洗衣機洗衣服,總喜歡多放些洗衣粉,以為泡沫越多,洗滌效果越好。其實,這種方法是錯誤的,其實洗滌衣物時也是有許多方法的,如有不清楚的朋友可以一起了解一下。【1】應使洗衣粉全部溶解如水溫過低,洗衣機就難骓溶解洗衣粉,可先用30℃左右的少量溫水使之全部溶解。如衣物及髒,可用40℃&mdash...
2026-03-02
加濕器原理
加濕器原理
加濕器在一些幹燥的地方比較多見,因為幹燥的空氣對人體的皮膚是有一定的傷害,如果置身在幹燥的空氣當中,自己感覺也是會很難受的。使用加濕器的話,大家應該要先了解加濕器的原理,知道加濕器是怎樣工作的,這樣才可以更好的去了解加濕器的用法,對自己有一定的幫助。使用加濕器要注意的是要控制好空氣中的濕度,如果濕度...
2026-03-02
如何清洗加濕器
如何清洗加濕器
冬季和夏季人們的生活根本就離不開空調,而空調開的時間如果是過長的話,最容易導緻的一種情況就是室内空氣過于幹燥,這就需要使用加濕器來對室内空氣進行加濕。不過在如果是您想要您的加濕器使用壽命長的話,在使用的時候不但要注意保養,更需要注意它的清潔,那麼,如何清洗加濕器呢?加濕器如果是清潔不及時,或者是不經...
2026-03-02
燃氣熱水器
燃氣熱水器
直排式燃氣熱水器在使用的時候,其實和強直排式的熱水器有什麼區别呢。強排式熱水器在使用的時候,是可以使用一些特别長的傳熱管,還有金屬接觸面積特别多的一種熱交換器,工作的原理,其實是将燃燒了之後的氣體熱量很好的傳給金屬片加熱而工作的,希望我們加以了解的。燃氣熱水器的分類其實是比較多的,家用的燃氣快速使用...
2026-03-02
Copyright 2023-2026 - www.tftnews.com All Rights Reserved