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

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

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

3天內不再提示

探討i.MX RT下FlexSPI driver實現Flash編程時對于中斷支持問題

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2023-02-06 15:09 ? 次閱讀

前段時間有客戶在官方社區反映i.MX RT1170下,使用官方SDK里FlexSPI驅動去擦寫Flash時不能很好地支持全局中斷。 客戶項目里用了兩塊NOR Flash,分別掛在不同的 FlexSPI上,一塊Flash用于存儲XIP代碼(FlexSPI1),另一塊Flash用于存儲項目資源數據(FlexSPI2),顯然這樣的設計原理上是沒有問題的,那為什么使能了中斷會出問題呢?今天就來分析下這個問題:

注: 客戶測試的SDK版本為 2.12.1,對應的FlexSPI driver版本為2.3.6

一、為什么擦寫Flash時經常需要關全局中斷?

在具體分析客戶問題之前,我們先來聊聊嵌入式應用里應對NOR Flash的擦寫,為何大部分情況下都是要關閉全局中斷(這里假設執行代碼空間與擦寫操作空間在同一個 Flash上,當然是在不同區域),這其實跟如下兩個特性有關:

1.1 RWW特性(Read-While-Write

RWW特性的意思是在Flash執行擦寫命令進入Busy 狀態期間(Flash內部狀態寄存器 WIP位變狀態1)還能否繼續響應非操作區域的讀訪問。如果SR[WIP] = 1 時還能夠支持讀訪問,則該Flash 支持RWW,反之則不支持RWW。

d3991ad0-a3ba-11ed-bfe3-dac502259ad0.png

絕大部分Flash都是不支持RWW特性的,這就是為什么Flash擦寫操作代碼本身是需要重定向到RAM里去執行(尤其是回讀SR[WIP]狀態的代碼)。

對于支持RWW特性的Flash,一般是以Block為單位,Flash擦寫操作代碼放在BlockX 里執行,則可以操作BlockX以外的其它Block 區域,且不需要做代碼重定向。

現在你應該知道對于不支持RWW的Flash為什么擦寫時需要關閉全局中斷了,因為無法保證中斷響應相關代碼全都重定向到RAM里了,所以干脆在Flash擦寫期間不響應任何中斷。

1.2 SCLK Stop特性

SCLK Stop特性的意思是在Flash執行寫入命令接受主設備傳輸過來的Page數據期間,如果總線上SCLK停止(一般情況是FlexSPI這一端的TXFIFO為空或者觸發空條件),則Flash能否也暫停接受當前Page數據直到SCLK繼續輸出從而繼續處理剩下的Page數據。

絕大部分Flash是不支持SCLK Stop特性的,因此在MCU端如果傳輸Page數據,需要一次性連續傳輸完成,一旦中途被打斷,則兩次不連續的Page數據傳輸可能無法得到想要的Page寫入結果。這也是為何Flash寫入期間我們需要關閉中斷。

二、FlexSPI外設寫操作設計

關于i.MX RT上的FlexSPI外設基本情況,以前有兩篇舊文 《FlexSPI支持在Flash XIP原理》、《FlexSPI支持AHB方式寫入Flash》,大家先讀一下有個初步了解。 這里想重點說一下FlexSPI關于IPG方式寫操作的設計,下圖為FlexSPI外設的模塊框圖,綠色線標出了 IPG 方式寫入的通路,這里大家可以看出,其中 IP_TX_FIFO 模塊起了重要的數據緩沖作用,驅動里往 FLEXSPI->TFDRx 寄存器寫入的 Page 數據會先被裝載進 IP_TX_FIFO 里,然后再傳輸出去。

d3c1c2c8-a3ba-11ed-bfe3-dac502259ad0.png

不同i.MX RT型號中IP_TX_FIFO大小不一樣,目前有三種大小:128、256或1024 Bytes。

對于QuadSPI/OctalSPI NOR Flash來說,Page 大小一般是256 Bytes;對于 HyperBus Flash,Page 大小一般是 512 Bytes。所以在 i.MX RT10xx 上 IP_TX_FIFO 是不足以緩沖整個 Page 的,i.MX RT117x 上可以緩沖 QuadSPI/OctalSPI NOR 類型的 Page,i.MX RT118x/5xx/6xx 上則可以緩沖全部 NOR Flash 類型的 Page。

對于 Page 數據不能全部緩沖的情況,則需要一邊傳輸一邊緩沖。

d3f035d6-a3ba-11ed-bfe3-dac502259ad0.png

在具體裝載數據進 IP_TX_FIFO 時,主要涉及如下三個 FLEXSPI 寄存器,IP_TX_FIFO 一次只能被填入watermark level大小的數據,想要把全部 Page 數據填進 IP_TX_FIFO,需要分多次裝載。只要 FLEXSPI->INTR[IPTXWE] 標志為 0, 即代表 IP_TX_FIFO 剩余空間大于等于 watermark level,那么就可以繼續裝載。

FLEXSPI->IPTXFCR[TXWMRK] -- 設置一次裝載進 IP_TX_FIFO 的數據長度(即 watermark level),8 Bytes為單位

FLEXSPI->TFDRx -- 按 watermark level 長度填入 IP_TX_FIFO 裝載數據

FLEXSPI->INTR[IPTXWE] -- 觸發 IP_TX_FIFO 的一次裝載

d443f716-a3ba-11ed-bfe3-dac502259ad0.png

三、客戶問題及FlexSPI driver寫操作流程

前面鋪墊了這么多,終于來到客戶遇到的 FlexSPI 驅動對于中斷不支持的問題了。因為客戶使用了兩片Flash,所以不存在 RWW 限制問題,那剩下的原因就跟 SCLK Stop 特性有關,即 IP_TX_FIFO 并沒有緩沖全部的 Page,導致 Page 傳輸過程被中斷打斷了,然后 IP_TX_FIFO 因為緩沖數據全部發完而使 FlexSPI 模塊進入了 SCLK Stop 狀態。

我們直接打開fsl_flexspi.c驅動文件,找到跟寫操作相關的 FLEXSPI_TransferBlocking() 函數,在函數實現里可以發現,啟動寫傳輸時序的控制位 FLEXSPI->IPCMD[TRG] 是在 IP_TX_FIFO 填充動作 FLEXSPI_WriteBlocking() 函數之前被開啟的,那這樣的實現確實是不能夠很好地支持中斷的。

d453eedc-a3ba-11ed-bfe3-dac502259ad0.png

四、如何改進FlexSPI driver支持中斷?

知道了原因所在,改起來也很簡單。如果是QuadSPI/OctalSPI NOR Flash類型(Page=256 Bytes),在 i.MX RT117x 上,其 IP_TX_FIFO 大小為 256 Bytes,能夠緩沖全部的 Page 大小,則可以先調用 FLEXSPI_WriteBlocking() 裝載全部的 Page 數據,然后再開啟 FLEXSPI->IPCMD[TRG] 去觸發寫傳輸時序,這時候就不怕被中斷打斷了,如下代碼所示。

當然下面代碼只是一個 workaround 式的實現示例,不是一個完整的解決方案,畢竟 FlexSPI 驅動要適配全部 i.MX RT 型號以及全部類型的 NOR Flash,此外還適用 NAND 型 Flash(Page 一般是 2KB),這時候需要根據情況拆分調用多次 FLEXSPI_WriteBlocking() 函數(不管怎樣要保證啟動寫傳輸時序前,把 IP_TX_FIFO 先裝滿)。

status_t FLEXSPI_TransferBlocking(FLEXSPI_Type *base, flexspi_transfer_t *xfer)
{
    // 代碼略去

    /* Start Transfer. */
    if ((xfer->cmdType == kFLEXSPI_Write) || (xfer->cmdType == kFLEXSPI_Config))
    {
        result = FLEXSPI_WriteBlocking(base, xfer->data, xfer->dataSize);
        base->IPCMD |= FLEXSPI_IPCMD_TRG_MASK;
    }
    else if (xfer->cmdType == kFLEXSPI_Read)
    {
        base->IPCMD |= FLEXSPI_IPCMD_TRG_MASK;
        result = FLEXSPI_ReadBlocking(base, xfer->data, xfer->dataSize);
    }
    else
    {
        base->IPCMD |= FLEXSPI_IPCMD_TRG_MASK;
    }

    // 代碼略去
}

審核編輯:湯梓紅

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

    關注

    10

    文章

    1635

    瀏覽量

    148082
  • 編程
    +關注

    關注

    88

    文章

    3616

    瀏覽量

    93760
  • 中斷
    +關注

    關注

    5

    文章

    898

    瀏覽量

    41514
  • driver
    +關注

    關注

    0

    文章

    526

    瀏覽量

    66616
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1037

    瀏覽量

    45977

原文標題:探討i.MX RT下FlexSPI driver實現Flash編程時對于中斷支持問題

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    i.MX RT1052芯片的核心板,性能和代碼詳細資料概述

    i.MX RT1052是i.MX RT系列芯片,是由 NXP 半導體公司推出的跨界處理器芯片,該系列又包
    的頭像 發表于 06-10 10:55 ?2.5w次閱讀

    01:i.MX RT的市場應用和參考解決方案

    i.MX RT產品是今年市場上最受歡迎的跨界MCU產品。i.MX RT定位為一款MCU產品,它可以重復利用傳統的Arm MCU生態系統。除此之外,本次講座還將簡要介紹
    的頭像 發表于 01-21 07:13 ?3360次閱讀
    01:<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的市場應用和參考解決方案

    i.MX RT開發筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)

    RT開發筆記-03 | i.MX RT1062地址空間映射i.MX RT開發筆記-04 | i.MX
    發表于 12-01 13:51 ?2次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套<b class='flag-5'>中斷</b>向量控制器NVIC(按鍵<b class='flag-5'>中斷</b>檢測)

    RT-Thread & NXP 發布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界處理器系列。該系列又包括 i.MX RT1020、i.MX
    發表于 12-07 13:06 ?2次下載
    <b class='flag-5'>RT</b>-Thread & NXP 發布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架

    基于i.MX RT單芯片實現的GUI圖形顯示和語音控制解決方案

    基于優秀的性能指標,i.MX RT可以勝任許多輕量級的AI應用,賦能越來越多的邊緣設備。今天這場視頻講座中,恩智浦的專家將向大家展示一款基于i.MX RT單芯片
    的頭像 發表于 12-31 09:48 ?7256次閱讀

    i.MX RT1170上串行NOR Flash雙程序可交替啟動設計

    i.MX RT10xx一樣,這里要聊的還是在一片掛載在FlexSPI上的串行NOR Flash里做冗余/雙程序設計,就是下圖中的image L和image H,不涉及LPSPI接口
    的頭像 發表于 04-28 09:55 ?1245次閱讀

    適用于i.MX RT500和i.MX RT600 MCU的Xtensa音頻框架介紹

    在眾多的恩智浦i.MX RT跨界處理器當中,您可能會發現有些系列除了Arm內核之外還結合了高性能的DSP,利用集成DSP的技術優勢,可提供高性能音頻數字信號處理能力,并包含特定算法操作,可實現完全
    的頭像 發表于 11-10 09:39 ?2726次閱讀

    擦寫Flash時一定不能開啟系統全局中斷嗎?

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRTFlexSPI driver實現
    的頭像 發表于 02-10 14:27 ?3379次閱讀

    基于 NXP i.MX RT1050 的 3D 打印機方案

    MCU-Healer 是基于 NXP i.MX RT1050 做的 3D 打印機方案,該方案主控 MCU i.MX RT1050是一顆 Cortex-M7 內核的高性能 MCU,主頻達
    的頭像 發表于 04-06 15:06 ?1222次閱讀
    基于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050 的 3D 打印機方案

    i.MX RT的FlexRAM配置問題

    i.MX RT的FlexRAM配置問題
    的頭像 發表于 10-24 15:46 ?818次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置問題

    i.MX RTFlexSPI外設不常用的讀選通采樣時鐘源

    i.MX RTFlexSPI外設不常用的讀選通采樣時鐘源
    的頭像 發表于 10-30 17:44 ?559次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中<b class='flag-5'>FlexSPI</b>外設不常用的讀選通采樣時鐘源

    理解i.MX RTFlexSPI外設lookupTable里配置訪問行列混合尋址Memory的參數值

    理解i.MX RTFlexSPI外設lookupTable里配置訪問行列混合尋址Memory的參數值
    的頭像 發表于 10-30 17:23 ?507次閱讀
    理解<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中<b class='flag-5'>FlexSPI</b>外設lookupTable里配置訪問行列混合尋址Memory的參數值

    i.MX RT1050上如何實現雙大容量存儲(MSC)設備

    i.MX RT1050上如何實現雙大容量存儲(MSC)設備
    的頭像 發表于 10-30 17:08 ?639次閱讀
    在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050上如何<b class='flag-5'>實現</b>雙大容量存儲(MSC)設備

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動設計

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動設計
    的頭像 發表于 10-27 09:36 ?477次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500/600系列上串行NOR <b class='flag-5'>Flash</b>雙程序可交替啟動設計

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序啟動設計

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序啟動設計
    的頭像 發表于 09-26 16:53 ?747次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1060/1010上串行NOR <b class='flag-5'>Flash</b>冗余程序啟動設計
    主站蜘蛛池模板: 午夜免费小视频| 人人做人人干| 吉吉av电影| 羞羞答答的免费视频在线观看| 艳照门在线播放| 纯肉宠文高h一对一| 久久久免费热线精品频| 日韩成人性视频| 97久久超碰中文字幕| 最新高清无码专区在线视频| 国产精品99久久久久久宅男AV| 免费观看国产视频| 欧美一区二区日韩一区二区| 亚洲1卡二卡3卡4卡新区在线| 97超碰射射射| 狠狠色狠狠色综合日日92| 日本一区不卡在线播放视频免费| 伊人大香人妻在线播放| 国产精品av免费观看| 欧美激情久久久久久久大片 | 日韩亚洲国产中文字幕欧美| 一二三四电影完整版免费观看| 国产69精品久久久久APP下载| 美女撒尿无遮挡免费中国| 亚洲国产综合另类视频| 国产精品JK白丝AV网站| 日本人吃奶玩奶虐乳| 99久久99久久久精品久久| 久久婷五月综合色啪首页| 亚洲妈妈精品一区二区三区| 国产成人综合在线视频| 青青伊人精品| babesvideos欧美最新| 美女教师朝桐光在线播放| 日本丝袜护士| abp-146| 老师的丝袜脚| 影音先锋男人av橹橹色| 海角国精产品一区一区三区糖心| 污文乖不疼的| 国产精品自在自线亚洲|