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

如何确定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、大衆速騰除了低配時尚版外,其餘車型都配備了自動大燈,自動大燈安裝前需要将汽車熄火,并徹底關掉電源,不能因為最近天氣熱就怠速開着空調,或者為了解悶邊聽音樂邊操作,因為帶電操作存在一定危險性,所以大家忍忍,也就10多分鐘時間。2、原廠沒帶自動大燈的車型,大燈開關一定不帶AUTO擋,所以一般情況下,我...
2026-05-15
wps如何取消清除段落布局
wps如何取消清除段落布局
1、首先選擇鼠标雙擊桌面上的wps文本圖标。2、單擊工具欄上方的查看以使用審閱功能取消所有未使用的格...
2026-05-15
為什麼陌陌信息發不出去
為什麼陌陌信息發不出去
以iphone12,ios14,陌陌8.31.2為例。1、網絡問題:有網絡發不出信息,證明手機的DNS解析錯誤,如果連接的是WIFI網絡,則關閉路由器一分鐘抽掉電源,然後再次重啟,DNS就會重置,恢複上網。2、被屏蔽:若在陌陌平台發布過各類垃圾廣告、惡意信息、誘騙信息,則會被舉報,官方檢測出後将會被屏蔽,可嘗試聯系客服,進行恢複處理。
2026-05-15
寶駿310發動機是哪裡産的
寶駿310發動機是哪裡産的
1、寶駿310發動機質量是比較好的,這款發動機應與樂馳上的P-TEC是同一家族的産物,P-TEC發動機從通用歐洲技術的先進平台研發而來,是通用汽車全球發動機平台專為小排量車設計的高性能、高科技的新一代全球戰略發動機,發動機工廠引進通用最新的發動機生産線,是世界最先進的發動機生産線之一。2、而事實上,...
2026-05-15
電動車電池需要幾年更換一次
電動車電池需要幾年更換一次
1、電動車電池不是一定要幾年一換,而是當你的電動力跑不遠的時候,不足你支持你上下班時你肯定會換的。電動車更換鉛酸電池的好處是舊電池可以折價200元左右,電池容易越大折價越高,但缺點時電池太重,搬運不方便,同時更換電池周期短,短的一個一換,長的兩三年肯定要換。2、2015年以後國家提倡環保,生産的電池...
2026-05-15
Copyright 2023-2026 - www.tftnews.com All Rights Reserved