色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于SPI_FLASH時序描述及驅動編程

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-25 11:15 ? 次閱讀

Ⅰ、寫在前面

寫這篇文章的目的有兩點:1.讓大家知道SPI在實際應用開發中的重要意義; 2.讓大家掌握SPI FLASH存儲芯片的時序及驅動編程。

市面上的SPI FLASH類型很多,但是絕大部的芯片在硬件和軟件上都是兼容的。雖然本文是以華邦的W25X16芯片為例來講述時序。其實,其它大部分SPI FLASH都適用。

有必要看芯片手冊,按照手冊一步一步寫程序嗎?

1、如果你是初學者,而且還有很多時間,建議花些時間掌握一下! 原因在于作為嵌入式開發者,需要對芯片的編程有一定了解,在以后工作項目中如果有使用新的芯片,自己就能很容易編寫驅動(如果沒有現成的驅動)。

2、如果你是工作了一斷時間,自己對芯片驅動編程有一些經驗,在需要使用新的芯片,如果有現成的、比較成熟的驅動,那么,你可以不用再話費時間自己親自編寫驅動(編寫驅動很費時間,還需要花費一定時間驗證)。

關于本文的更多詳情請往下看。

Ⅱ、實例工程下載

筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。

筆者提供的實例工程都是在板子上經過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。

提供下載的軟件工程是基于Keil(MDK-ARM) V5版本、STM32F103ZE芯片,但F1其他型號也適用(適用F1其他型號: 關注微信,回復“修改型號”)。

STM32F10x_SPI(硬件接口)讀寫Flash(25Q16)實例源代碼工程:

https://yunpan.cn/c6mfRJWva6AJ2訪問密碼 4bc4

STM32F10x_SPI(軟件模擬)讀寫Flash(25Q16)實例源代碼工程:

https://yunpan.cn/c6mf6zyzCaMwd訪問密碼 cf45

SPI FLASH資料:

https://yunpan.cn/c6Yi3agWUnGNQ訪問密碼 d790

STM32F1資料:

https://yunpan.cn/crBUdUGdYKam2訪問密碼 ca90

Ⅲ、關于SPIFLASH

1.SPI FLASH芯片系列

SPI FLASH的種類及型號有很多,但根據筆者的了解及經驗,雖然存在這些差異,但他們之間的兼容性是很好的。

如:W25Xxx系列、W25Qxx系列、GD25Qxx系列、M25Pxx系列、KM25Lxx系列、SST25VFxx系列、AT25F系列等。

2.SPI FLASH命名

每一家公司的芯片型號命名可能略有差異,但看手冊就能明白。我們以華邦的W25系列芯片來舉例說明:


W:代表華邦公司

25X:代表SPI FLASH類型(25X是基本芯片, 25Q是快速芯片)

16:代表16MBit,即2M字節(64代表8M字節, 128代表16M字節,依次下去)

這個需要大家了解的(主要在項目研發初級階段對芯片的選型上使用到)。其他公司的芯片,查看方法類似.對比如圖是ST公司的M25PExx系列芯片:

3.W25Xxx讀寫特性

讀:無要求

寫:需要擦除才能寫,一次最多可寫入256字節(可編程頁)。

擦除:最小扇區擦除(4K)、可塊擦除(64K)、 可整個芯片擦除。

Ⅳ、SPIFLASH時序及編程

這里還是以華邦的W25X16為例來說明(其他大部分兼容),請下載手冊【W25Xxx手冊(英文版)】參考。

1.預先了解W25Xxx

A.控制和狀態寄存器命令(默認:0x00)

BIT位 7 6 5 4 3 2 1 0

SPR RV TB BP2 BP1 BP0 WEL BUSY

SPR:默認0,狀態寄存器保護位,配合WP使用

TB,BP2,BP1,BP0:FLASH區域寫保護設置

WEL:寫使能鎖定

BUSY:忙標記位(1,忙;0,空閑)

B.指令集表

編程主要就圍繞這些“指令”來編程。在我提供的軟件工程代碼“sflash.h”文件中就定義了和手冊對應的指令,如下圖:

2.寫使能(0x06)

在操作寫(控制、數據)之前,都需要發送一條“寫使能”指令。

時序如下圖:


源代碼程序:

3.寫失能(0x04)

和“寫使能”類似,要失能寫,在操作寫(控制、數據)之后,都需要發送一條“寫失能”指令。

時序如下圖:

源代碼程序:

4.讀狀態/控制(0x05)

W25X芯片唯一的狀態寄存器,各個位的意思請看上面的介紹,比如判斷忙不忙,就需要讀狀態。

時序如下圖:

源代碼程序:

5.寫狀態/控制(0x01)

寫狀態/控制 和 讀狀態/控制類似。

時序如下圖:

源代碼程序:

6.讀數據(0x03)

這個就是我們重要的讀數據指令。1.寫入指令0x03; 2.寫入24位地址; 3.連續讀出N字節數據(只要有時鐘,可以連續讀出多字節);

時序如下圖:

源代碼程序:

7.快速讀數據(0x0B)

“快速讀數據”和“讀數據”類似,但它的區別:1.讀數據速度更快; 2.需要在寫入地址之后需要8個時鐘的等待。

1.寫入指令0x0B; 2.寫入24位地址; 3.寫入8個時鐘; 4.連續讀出N字節數據(只要有時鐘,可以連續讀出多字節);

時序如下圖:

源代碼程序:

8.快速雙通道讀數據(0x3B)

“快速雙通道讀數據”和“快速讀數據”類似,但它的區別:在讀數據的時候是兩條通道,也就是我們平時主機的輸出引腳(MOSI)在這個時候拿來當做輸入引腳讀數據。

注意:

使用該指令功能,需要改變SPI底層驅動(即需要改變MOSI引腳的輸入輸出狀態)。針對初學者,我提供的工程也沒有寫的那么復雜,即該指令功能沒有(感興趣的朋友可研究一下)。

9.寫數據(頁編程)(0x02)

“寫數據”和“讀數據”類似,但寫數據都是在同一條數據(DIO)線上,讀數據在地址之后是在DO數據上。

1.寫入指令0x02; 2.寫入24位地址; 3.連續寫入N字節數據(只要有時鐘,可以連續寫入多字節,注意這里一次不能超過256字節數據);

時序如下圖:

源代碼程序:

10.塊擦除(0xD8)

W25Xxx塊的多少有芯片型號決定,一塊數據大小64K。

W25X16共2M字節,有16塊(2M/64K = 16)

W25X64共8M字節,有64塊(8M/64K = 64)

以此類推...

注意:這個塊的地址是和數據的地址對應,我們程序塊擦除中將塊區分開來。

時序如下圖:

源代碼程序:

11.扇區擦除(0x20)

W25Xxx扇區的多少有芯片型號決定,扇區數據大小4K。

W25X16共2M字節,有256塊(2M/4K = 256)

W25X64共8M字節,有1024塊(8M/4K = 1024)

以此類推...

同樣,我們程序扇區擦除中將扇區以扇區的形式區分開來。

時序如下圖:

源代碼程序:

12.芯片擦除(0xC7)

這條指令是擦除整個芯片內容,如果要繼續操作芯片,需要等待擦除完成(檢查忙信號)。

時序如下圖:

源代碼程序:

13.掉電(低功耗)(0xB9)

需要將芯片處于低功耗,發送該指令。

時序如下圖:

源代碼程序:

14.喚醒/ID(0xAB)

該指令有兩個功能:1.將處于低功耗的芯片喚醒(常用); 2.讀取設備ID(不常用)。

發送該指令可以將芯片喚醒,繼續發送3字節無效數據,可繼續讀出設備ID.由于讀取設備ID有單獨的指令,這里基本不常用于讀設備ID(程序中也沒有該功能)。

時序如下圖:

源代碼程序:

15.讀取ID(0x90)

這個指令讀取兩字節數據(ID):高字節是廠家Manufacturer,低字節是芯片型號ID.

如我開發板上是W25Q128,讀到的ID是:0XEF17

W25X16讀到的ID是:EF14

時序如下圖:

源代碼程序:

16.JEDEC_ID(0x9F)

出于兼容性考慮,有些芯片廠家使用該指令讀取ID,這條指令和上一條指令類似。

與上一條指令不同點:1.不用發送3字節無效數據; 2.讀出來的ID是3字節(依次是:廠家ID、批次ID、型號ID)。

時序如下圖:

源代碼程序:

以上就是關于W25Xxx芯片所有的指令,其他廠家芯片或許還有一些指令,請根據情況看手冊編寫相應代碼。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FlaSh
    +關注

    關注

    10

    文章

    1649

    瀏覽量

    149491
  • 驅動
    +關注

    關注

    12

    文章

    1866

    瀏覽量

    85936
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1731

    瀏覽量

    92848
收藏 人收藏

    評論

    相關推薦

    DLPC410如何對SPI閃存進行編程

    公告上提示DLPR410即將停產,TI會發布SPI FLASH的固件。我們需要根據發布時間升級板卡,請問固件何時能夠發布? 公告文檔上按下面內容寫的,現在我們需要spi flash
    發表于 02-17 07:31

    EE-231:帶SHARC處理器的SPI Flash在線編程

    電子發燒友網站提供《EE-231:帶SHARC處理器的SPI Flash在線編程.pdf》資料免費下載
    發表于 01-06 15:31 ?0次下載
    EE-231:帶SHARC處理器的<b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>在線<b class='flag-5'>編程</b>

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash
    的頭像 發表于 11-21 01:05 ?627次閱讀
    【S32K146 RT-Thread】之 使用SFUD組件<b class='flag-5'>驅動</b><b class='flag-5'>spi</b> <b class='flag-5'>flash</b>

    LuatOS入門課|Air201模組與SPI Flash的交互藝術

    今天我會把我了解的關于如何使用SPI讀寫外部Flash教給大家,本文將通過Air201+擴展板讀寫外部flash的演示,教你使用SPI示例,
    的頭像 發表于 11-17 09:51 ?394次閱讀
    LuatOS入門課|Air201模組與<b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>的交互藝術

    瀚海微SD NAND之SD 協議(42)SPI總線時序

    -卡已準備好 下面的時序描述了基本的命令響應(無數據)SPI事務。 主機命令到卡響應卡忙 下面的時序描述了R1b響應的命令響應事務(例如
    的頭像 發表于 10-21 10:19 ?422次閱讀
    瀚海微SD NAND之SD 協議(42)<b class='flag-5'>SPI</b>總線<b class='flag-5'>時序</b>

    物聯網行業存儲方案詳解_SPI NOR Flash

    物聯網系統中為什么要使用SPI NOR FLASH 物聯網系統中使用SPI NOR FLASH的原因主要基于其獨特的性能特點和在嵌入式系統中的廣泛應用。以下是詳細的分析: 1、高可靠性
    的頭像 發表于 09-24 14:39 ?560次閱讀
    物聯網行業存儲方案詳解_<b class='flag-5'>SPI</b> NOR <b class='flag-5'>Flash</b>

    時序邏輯電路的五種描述方法

    時序邏輯電路是數字電路中的一種重要類型,它具有存儲和處理信息的能力。時序邏輯電路的描述方法有很多種,不同的方法適用于不同的設計和分析場景。以下是五種常見的時序邏輯電路
    的頭像 發表于 08-28 11:39 ?1869次閱讀

    時序邏輯電路的描述方法有哪些

    時序邏輯電路是數字電路中的一種重要類型,它具有存儲功能,能夠根據輸入信號和內部狀態的變化來改變其輸出。時序邏輯電路廣泛應用于計算機、通信、控制等領域。本文將介紹時序邏輯電路的描述方法,
    的頭像 發表于 08-28 11:37 ?905次閱讀

    使用SPI編程器將網盤文件燒錄到板上spi flash,2K0300燒錄報錯

    我這邊使用SPI編程器將網盤上面這個文件燒錄到板上spi flash, 開機也有信息打印,但是uboot運行過程報錯,錯誤信息如下 燒錄前是能夠正常啟動的,麻煩看下是不是固件有問題
    發表于 08-15 10:16

    spi_flash期間的計時器中斷導致崩潰怎么解決?

    spi_flash_erase_sector(...); spi_flash_write(...); 如果在閃存訪問期間發生計時器中斷,ESP 似乎會崩潰并重新啟動。 當然,這可以通過在訪問 Flash 時禁用中斷來
    發表于 07-12 11:54

    ESP32外部flashspi外設沖突怎么解決?

    硬件: ESP32 ,W25Q128 SPI顯示器 庫:IDF4.0.1 使用hspi掛載了外部16MB的W25Q128,并同時掛載了SPI的顯示器,使用兩不同IO口進行分時復用。 問題描述:分時
    發表于 06-25 06:19

    基于FPGA的SPI Flash控制器的設計方案

    、塊擦除、整體擦除、讀取數據、快速讀取數據、頁面編程)時所需指令時序,用戶只需要輸入對應操作的8位指令值及對應的操作地址值,SPI接口與SPI Fl
    發表于 06-03 10:13

    FATFS對SPI_FLASH新建文件、刪除文件或者修改文件后電腦無法識別,為什么?

    FATFS對SPI_FLASH新建文件、刪除文件或者修改文件后電腦無法識別,而且會斷開連接,需要重新插拔,這是什么問題呢
    發表于 04-09 07:06

    通用bootloader選“支持spi flash”,無論設定download為片內還是片外flash啟動都找不到at45db161,為什么?

    通用bootloader不選“支持spi flash”,download放于片內flash,正常啟動,ota正常,app驅動at45db161讀寫正常。通用bootloader選“支持
    發表于 03-22 07:45

    求助,關于SPI讀寫Flash的理解

    利用SPI讀寫Flash指令的過程中,當主機發送指令后,為什么還需要再發送“任意的數據”,才能夠獲取指令解釋后的返回值。 當讀取Flash的JEDEC_ID指令時,按FLASH的ID指
    發表于 03-20 06:06
    主站蜘蛛池模板: 色综合精品无码一区二区三区 | jlzzzjizzzjlzzz亚洲 | 亚洲无遮挡无码A片在线 | 中文字幕按摩 | 约艺术院校96年清纯白嫩 | 99在线精品免费视频 | 国产睡熟迷奷系列精品 | 欧美伦理片第7页 | 国产免费看片 | 女教师跟黑人男朋友激情过后 | 亚洲高清在线精品一区 | 亚洲日本欧美日韩高观看 | 国产精品色无码AV在线观看 | 免费国产足恋网站 | 亚洲欧美激情精品一区二区 | 国内精品不卡一区二区三区 | 日韩欧美视频一区二区在线观看 | 一品道门在线视频高清完整版 | 国产欧美精品国产国产专区 | 老师给美女同学开嫩苞 | 高清国产mv视频在线观看 | 强壮的公次次弄得我高潮韩国电影 | 芳草地在线观看免费视频 | 国产成人久久婷婷精品流白浆 | 日本十八禁无遮拦啪啪漫画 | 青青青青草原国产免费 | 亚洲黄色成人 | 国产高清美女一级a毛片久久w | 少妇第一次交换 | 在线中文字幕网站 | 女人高潮时一吸一夹 | 午夜伦4480yy妇女久久 | 绞尽奶汁by菊花开 | 97在线视频免费人妻 | YELLOW视频直播在线观看高清 | 亚洲男人片片在线观看 | 人人澡人人擦人人免费 | 黑人强伦姧人妻日韩那庞大的 | 午夜伦午夜伦锂电影 | 蜜臀AV浪潮99国产麻豆 | 被送到黑人性奴俱乐部 |