日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)...

發(fā)布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是Octal或Hyper Flash上DQS信號與Dummy Cycle聯(lián)系

  關(guān)于在 i.MXRT 上啟動 NOR Flash 時如何設(shè)置正確的 Dummy Cycle 值,痞子衡一共寫過四篇文章:《IS25WP系列Dummy Cycle設(shè)置》、《IS25LP系列Dummy Cycle設(shè)置》、《Dummy Cycle設(shè)置為0的誤區(qū)》、《DTR模式下Dummy Cycle設(shè)置》, 這四篇文章都是針對普通 QuadSPI 型 Flash 而言的(一般沒有 DQS 信號)。而如果在 i.MXRT 上啟動的是包含 DQS 信號的 Octal Flash 或者 Hyper Flash,此時 Dummy Cycle 設(shè)置有什么不同之處呢?今天痞子衡就和大家聊聊這個話題:

一、Flash讀時序中DQS與Dummy Cycle作用

  我們知道對于普通 QuadSPI 型 Flash,在 FlexSPI 模塊 LUT 里配置讀時序時,其中 Dummy Cycle 子序列中填的值必須要與 Flash 端的 Dummy Cycle 嚴(yán)格一致,否則會發(fā)生時序錯亂(如下圖 Extended 時序所示,圖中是單線模式,四線模式類似)。

  Flash 里一般都會開放寄存器給用戶去配置 Dummy Cycle 值,Flash 工作頻率越高,所需的最小 Dummy Cycle 也越大(可以理解為 Flash 存儲體從接收到讀命令開始到輸出有效數(shù)據(jù)這一段時間間隔是恒定的,而我們衡量時間的基準(zhǔn)是連接到 Flash 的 SCK,SCK 頻率越高,相同間隔內(nèi)所需 SCK 周期數(shù)就越多)。

  • Note1: 簡單來說,Dummy Cycle 就是 Flash 響應(yīng)主機(jī)每一次讀時序所需要的準(zhǔn)備時間,在 NOR Flash 上這個時間是固定且可設(shè)的,跟訪問地址無關(guān)。
  • Note2: 一個確定的 Dummy Cycle 值決定了 Flash 上限工作頻率,但此時 Flash 并不是只能在這個上限頻率下工作,低于這個上限頻率均可以。

  DQS 信號正常是為 OctalSPI / HyperBus 型 Flash 工作在八線 DTR 模式下同步 DQ[7:0] 線輸出而生的(見上圖 Octal DRR 時序),關(guān)于其基本概念詳見痞子衡舊文 《DQS信號簡介》。

  • Note: 在 Hyper Flash 上負(fù)責(zé) DQS 功能的信號是 RWDS。

  當(dāng) OctalSPI / HyperBus 型 Flash 工作在 Octal DDR 模式下時,DQS/RWDS 信號會向主設(shè)備(這里指 i.MXRT)提示 DQ[7:0] 何時有效,所以這時候 DQS 信號其實也兼?zhèn)淞?Dummy Cycle 的作用。不過考慮到有時候主設(shè)備端不一定會使能 DQS 信號,Dummy Cycle 的存在仍然是有必要的。

二、FlexSPI外設(shè)里DQS和Dummy Cycle聯(lián)系

  在 《FlexSPI外設(shè)的LUT機(jī)制》 和 《DTR模式下Dummy Cycle設(shè)置》 兩篇文章里有詳細(xì)的關(guān)于 FlexSPI 外設(shè)中 Dummy Cycle 設(shè)置方法和 DQS 引腳功能配置方法介紹,但是這兩者是怎樣的聯(lián)系關(guān)系呢?

  我們在 i.MXRT 參考手冊 FlexSPI 章節(jié)可以找到如下 Hyper Bus 讀時序示意圖(對于 Octal Flash 也基本適用,僅微小區(qū)別),這張圖很清晰地闡述了 RWDS 信號與 Latency Count 的聯(lián)系,FlexSPI 外設(shè)在發(fā)起實際讀時序時一定會輸出 DUMMY_DDR 子序列里實際配置的延時周期,但如果配置的延時周期結(jié)束后,RWDS 有效信號還沒有到來,FlexSPI 會自動插入足夠的延時周期(即圖中所謂的 Additional Latency count)直到 RWDS 信號有效。

  • Note: 在 Hyper Flash 上不用 Dummy Cycle 術(shù)語,其術(shù)語是 Latency Count。

  基于這樣的設(shè)計,當(dāng)在 FlexSPI 里啟動外部 DQS 信號時,我們在 DUMMY_DDR 子序列里只要象征性地填一個比 Flash 里 Latency Count 稍小的值就行了,在一些 i.MXRT 型號上理想情況下甚至可以去除 DUMMY_DRR 子序列(即 Latency count 配 0),但切記這個值不應(yīng)配得比 Flash 里 Latency Count 大。

三、在i.MXRT1170上實測MT35XU512

  最近恩智浦 SE 團(tuán)隊做了一個基于 i.MXRT1170 的 Auto Development Platform 原型板,在 FlexSPI1 上掛的是來自 Micron 的 Octal Flash - MT35XU512,這顆 Flash 作為代碼存儲與啟動設(shè)備。我們就在這個原型板上測試一下 FlexSPI 外設(shè)的 DQS 與 Dummy Cycle 不同配置能否去正常啟動 Flash。

3.1 MT35XU512基本情況

  首先看一下這顆 Octal Flash 的基本情況,主要關(guān)注 DQS 和 Dummy Cycle 方面。Flash 內(nèi)部有 256 個 8bit 的配置寄存器(address 從 0 - 255),其中 address 0 配置寄存器用于設(shè)置 Flash 工作模式(我們需要設(shè)為 0xE7,開啟 Octal DDR 且需要 DQS),address 1 配置寄存器用于設(shè)置 Dummy Cycle(可保持初值 0x00 不變,即使用默認(rèn) Dummy Cycle 值)。

  再來看一下這顆 Octal Flash 所支持的讀命令,根據(jù)工作模式不同一共有 10 種命令,我們選用最后一條命令 4-byte DDR Octal I/O Fast Read(命令值 0xFD),這條讀命令可訪問全部 Flash 空間且性能最高,其對應(yīng)的默認(rèn) Dummy Cycle 是 16。

  默認(rèn) 16 的 Dummy Cycle 能支持多高的 Flash 工作頻率呢,在下表里可找到答案,前面我們選擇的是 DDR Octal I/O Fast Read 命令,所以對應(yīng)最高工作頻率可達(dá) 171MHz。雖然 Flash 本身可跑 200MHz DDR,但是 i.MXRT1170 FlexSPI 外設(shè)最大支持到 166MHz DDR,這就是在前面保持 Flash 中 address 1 配置寄存器值為默認(rèn) Dummy Cycle 的原因,默認(rèn) Dummy Cycle 配置已經(jīng)夠用了。

3.2 測試啟動頭FDCB

  基于上面對 Octal Flash 的認(rèn)識,我們很容易給出如下可用于啟動的 FDCB 頭,這個頭里使能了 FlexSPI 端的外部 DQS 使用(octalflash_config.memConfig.readSampleClkSrc),開啟了 Flash 端的 Octal DDR 模式(octalflash_config.memConfig.deviceModeArg),LUT 里第一條時序配置的是 0xFD 讀命令,并且 DUMMY_DDR 子序列等效配置的是 3 個 Dummy Cycle,低于 Flash 里實際 16 個 Dummy Cycle,一切都符合上文的分析,這個啟動頭在板子上實測是可以工作的。

const flexspi_nor_config_t octalflash_config = {.memConfig ={.tag = FLEXSPI_CFG_BLK_TAG,.version = FLEXSPI_CFG_BLK_VERSION,.readSampleClkSrc = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,.csHoldTime = 3,.csSetupTime = 3,.deviceModeCfgEnable = 1,.deviceModeType = kDeviceConfigCmdType_Spi2Xpi,.waitTimeCfgCommands = 1,.deviceModeSeq ={.seqNum = 1,.seqId = 6,.reserved = 0,},.deviceModeArg = 0xE7, /* Enable octal DDR mode */.controllerMiscOption =(1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DdrModeEnable),.deviceType = kFlexSpiDeviceType_SerialNOR,.sflashPadType = kSerialFlash_8Pads,.serialClkFreq = kFlexSpiSerialClk_166MHz,.sflashA1Size = 64ul * 1024u * 1024u,.busyOffset = 0u,.busyBitPolarity = 0u,.lookupTable ={/* 4-BYTE DDR OCTAL I/O FAST READ */[0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_8PAD, 0xFD, RADDR_DDR, FLEXSPI_8PAD, 0x20),// 這里 DUMMY_DDR 里填入的值是 0x6,對應(yīng) 3 個 SCK 周期的 dummy[1] = FLEXSPI_LUT_SEQ(DUMMY_DDR, FLEXSPI_8PAD, 0x6, READ_DDR, FLEXSPI_8PAD, 0x04),/* Read Status */[4 * 1 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04),/* Write Enable */[4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP_EXE, FLEXSPI_1PAD, 0x00),/* Enable Octal DDR mode */[4 * 6 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, CMD_SDR, FLEXSPI_1PAD, 0x00),[4 * 6 + 1] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x00, CMD_SDR, FLEXSPI_1PAD, 0x00),[4 * 6 + 2] = FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x01, STOP_EXE, FLEXSPI_1PAD, 0x00),},},.pageSize = 256u,.sectorSize = 4u * 1024u,.serialNorType = 0x2,.blockSize = 128u * 1024u,.isUniformBlockSize = false, };

  現(xiàn)在我們做多一些實驗,修改上述啟動頭里的 readSampleClkSrc、serialClkFreq 和 DUMMY_DDR 子序列值,其余配置保持不變,測試結(jié)果如下。這個結(jié)果基本是符合第二小節(jié)里關(guān)于DQS和Dummy Cycle聯(lián)系關(guān)系的總結(jié)的。

readSampleClkSrcserialClkFreqlookupTable[1]中DUMMY_DDR數(shù)值
注:DDR下2N值對應(yīng)Flash里N個dummy cycleFlash啟動情況
LoopbackFromDqsPad30MHz - 100MHz0x20正常啟動
30MHz - 100MHz非 0x20無法啟動
大于 100MHz0x20無法啟動
ExternalInputFromDqsPad30MHz無,0x1 - 0x23正常啟動
30MHz大于 0x23無法啟動
166MHz0x2 - 0x25正常啟動
166MHz無,0x1,大于 0x25無法啟動

  至此,Octal或Hyper Flash上DQS信號與Dummy Cycle聯(lián)系痞子衡便介紹完畢了,掌聲在哪里~~~

歡迎訂閱

文章會同時發(fā)布到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機(jī)上第一時間看了哦。

總結(jié)

以上是生活随笔為你收集整理的痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。