衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何開發(fā)功能齊全的QSPI驅(qū)動(dòng)

嵌入式程序員 ? 來源:嵌入式程序猿 ? 作者:嵌入式程序猿 ? 2020-09-25 14:42 ? 次閱讀

1. 摘要

本篇筆記主要介紹,如何開發(fā)穩(wěn)定可靠,功能齊全的QSPI驅(qū)動(dòng)。

2. 準(zhǔn)備工作

1, IAR 8.32.1

2, STM32Cube_FW_H7_V1.6.0

3. QSPI簡(jiǎn)介

4. QSPI驅(qū)動(dòng)

在項(xiàng)目的開發(fā)中,我們經(jīng)常會(huì)使用外掛Flash在做一些應(yīng)用,而STM32H743帶QSPI接口,可以用來外掛QSPI Flash,在之前的推送中我們以winbond華邦的W25Q256為例給大家說明了下QSPI的操作,借助ST的HAL庫(kù)例程可以快速驗(yàn)證,不同型號(hào)的QSPI Flash會(huì)有一些參數(shù)和命令區(qū)別,大家應(yīng)用時(shí)候要注意,例如美光和華邦的有的命令碼就不同。ST的驅(qū)動(dòng)里STM32H743的評(píng)估板是以美光的MT25T_QLKT_L_01G為例。如果你使用不同的型號(hào),請(qǐng)注意區(qū)分,既然是評(píng)估板,那么就只是給大家參考,在正式的項(xiàng)目中,還需要考慮一些其他的問題。

5. 驅(qū)動(dòng)架構(gòu)

驅(qū)動(dòng)的架構(gòu)可以參考STM32Cube_FW_H7中對(duì)QSPI Flash驅(qū)動(dòng)架構(gòu),也可以自己做架構(gòu),盡量簡(jiǎn)單明了,易用且穩(wěn)定。對(duì)具體型號(hào)Flash的驅(qū)動(dòng)可以放在一個(gè)文件下建立一個(gè).c和.h. 如我們以華邦的W25Q系列為例,

還可以建立一個(gè)文本文檔,用來記錄驅(qū)動(dòng)的一些變更,發(fā)布筆記等。

BSP層可以在BSP文件夾下建立QSPI的驅(qū)動(dòng),名字可以參考ST庫(kù),也可以按照自己的命名規(guī)則來定,或者企業(yè)的軟件文件命名規(guī)則來定。

建立好這些文件后,接下來可以動(dòng)手開發(fā)了。開發(fā)的時(shí)候可以先畫一些圖,除過正常的初始化,去初始化,外,考慮都包含那些功能,那些模式,那些命令,那些安全管理。那些中斷,是否可以用DMA操作等。還要考慮數(shù)據(jù)結(jié)構(gòu)類型,配置信息,錯(cuò)誤碼等。這些一定要結(jié)合數(shù)據(jù)手冊(cè)來考慮和分析。

5.1 初始化和去初始化

這部分相對(duì)比較簡(jiǎn)單,可以參考例程,市面上的開發(fā)板,編碼風(fēng)格和良莠不齊,大家盡量參考官方的資料和文檔,要考慮檢查返回值,初始化有沒有成功。跟硬件相關(guān)的管腳,時(shí)鐘等大家根據(jù)自己的應(yīng)用去定,H743我一般跑400M. 官方的大部分例程也都是跑在400M.

5.2 驅(qū)動(dòng)模式

從手冊(cè)可以知道分為間接模式,狀態(tài)輪詢模式,內(nèi)存映射模式,那么我們的驅(qū)動(dòng)就要能夠分別支持這三種模式。在stm32h743i_eval_qspi.h里面定義這些模式和其他數(shù)據(jù)類型。這些可以參考官方的定義

在w25q256.h中定義跟flash相關(guān)的數(shù)據(jù)類型,結(jié)構(gòu)體,宏定義等。如QSPI的操作模式,這里要明白1-1-1,1-1-2,1-1-4,1-4-4等的含義,因?yàn)镼SPI包含這四種,指令單線,地址單線/4線,數(shù)據(jù)單線/兩線/四線,這些在flash的數(shù)據(jù)手冊(cè)指令表里都會(huì)標(biāo)出,支持那種操作,而我們?cè)隍?qū)動(dòng)中要綜合考慮這四種。

命令表的定義,這個(gè)要注意不同型號(hào)的FLASH,會(huì)稍有區(qū)別,即使同一家的不同型號(hào)的可能也有區(qū)別,如華邦256M和1G的指令就有一些個(gè)別的不同。恰好這兩款我都用過,在這里給大家提一下。由于指令比較多,這里就不一一列舉了,只截取其中一部分,具體指令表的定義可以參考flash手冊(cè),

但是建議大家在做驅(qū)動(dòng)的時(shí)候?qū)λ兄噶钭鲋С郑@樣在用的時(shí)候就很方便,而不是用的時(shí)候發(fā)現(xiàn)少,在去填補(bǔ)。可以分別做成子函數(shù),例如讀取ID,可以做一些校驗(yàn)

很多指令的內(nèi)容官網(wǎng)的驅(qū)動(dòng)里都沒有,需要我們自己去做。

5.3 狀態(tài)寄存器讀寫

W25Q系列一般有三個(gè)狀態(tài)寄存器,用來表示一些狀態(tài),如狀態(tài)寄存器1就可以通過讀取來判斷flash的狀態(tài),有沒有忙,寫使能有沒有打開,以及保護(hù)位保護(hù)了那些地址,這些都要自己去實(shí)現(xiàn),市面上包括官方的例程驅(qū)動(dòng)里都沒有,假如你不判斷的話,如果要寫的地址被保護(hù),是寫不進(jìn)去的,還有可能出現(xiàn)異常,這些都可以通過讀取狀態(tài)寄存器1和2來判斷和處理。以及結(jié)合WP腳。

這些功能在正式的產(chǎn)品中我們一定要考慮,否則你的驅(qū)動(dòng)就不穩(wěn)定,不安全,因?yàn)?a target="_blank">工業(yè)現(xiàn)場(chǎng)各種干擾,以及其他異常情況。可能你在實(shí)驗(yàn)室跑的好好的代碼,到現(xiàn)場(chǎng)就不行了

5.4 讀寫擦驅(qū)動(dòng)

擦除操作比較耗時(shí),所以如果你是用查詢模式的話,要不斷去查詢狀態(tài),而不能死等,從手冊(cè)可以看除時(shí)間量級(jí),擦除正片最大需要1000s,還是比較耗時(shí),即使最小的擦除單元4k擦除,最壞情況也需要400ms。用中斷或者DMA方式操作的話不涉及,但DMA的話中斷需要好幾個(gè),有命令,完成,狀態(tài)匹配,收發(fā)完成等。要熟悉這些大概時(shí)間量級(jí)。方便參考。基于不同模式的驅(qū)動(dòng)我們?cè)诠娞?hào)里都給大家介紹過。

讀寫驅(qū)動(dòng),可以參考官網(wǎng)的例程,但是要加一些改動(dòng),如考慮讀寫失敗怎么辦,超時(shí)退出,如果連續(xù)兩次還是失敗,怎么考慮,我們一般會(huì)考慮嘗試三次,如果第一次失敗就嘗試第二次讀取,第二次失敗,嘗試第三次,這樣可以大大加強(qiáng)安全性,可能99.99%的情況下一次就成功,但不排除失敗的可能性。此外還要考慮參數(shù)的保護(hù)。

5.4.1 擦除

可以按照擦除單位來綜合寫一個(gè)函數(shù)

這里要注意就是W25Q256 和W25Q01J 的一些區(qū)別。如有的指令前者支持指令地址四線,而后者不支持。

5.4.2 讀操作

讀操作要考慮是single還是dual模式,分別出兩個(gè)子函數(shù),讀的指令不同,時(shí)序也不同

建議大家一個(gè)指令做一個(gè)子函數(shù)。如0x6C和0xEC的時(shí)序和操作模式就不同,如0X6c

代碼實(shí)現(xiàn)

從時(shí)序圖可以看到指令單線,地址單線,數(shù)據(jù)4線即 1-1-4模式。0xEC留給大家去聯(lián)系實(shí)現(xiàn)。

5.4.3 寫操作

寫操縱也有幾條不同的命令

不同的時(shí)序和方式,可以寫成不同的子函數(shù),我們以34h為例子

通過時(shí)序圖可以看到是指令單線,地址單線,數(shù)據(jù)四線,這樣就可以實(shí)現(xiàn)寫操作了。

5.5 異常

通常我們還需要去管理和處理一些異常情況,例如下面的定義,你也可以按照自己的方式,總之要對(duì)異常和錯(cuò)誤做一些管理。

官方的例子基本上每個(gè)都有返回值,大家可以去參考,這樣使你的驅(qū)動(dòng)更安全可靠。

5.6 其他

其他一些應(yīng)考慮的問題,大家可以根據(jù)自己的需求和應(yīng)用在添加,這里就不在贅述。

6. 測(cè)試驗(yàn)證

開發(fā)完后,就可以寫一個(gè)簡(jiǎn)答的測(cè)試程序,對(duì)自己的驅(qū)動(dòng)進(jìn)行測(cè)試,因?yàn)槲沂窃?a href="http://www.zgszdi.cn/v/tag/1019/" target="_blank">freeRTOS系統(tǒng)下用的,所以建立一個(gè)QSPI的測(cè)試任務(wù),去實(shí)現(xiàn)擦,寫,讀,比較的功能和驗(yàn)證。截取幾張測(cè)試圖

7. 參考文檔

序號(hào) 文獻(xiàn)
1 STM32H743RM
2 STM32Cube_FW_H7_V1.6.0

原文標(biāo)題:如何寫好QSPI驅(qū)動(dòng)

文章出處:【微信公眾號(hào):嵌入式程序猿】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1851

    瀏覽量

    85651
  • QSPI
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    12248

原文標(biāo)題:如何寫好QSPI驅(qū)動(dòng)

文章出處:【微信號(hào):InterruptISR,微信公眾號(hào):嵌入式程序員】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    功能齊全的350W離線電源轉(zhuǎn)換器的設(shè)計(jì)回顧

    電子發(fā)燒友網(wǎng)站提供《功能齊全的350W離線電源轉(zhuǎn)換器的設(shè)計(jì)回顧.pdf》資料免費(fèi)下載
    發(fā)表于 12-05 13:58 ?0次下載
    <b class='flag-5'>功能</b><b class='flag-5'>齊全</b>的350W離線電源轉(zhuǎn)換器的設(shè)計(jì)回顧

    在rtt studio使用qspi dma就是進(jìn)不了中斷,為什么?

    我用的是rtt studio, 當(dāng)不用qspi dma的時(shí)候,stm32g474 qspi讀取w25q64 id正常,后續(xù)的讀寫都正常。 如果在dma_config.h添加已下幾個(gè)宏使用DMA1
    發(fā)表于 09-27 07:03

    STM32H743配置了QSPI驅(qū)動(dòng)W25Q256JV,初始化成功,但后續(xù)都失敗了,為什么?

    在實(shí)驗(yàn)野火開發(fā)部STM32H743時(shí),配置了QSPI驅(qū)動(dòng)W25Q256JV,初始化成功,但后續(xù)都失敗了,如圖1 我的配置過程如下, 1、使用了CubMX,如下圖 2、CubMX生成了代碼
    發(fā)表于 09-26 07:00

    在mmWave SDK增加QSPI Flash驅(qū)動(dòng)的示例

    電子發(fā)燒友網(wǎng)站提供《在mmWave SDK增加QSPI Flash驅(qū)動(dòng)的示例.pdf》資料免費(fèi)下載
    發(fā)表于 09-11 14:20 ?0次下載
    在mmWave SDK增加<b class='flag-5'>QSPI</b> Flash<b class='flag-5'>驅(qū)動(dòng)</b>的示例

    AM273x QSPI閃存選擇指南

    電子發(fā)燒友網(wǎng)站提供《AM273x QSPI閃存選擇指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-04 09:38 ?0次下載
    AM273x <b class='flag-5'>QSPI</b>閃存選擇指南

    AM263x QSPI閃存選擇指南

    電子發(fā)燒友網(wǎng)站提供《AM263x QSPI閃存選擇指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 10:26 ?0次下載
    AM263x <b class='flag-5'>QSPI</b>閃存選擇指南

    esp32c3 qspi能否驅(qū)動(dòng)屏幕?

    esp32c3qspi能否驅(qū)動(dòng)屏幕是否有相關(guān)歷程
    發(fā)表于 06-11 09:04

    請(qǐng)問ESP32-S3如何驅(qū)動(dòng)QSPI接口的LCD?

    目前項(xiàng)目用ESP32-S3來驅(qū)動(dòng)QSPI接口的LCD,驅(qū)動(dòng)IC為GC9B71(規(guī)格書參考附件)。試著在ESP-IDF的范例spi_lcd_touch_example_main基礎(chǔ)修改了一下,沒辦法
    發(fā)表于 06-07 06:51

    使用FreeRTOS+emWin,顯示*.bmp, *.png圖片后導(dǎo)致qspi工作異常或者沒有響應(yīng)了的原因?

    qspi 里面的字庫(kù)數(shù)據(jù)顯示完全沒有任何問題的 qspi 使用的查詢法,以前沒有使用 freerots前可以使用 dma+中斷功能的,但是現(xiàn)在使用了 rtos后,貌似 qspi
    發(fā)表于 04-16 06:06

    stm32l476 QSPI如何退出 Memory_Mapped MODE?

    下將數(shù)據(jù)寫入外部QSPI的RAM中。 然后再將QUADSPI切換到QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED模式,將數(shù)據(jù)發(fā)送出去。 現(xiàn)在功能已經(jīng)實(shí)現(xiàn)。但是要進(jìn)行下一
    發(fā)表于 04-10 07:12

    STM32 QSPI怎么退出映射模式?

    我使用QSPI FLASH 作為放置主程序的地方,首先從BOOT 啟動(dòng),將QSPI 映射到0X90000000, 然后跳轉(zhuǎn)到0X90000000, 但是當(dāng)我需要OTA 的時(shí)候,我必須跳到 內(nèi)部
    發(fā)表于 03-29 08:15

    無法使用STWB5MMG的QSPI IO2怎么解決?

    無法使用STWB5MMG的QSPI IO2 CS:PA2 CLK: PA3 IO0: PB9 IO1: PB8 IO2: PA7----->驅(qū)動(dòng)W25Q64(芯片正常),我用QSPI 4線傳輸?shù)臅r(shí)候, 唯獨(dú)這個(gè)線上的數(shù)據(jù)
    發(fā)表于 03-26 07:09

    STM32H7B0通過QSPI地址映射外部flash開始使用正常,出現(xiàn)QSPI功能異常是什么原因?qū)е碌模?/a>

    STM32H7B0 通過QSPI地址映射外部flash開始使用正常,后面出現(xiàn)QSPI功能異常(直接尋址和地址映射均不能訪問外部flash),QSPI IO2作為
    發(fā)表于 03-08 06:34

    《RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》基礎(chǔ)篇--以先楫bsp的hwtimer設(shè)備為例

    一、概述(一)RT-Thread設(shè)備驅(qū)動(dòng)《RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》書籍是RT-thread官方出品撰寫,系統(tǒng)講解RT-threadIO設(shè)備驅(qū)動(dòng)
    的頭像 發(fā)表于 02-24 08:16 ?1842次閱讀
    《RT-Thread設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>指南》基礎(chǔ)篇--以先楫bsp的hwtimer設(shè)備為例

    QSPI使用GPIO當(dāng)做SLSO,如何使用QSPI emulate模式?

    如果將某個(gè)GPIO設(shè)置成Output作為SPISLSO(CS線),該如何使用QSPI emulate模式么,詳細(xì)描述見TC275芯片手冊(cè)第1969頁(yè)。不知道Port以及相應(yīng)寄存器該怎么配置,看芯片手冊(cè)不能完全理解。
    發(fā)表于 02-20 08:24
    稳赢的百家乐官网投注方法| 大发888私网开户| 宕昌县| 免费百家乐在线| 津市市| 百家乐破解版| 肥东县| 百家乐直杀| 爱赢百家乐官网开户送现金| 百家乐开户| 墨尔本百家乐官网的玩法技巧和规则 | 百家乐是娱乐场最不公平的游戏| 百家乐官网娱乐城代理| 百家乐最好的投注方法| 百家乐官网稳中一注法| 威尼斯人娱乐场官网48008| 天天百家乐官网的玩法技巧和规则 | 乌兰县| 百家乐视频游戏挖坑| 海立方百家乐官网赢钱| 大发888游戏 下载| 百家乐百家乐伴侣| 永利博百家乐官网游戏| 大发888游戏平台hg dafa888gw| 百家乐官网开户| 全讯网| 百家乐平点| 百家乐官网直揽经验| 弥渡县| 威尼斯人娱乐平台注册| 百家乐视频世界| 玩百家乐官网澳门皇宫娱乐城| 神话百家乐的玩法技巧和规则| 回力百家乐官网的玩法技巧和规则| 高陵县| 威尼斯人娱乐网反水| 专业百家乐分析| 百家乐官网平注常赢法| 威尼斯人娱乐平台开户| 百家乐游戏群号| 百家乐官网开户送8彩金|