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

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

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

3天內不再提示

缺失DQS信號的FlexSPI連接Flash有何不同?

冬至子 ? 來源:痞子衡嵌入式 ? 作者:痞子衡 ? 2023-06-02 17:53 ? 次閱讀

一、FlexSPI的DQS信號作用

文章中沒有提及四線 QSPI Flash,因為一般的四線 QSPI Flash 芯片并沒有 DQS 信號引腳。FlexSPI 模塊的 DQS 信號當然可以用來連接 Octal Flash、Hyper Flash 上的 DQS 引腳,那么對于四線 QSPI Flash,這個 DQS 信號就沒有作用了嗎?其實不是的。

我們翻開 i.MXRT1170 的數據手冊(Data Sheet)找到 FlexSPI parameters 小節里的如下內容,就很清楚了。FlexSPIn_MCR0[RXCLKSRC] 位對應了三種 DQS 信號源設置:0x0 - Dummy read strobe looped back internally 設置即完全不用 DQS 引腳(可作它用),對應最高 60MHz SDR 訪問速度;0x1 - Dummy read strobe looped back through the DQS pad 設置即從 DQS 引腳上回環,因此 DQS 引腳需要懸空,對應最高 133MHz SDR 訪問速度;0x3 - Read strobe from memory device DQS pad 設置即接到存儲芯片 DQS 引腳上,對應最高 166MHz SDR 訪問速度;

? Dummy read strobe generated by FlexSPI controller and looped back internally (FlexSPIn_MCR0[RXCLKSRC] = 0x0)
? Dummy read strobe generated by FlexSPI controller and looped back through the DQS pad (FlexSPIn_MCR0[RXCLKSRC] = 0x1)
? Read strobe provided by memory device and input from DQS pad (FlexSPIn_MCR0[RXCLKSRC] = 0x3)

圖片

圖片

二、哪些FlexSPI引腳組不支持DQS?

目前恩智浦已量產的所有 i.MXRT 型號里(RT500/600/1010/1015/1020/1050/1060/1160/1170),大部分的 FlexSPI 引腳組合都是包含 DQS 信號設計的,只有如下兩個例外。沒有 DQS 信號的引腳組合連 Flash 時,應配置 FlexSPIn_MCR0[RXCLKSRC] 為 0x0 - looped back internally。

2.1 i.MXRT600 FlexSPI0 PortB

2.2 i.MXRT1160/1170 FlexSPI2 2nd PortA

三、使能沒有DQS的FlexSPI連接的Flash

對于不含 DQS 信號的 FlexSPI 引腳組合,使用恩智浦相關工具操作連接在其上的 NOR Flash 是需要做一些改動的,我們以 i.MXRT1170-Validation 板卡為例來介紹具體改動。

i.MXRT1170-Validation 板卡是專供恩智浦內部使用的,分為 CPU1/2/3/4 四款,每款的硬件連接不同,其中 CPU2 板卡在 FlexSPI2 2nd PortA 上連接了一顆鎂光的 MT25QL128:

圖片

圖片

3.1 SDK中FlexSPI擦寫Flash例程改動

我們現在打開 SDK 里的 FlexSPI 例程,這個例程是針對 MIMXRT1170-EVK 板卡寫的,在 EVK 上 NOR Flash 默認是連在 FlexSPI1 1st PortA 上的,因此我們需要對例程做一些改動。

例程路徑:\\SDK_2.x.x_MIMXRT1170-EVK\\boards\\evkmimxrt1170\\driver_examples\\flexspi\\nor\\polling_transfer\\cm7

首當其沖的改動當然是 pin_mux.c 文件里的 BOARD_InitPins() 函數,需要將 FlexSPI1 1st Pinmux 換成 FlexSPI2 2nd Pinmux:

void BOARD_InitPins(void) 
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);

    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_05_FLEXSPI1_A_DQS, 1U);
    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_06_FLEXSPI1_A_SS0_B, 1U;
    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_07_FLEXSPI1_A_SCLK, 1U);
    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_08_FLEXSPI1_A_DATA00, 1U);
    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_09_FLEXSPI1_A_DATA01, 1U);
    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_10_FLEXSPI1_A_DATA02, 1U);
    //IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B2_11_FLEXSPI1_A_DATA03, 1U);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_05_FLEXSPI1_A_DQS, 0x0AU);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_06_FLEXSPI1_A_SS0_B, 0x0AU);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_07_FLEXSPI1_A_SCLK, 0x0AU);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_08_FLEXSPI1_A_DATA00, 0x0AU);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_09_FLEXSPI1_A_DATA01, 0x0AU);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_10_FLEXSPI1_A_DATA02, 0x0AU);
    //IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B2_11_FLEXSPI1_A_DATA03, 0x0AU);
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B1_00_FLEXSPI2_A_SS0_B, 1U;
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B1_01_FLEXSPI2_A_SCLK, 1U);
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B1_02_FLEXSPI2_A_DATA00, 1U);
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B1_03_FLEXSPI2_A_DATA01, 1U);
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B1_04_FLEXSPI2_A_DATA02, 1U);
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B1_05_FLEXSPI2_A_DATA03, 1U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_00_FLEXSPI2_A_SS0_B, 0x0AU);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_01_FLEXSPI2_A_SCLK, 0x0AU);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_02_FLEXSPI2_A_DATA00, 0x0AU);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_03_FLEXSPI2_A_DATA01, 0x0AU);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_04_FLEXSPI2_A_DATA02, 0x0AU);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_05_FLEXSPI2_A_DATA03, 0x0AU);
}

然后再改一下 app.h 文件里的宏定義,從 FlexSPI1 換到 FlexSPI2,并相應調整 Flash 屬性(EVK 上是 IS25WP128,Validation 板上是 MT25QL128),以及更新 flexspi_clock_init() 函數:

//#define EXAMPLE_FLEXSPI FLEXSPI1
//#define EXAMPLE_FLEXSPI_AMBA_BASE FlexSPI1_AMBA_BASE
//#define EXAMPLE_FLEXSPI_CLOCK kCLOCK_Flexspi1
#define EXAMPLE_FLEXSPI FLEXSPI2
#define EXAMPLE_FLEXSPI_AMBA_BASE FlexSPI2_AMBA_BASE
#define EXAMPLE_FLEXSPI_CLOCK kCLOCK_Flexspi2

static inline void flexspi_clock_init(void)
{
    // 在 BOARD_BootClockRUN() 函數里給 FlexSPI 設置的時鐘源是 OSC_RC_48M_DIV2 / 2 即 12MHz
    // 這里沒有再次分頻,因此 FlexSPI root clock 就是 12MHz
    //CLOCK_SetRootClockDiv(kCLOCK_Root_Flexspi1, 2);
    //CLOCK_SetRootClockMux(kCLOCK_Root_Flexspi1, 0);
    CLOCK_SetRootClockDiv(kCLOCK_Root_Flexspi2, 2);
    CLOCK_SetRootClockMux(kCLOCK_Root_Flexspi2, 0);
}

上面都是大家能意識到的改動,但其實最容易被忽略的改動是 flexspi_nor_flash_ops.c 文件里的 flexspi_nor_flash_init() 函數,config.rxSampleClock 設置必須要改成 kFLEXSPI_ReadSampleClkLoopbackInternally 才行。代碼全部改完之后下載運行就可以正常擦寫 Flash 了。

void flexspi_nor_flash_init(FLEXSPI_Type *base)
{
    // 省略部分代碼 ...

    flexspi_clock_init();

    flexspi_config_t config;
    FLEXSPI_GetDefaultConfig(&config);

    config.ahbConfig.enableAHBPrefetch    = true;
    config.ahbConfig.enableAHBBufferable  = true;
    config.ahbConfig.enableReadAddressOpt = true;
    config.ahbConfig.enableAHBCachable    = true;
    //config.rxSampleClock                  = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;
    config.rxSampleClock                  = kFLEXSPI_ReadSampleClkLoopbackInternally;
    FLEXSPI_Init(base, &config);

    // 省略部分代碼 ...
}

3.2 SDK中Flashloader工程使用

現在我們再來用一下 SDK 里的 flashloader 工程,這個應用程序可以與恩智浦專用命令行上位機 blhost.exe 進行交互,工程需要用調試器下載進主芯片內部 RAM 運行

工程路徑:\\SDK_2.x.x_MIMXRT1170-EVK\\boards\\evkmimxrt1170\\bootloader_examples\\flashloader\\cm7

flashloader 運行起來之后,使用 blhost 工具按序執行下列命令,也一樣能對 Flash 進行擦寫:

blhost -u -- get-property 1

# 選中 FlexSPI2
blhost -u -- fill-memory 0x20000000 4 0xcf900002
blhost -u -- configure-memory 9 0x20000000

# 配置 NOR Flash(forced internal DQS)
blhost -u -- fill-memory 0x20000000 4 0xc1000053  # 其中bit[7:4]是關鍵設置!!!
blhost -u -- fill-memory 0x20000004 4 0x00110000
blhost -u -- configure-memory 9 0x20000000
blhost -u -- get-property 25 9

# 下載包含 IVT 頭的 App
blhost -u -- flash-erase-region 0x60000000 0x8000
blhost -u -- fill-memory 0x20000000 4 0xf000000f
blhost -u -- configure-memory 9 0x20000000
blhost -u -- write-memory 0x60001000 ivt_app.bin

上面命令序列里第二條 fill-memory 命令的參數 0xc1000053 是關鍵,從 flashloader 源代碼里看它其實是在設置 serial_nor_config_option_t.option0.B.misc_mode 為 kSerialNorEnhanceMode_InternalLoopback,這個設置對于四線 QSPI Flash 而言就是設 config->memConfig.readSampleClkSrc 為 kFlexSPIReadSampleClk_LoopbackInternally:

enum
{
    kSerialNorEnhanceMode_Disabled = 0,
    kSerialNorEnhanceMode_0_4_4_Mode = 1,
    kSerialNorEnhanceMode_0_8_8_Mode = 2,
    kSerialNorEnhanceMode_DataOrderSwapped = 3,
    kSerialNorEnhanceMode_2ndPinMux = 4,
    kSerialNorEnhanceMode_InternalLoopback = 5,
};

status_t parse_sfdp(uint32_t instance,
                    flexspi_nor_config_t *config,
                    jedec_info_table_t *tbl,
                    serial_nor_config_option_t *option)
{
    status_t status = kStatus_InvalidArgument;
    do
    {
        // 省略部分代碼...
        uint8_t misc_mode = option- >option0.B.misc_mode;
        if (misc_mode == kSerialNorEnhanceMode_Disabled)
        {
            // 省略部分代碼...
        }
#if FLEXSPI_ENABLE_NO_CMD_MODE_SUPPORT
        else if (misc_mode == kSerialNorEnhanceMode_0_4_4_Mode)
        {
            // 省略部分代碼...
        }
#endif // FLEXSPI_ENABLE_NO_CMD_MODE_SUPPORT
        else if (misc_mode == kSerialNorEnhanceMode_InternalLoopback)
        {
            config- >memConfig.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackInternally;
        }
        else
        {
            // Do nothing
        }
        // 省略部分代碼...
    } while (0);
    return status;
}

3.3 下載工具MCUBootUtility配置

flashloader 的使用對一般客戶來說太復雜了,還是圖形化工具 MCUBootUtility 更方便,打開這個工具,按如下配置(主要就是圖中藍框圈起來的 Misc Mode 設置),也可以正常擦寫 Flash。熟悉這個工具原理的朋友應該知道它底層依賴得就是 3.2 節里的 flashloader 與 blhost。

圖片

3.4 SDK例程里的FDCB啟動頭改動

最后就是 SDK 里全部例程的 XIP build 都需要一個 FDCB 頭,這個頭定義在 evkmimxrt1170_flexspi_nor_config.c 文件里,這里也要改一下 readSampleClkSrc 和 serialClkFreq 配置才行。

const flexspi_nor_config_t qspiflash_config = {
    .memConfig =
        {
            .tag              = FLEXSPI_CFG_BLK_TAG,
            .version          = FLEXSPI_CFG_BLK_VERSION,
            //.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
            .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackInternally,
            .csHoldTime       = 3u,
            .csSetupTime      = 3u,
            .controllerMiscOption = 0x10,
            .deviceType           = kFlexSpiDeviceType_SerialNOR,
            .sflashPadType        = kSerialFlash_4Pads,
            //.serialClkFreq        = kFlexSpiSerialClk_133MHz,
            .serialClkFreq        = kFlexSpiSerialClk_60MHz,
            .sflashA1Size         = 16u * 1024u * 1024u,
            .lookupTable =
                {
                    // Read LUTs
                    FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
                    FLEXSPI_LUT_SEQ(MODE8_SDR, FLEXSPI_4PAD, 0x00, DUMMY_SDR, FLEXSPI_4PAD, 0x04),
                    FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_4PAD, 0x04, 0, 0, 0),
                },
        },
    .pageSize           = 256u,
    .sectorSize         = 4u * 1024u,
    .ipcmdSerialClkFreq = 0x1,
    .blockSize          = 256u * 1024u,
    .isUniformBlockSize = false,
};
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1368

    瀏覽量

    114645
  • 調試器
    +關注

    關注

    1

    文章

    303

    瀏覽量

    23716
  • Flash存儲
    +關注

    關注

    0

    文章

    38

    瀏覽量

    8288
  • QSPI接口
    +關注

    關注

    0

    文章

    14

    瀏覽量

    3343
收藏 人收藏

    評論

    相關推薦

    Vitex-6如何延遲dqs 3 ns

    嗨, 我正在為我的設計添加一個NAND閃存。閃存芯片支持源同步接口,可提供高達166MB / s的帶寬。但是當我從閃存中讀取DDR數據時。 DQS信號從閃存芯片傳輸到我的FPGA器件,以及與DQS
    發表于 03-29 14:03

    NOR Flash與NAND Flash何不

    Flash的原理是什么?Flash主要有哪幾種?NOR Flash與NAND Flash何不
    發表于 10-22 08:47

    FlexSPIDQS信號作用是什么?哪些FlexSPI引腳組不支持DQS

    FlexSPIDQS信號作用是什么?哪些FlexSPI引腳組不支持DQS
    發表于 01-19 07:06

    啟用FLEXSPI NOR Flash調試的教程

    如何啟用FLEXSPI NOR Flash的調試
    發表于 12-12 06:13

    Hyperflash設備的不同FlexSPI數據信號順序是怎樣的?

    和 Hyperflash 之間的連接中,A_DATAx跡線與B_DATAx跡線交換。換句話說,我們以下場景:A_DATA0 與 B_DATA0 交換A_DATA1 與 B_DATA1 交換A_DATA2
    發表于 03-20 06:42

    imxrt1170中flexspi如何使用AHB操作?

    一個 imxrt1170 板,想使用 flexspi1(連接到 fpga)。我想在 flexspi1 上使用 AHB 總線操作,但是當我訪問 BASE_ADDR(0x3000000
    發表于 03-27 08:16

    求助,可以忽略FlexSPI DQS嗎?

    DQS 線用于讀寫數據選通。我一直在看一些 FlexSPI 示例:-sdk_flexspi_nor_polling_transferpolling_transfer_hyperRAM 在這
    發表于 03-29 07:34

    調試器因FlexSPI Nor Flash指令失敗的原因?如何解決?

    嘗試執行函數 flexspi_nor_flash_init(...) ,調試器就會斷開連接并顯示:我一種感覺,它與一些時鐘配置有關,但不知道從這里去哪里出現問題的代碼片段:int main(void
    發表于 03-29 08:05

    啟動后需要使用RT1052中的DQS引腳進行I2C,要怎么操作?

    FlexSPIDQS (數據選通),即使我不需要或不想使用引腳。硬件場景如下:單個 IS25WP064A-JBLE 連接,沒有 DQS(數據選通),只有內部 RAM(沒有外部
    發表于 04-10 08:41

    如何設法將固件直接下載到連接flexspi PORT B的閃存?

    大家好, 我們一塊定制板,W25Q128JV 連接FLEXSPI 端口 B,我無法讓 MCUXpresso/Keil 直接將固件下載到閃存,我可以確認下載算法是正確的,因為相同的算法適用于
    發表于 05-04 08:44

    MXRT1050 FlexSPI有沒有辦法支持超過16個flash命令的NOR Flash設備?

    flash 命令的 NOR Flash 設備? 2. 有沒有辦法在沒有 LUT 的情況下使用 FlexSPI 模塊?-----
    發表于 05-08 06:52

    i.MXRT117x - FlexSPI1和FlexSPI2能否以133MHz的全時鐘速度運行?

    ,我們無法讓 FlexSPI2 以 133MHz 的全時鐘速度運行。如果這是可能的,我們還沒有想出如何去做。我們只能以半時鐘頻率運行 FlexSPI2。GPIO_EMC_B2_12 上的 DQS 引腳是否配置為
    發表于 05-23 06:31

    FlexSPI NOR連接方式大全(RT1015/1020/1050)

    由于i.MXRT內部沒有非易失性存儲器,因此在系統設計時為i.MXRT搭配一塊存放應用程序代碼的存儲器是頭等大事。i.MXRT支持啟動的外部存儲器類型眾多,其中通過FlexSPI接口連接串行NOR Flash是首選。
    發表于 02-09 11:26 ?1次下載
    <b class='flag-5'>FlexSPI</b> NOR<b class='flag-5'>連接</b>方式大全(RT1015/1020/1050)

    I.MXRT1170從FLEXSPI2啟動

    設計將使用FlexSPI1 接外部的 HyperRAM,FlexSPI2 接QSPI Flash存儲器芯片作為RT1176 引導設備。當代碼在內部RAM里面執行的時候是正常的,遇到了從外部Fl
    的頭像 發表于 12-01 15:06 ?1390次閱讀

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

    前段時間客戶在官方社區反映i.MX RT1170下,使用官方SDK里FlexSPI驅動去擦寫Flash時不能很好地支持全局中斷。 客戶項目里用了兩塊NOR Flash,分別掛在
    的頭像 發表于 02-06 15:09 ?1252次閱讀
    主站蜘蛛池模板: WWW国产精品内射熟女| 无人区乱码区1卡2卡三卡在线| 欧美午夜免费观看福利片| 男女午夜性爽快免费视频不卡| 十分钟视频影院免费| 又黄又湿免费高清视频| 嘟嘟嘟WWW在线观看视频高清 | 国产亚洲精品精华液| 久久综合一个色综合网| 四虎一级片| 亚洲成年男人的天堂网| 果冻传媒色AV国产播放| 伊人影院中文字幕| 欧美高清69vivo| 国产精品成人不卡在线观看| 亚洲人成色777777老人头| 麻豆精品2021最新| 草b是什么感觉| 性欧美xxxxporn| 老女老肥熟国产在线视频| 草草久久久无码国产专区全集观看| 天天色天天综合网| 久久操韩国自偷拍| gogo免费在线观看| 午夜福利体验试看120秒| 久久久96人妻无码精品蜜桃| sm主人调教揉花蒂H| 性肥胖BWBWBW| 毛片手机在线观看| 国产 亚洲 中文字幕 久久网| 亚洲精品色情APP在线下载观看| 美女全光末满18勿进| 国产成人精品综合久久久| 亚洲在线无码免费观看| 欧美日韩一区二区三区四区| 国产人成高清在线视频99| 最近中文字幕2018MV高清在线| 日产精品高潮呻吟AV久久| 精品无人区麻豆乱码无限制| xxxx18动漫| 亚洲人成电影网站色2017|