女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

如何在MCXN947板的FlexSPI接口接HyperRAM

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2025-06-04 09:39 ? 次閱讀

概述

MCXN947芯片是一款高度集成的微控制器,具有強大的處理能力、豐富的外設支持和高級安全特性,適用于多種復雜應用。其中有個非常重要的外設為FlexSPI。

FlexSPI是一種可擴展的串行外設接口,主要用于連接固態存儲設備,如QuadSPI NOR Flash、QuadSPI NAND Flash、HyperRAM等。FlexSPI是一種全面的、靈活的、高性能的解決方案,可以配置成不同的模式以適應不同的存儲設備。

NXP FRDM-MCXN947板是一款基于MCXN947設備的低成本設計與評估板。NXP為MCXN947設備提供了包括硬件評估板、軟件開發集成開發環境(IDE)、示例應用程序和驅動程序在內的工具和軟件支持。該板FlexSPI接口默認接了一塊MT35XU512 NOR Flash。

11ec6052-3c2b-11f0-b715-92fbcf53809c.png

在本文中,我們將探討如何在MCXN947板的FlexSPI接口接HyperRAM。

硬件環境:

開發板:FRDM-MCXN947

HyperRAM:W956D8MBYA

軟件環境:

IDE:MCUXpresso IDE v11.9.0

SDK:SDK Builder | MCUXpresso SDKBuilder (nxp.com)

HyperRAM原理圖

以下是官方FRDM-MCXN947中的八線Flash的原理圖,由于W956D8MBYA的HyperRAM的封裝都為TFBGA 24-Ball 5 x 5 Array,所以可以直接進行替換。

1213d966-3c2b-11f0-b715-92fbcf53809c.png

根據以上原理圖,總結出HyperRAM存儲器的信號連接方式見表:

12231c00-3c2b-11f0-b715-92fbcf53809c.png

HyperRAM配置流程

3.1 時鐘配置

FlexSPI的時鐘需要正確配置。

123e2928-3c2b-11f0-b715-92fbcf53809c.png

我們在調試程序的階段還是保險地選擇低一點的頻率,這里選擇75MHz。

3.2 FlexSPI初始化配置結構體詳解

接下來是FlexSPI相關配置,我們可以調用FLEXSPI_GetDefaultConfig獲取一些針對FlexSPI特性結構體flexspi_config_t的一些默認配置,這個默認配置具有一定的普遍性,能兼容大部分的FlexSPI設備,對于該W956D8MBYA 的HyperRAM,在默認配置的基礎上,增加如下幾個參數:

config.ahbConfig.enableAHBPrefetch = true;

config.ahbConfig.enableAHBBufferable = true;

config.ahbConfig.enableReadAddressOpt= true;

config.ahbConfig.enableAHBCachable = true;

config.rxSampleClock= kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;

(1)enableAHBPrefetch:是否使能AHB預讀取特性,當使能時,FlexSPI會讀取比當前AHB突發讀取更多的數據。

(2)enableAHBBufferable :是否使能AHB寫緩沖訪問,在執行寫命令后,不等待其執行完畢就返回,允許后續指令繼續執行,提高系統的并發性。

(3)enableReadAddressOpt:控制是否移除AHB讀取突發起始地址對齊限制,若使能,突發讀取地址沒有字節對齊限制。

(4)enableAHBCachable:使能AHB總線緩存讀取,若命中則從緩存中讀取,但要確保數據的一致性

(5)rxSampleClock:讀數據使用的時鐘源,對于HyperRAM來說,HyperRAM提供讀選通脈沖并從DQS引腳輸入。

3.3 FlexSPI外部設備配置結構體詳解

FlexSPI與外部設備通訊時常常需要與設備協調通訊的時序,如時鐘頻率、數據有效時間等內容,NXP軟件庫提供了結構體類型flexspi_device_config_t專門用于配置這些參數。

typedef struct _flexspi_device_config


{


uint32_t flexspiRootClk;


bool isSck2Enabled;


uint32_t flashSize;


flexspi_cs_interval_cycle_unit_t CSIntervalUnit;


uint16_t CSInterval;


uint8_t CSHoldTime;


uint8_t CSSetupTime;


uint8_t dataValidTime;


uint8_t columnspace;


bool enableWordAddress;


uint8_t AWRSeqIndex;


uint8_t AWRSeqNumber;


uint8_t ARDSeqIndex;


uint8_t ARDSeqNumber;


flexspi_ahb_write_wait_unit_t AHBWriteWaitUnit;


uint16_t AHBWriteWaitInterval;


bool enableWriteMask;


} flexspi_device_config_t;

(1) flexspiRootClk = 75000000,此參數與前面設置的FlexSPI的時鐘頻率一致。

(2) flashSize = 0x2000, Flash的大小,以KB為單位。對于W956D8MBYA,64Mb = 8MB = 8 *1024KB。

(3) CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle,此參數用于配置CS信號線間隔的時間單位。

(4) CSInterval = 2,此參數用于配置CS信號線有效與無效切換的最小時間間隔,單位為上面CSIntervalUnit成員的配置。

(5) CSHoldTime = 3,此參數用于設定CS信號線的保持時間,單位為FlexSPI根時鐘周期。

(6) CSSetupTime=3,此參數用于設定CS信號線的建立時間,單位為FlexSPI根時鐘周期。

124f3740-3c2b-11f0-b715-92fbcf53809c.png

1259eafa-3c2b-11f0-b715-92fbcf53809c.png

根據MCXNx4x datasheet,= 6ns,最小的= 8.3ns,最小的= 9.8ns。時鐘為75M的周期時間大約是13.3ns。故CSHoldTime和CSSetupTime大于等于1即可,均配置成3。

(7) dataValidTime=2,寄存器DLLACR和DLLBCR,本成員用于配置通訊中的數據有效時間,單位為納秒。

(8) columnspace = 3,低位列地址寬度,對于這個HyperRAM來說,是用行列進行尋址的,這里列地址的寬度為3位。

1279d766-3c2b-11f0-b715-92fbcf53809c.png

(9) enableWordAddress = true,配置是否使能2字節可尋址功能,使能后會以16位的數據格式對HyperRAM進行訪問。

(10) AWRSeqIndex = 1,對應寫的時序序列在LUT中的索引

(11) AWRSeqNumber =1,此參數配置AHB寫命令的序列數目。

(12) ARDSeqIndex = 0,對應讀的時序序列在LUT中的索引。

(13) ARDSeqNumber =1,此參數配置AHB讀命令的序列數目。

(14) enableWriteMask = true,此參數用于設置FlexSPI寫外部設備時是否使能驅動DQS位作為掩碼,這種功能在訪問數據寬度為16位時用于地址對齊。

3.4 LUT表格配置

下面是HyperRAM 讀和寫的時序LUT表格的代碼示例,

const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {


/* Read Data */


   [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR,kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),


   [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR,kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07),


   [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR,kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),


   /* Write data */


   [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR,kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),


   [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR,kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07),


   [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR,kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00),






};

(1) 我們使用的是8線差分的HyperRAM,在時鐘的雙邊沿都采樣,所以與外部存儲器通信時用的數據線的個數均為kFLEXSPI_8PAD。

(2) HyperRAM和HyperFlash是基于Cypress Semiconductor的HyperBus接口規范設計的存儲器產品,這個operand是在該規范中定義的,所以讀操作operand固定為0xA0,寫數據的operand固定為0x20。

1279d766-3c2b-11f0-b715-92fbcf53809c.png

(3) CADDR_DDR列地址,由于一次傳輸的字節一定是8的倍數,如果你傳的行列地址大于特定大小的HyperRAM最大的行和列,FlexSPI會自動將高位置0。

上表中顯示低16位是列地址,有效位有3位,高13位是預留兼容的列地址位,需要置0。所以這里列地址的時序參數需要填16,即0x10。

12a946cc-3c2b-11f0-b715-92fbcf53809c.png

(4) RADDR_DDR行地址,如圖所示,如果 FLSHxxCR1[CAS] 位不為 0 ,那么 FlexSPI 外設在傳輸時序里會拆分實際映射 Flash Address (即存儲器自身偏移地址) 為行地址 FA[31:CAS] 和列地址 [CAS-1:1] 來分別傳輸。對于字可尋址閃存設備,不需要地址的最后一位,因為閃存是按照兩個字節讀取和編程的。Flexspi 一個字為兩個字節,所有需要如果2個字節對齊,就需要少一位地址。行列地址加一起少一位。W956D8MBYA有64Mbit,即2^26,列地址還有3位,所以理論上行地址需要傳輸26-1-3=22位,即可尋址整個HyperRAM。然后向8位對齊,不然FlexSPI會在低位補0,就不是我們要訪問的地址了。所以參數為0x18,即24位。

實驗驗證 我們可以利用簡單的AHB讀寫來驗證此HyperRAM是否可以工作。

代碼如下:

for (i = 0; i < sizeof(s_psram_write_buffer); i++)


{


s_psram_write_buffer[i] = i;


}


memcpy((uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE), s_psram_write_buffer, sizeof(s_psram_write_buffer));


memcpy(s_psram_read_buffer,(uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE) , sizeof(s_psram_read_buffer));


if (memcmp(s_psram_read_buffer, s_psram_write_buffer,sizeof(s_psram_write_buffer)) == 0)


{


      PRINTF("AHB Command Read/Write data successfully !
");


}

當你的串口打印出"AHB Command Read/Write data successfully!"

證明你的FlexSPI接HyperRAM現在可以正常工作啦!

作者:Hang Zhang

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

    關注

    48

    文章

    7906

    瀏覽量

    153701
  • NXP
    NXP
    +關注

    關注

    61

    文章

    1332

    瀏覽量

    187451
  • 接口
    +關注

    關注

    33

    文章

    8943

    瀏覽量

    153202
  • HyperRAM
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1617

原文標題:MCX N947:FlexSPI接HyperRAM分析和配置

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    恩智浦MCU MCXN947 基于MCUXpresso Config tools創建IIC的教程步驟

    MCXN947是NXP推出的高性能微控制器,支持豐富的通信接口,如I2C。借助MCUXpresso Config Tools,開發者可快速配置I2C外設,生成初始化代碼。該工具提供圖形化界面,簡化
    的頭像 發表于 05-22 09:40 ?781次閱讀
    恩智浦MCU <b class='flag-5'>MCXN947</b> 基于MCUXpresso Config tools創建IIC的教程步驟

    FRDM-MCXN947的純Linux命令行環境搭建

    =\'sudo /mnt/MyNAS/walker/.bin/JLink/JLinkExe -autoconnect 1 -device MCXN947 -if swd -speed
    發表于 07-28 22:55

    關于將Flash寫入FRDM-MCXN947的問題求解

    這次我想問一個關于使用 MCXN947 將 Flash 寫入另一個的問題。 我嘗試使用 FRDM-MCXN947 的寫入方法作為參考寫入此,但發生了錯誤。 下面是當時控制臺的內容。
    發表于 03-17 06:29

    使用FRDM-MXCN947,在MCUXpresso IDE中調試期間嘗試從下載寫入QSPI閃存出現報錯的原因?

    我正在使用 FRDM-MXCN947 ,并在 MCUXpresso IDE 中調試期間嘗試從下載寫入 QSPI 閃存,但出現以下錯誤。 閃存驅動程序使用 MCXN9xx_SFDP_FlexSPI.cfx。 我需要修改驅動
    發表于 03-17 07:13

    MCXN947使用ADC并編寫代碼,總是報警告是怎么回事?

    我使用 MCXN947,我想使用 ADC 并編寫代碼,但警告總是發生。然后我創建了一個新項目進行調試,它仍然發生了。 我試著打掃,但還是沒用。 警告:無法將 \'main\' 從主機編碼 (CP1252) 轉換為 UTF-32。 這通常不會發生,請提交 bug 報告。
    發表于 03-20 08:17

    MCXN947如何配置和外擴PSRAM?

    mcxn947自帶的ram太小了,無法滿足需求,想外擴一塊psram,比如樂鑫的esp-psram64芯片,這個需求有哪個案例可以參考嗎?
    發表于 03-31 06:54

    MCXN947怎么驅動FRDM-STBI-A8974三軸陀螺儀?

    MCXN947怎么驅動FRDM-STBI-A8974三軸陀螺儀
    發表于 04-14 10:50

    何在HyperRAM中讀/寫?

    flexspi 接口。該最初配備了 hyperFLASH,但經過修改以接受組合芯片。 不幸的是,我不知道如何讓芯片正常工作。我可以從 hyperflash 訪問和啟動,但想知道如何在
    發表于 05-31 13:22

    FlexSPI1 ISSI HyperRAM初始化問題求解

    HYPERRAM_CMD_LUT_SEQ_IDX_READREG 2 #define HYPERRAM_CMD_LUT_SEQ_IDX_WRITEREG 3 flexspi_device_config_t devicecon
    發表于 06-09 08:29

    I.MXRT1170從FLEXSPI2啟動

    設計將使用FlexSPI1 外部的 HyperRAMFlexSPI2 QSPI Flash存儲器芯片作為RT1176 引導設備。當代碼
    的頭像 發表于 12-01 15:06 ?1655次閱讀

    恩智浦MCX系列MCU的新品MCXN947

    鑒于 N54x 是 N94x 的簡配版,我們今天主要聊 MCXN947 這個型號。老規矩先來看一下 MCXN947 內部模塊框圖,它搭載了兩個 Arm Cortex-M33 內核,主頻可達 150MHz,此外還為 CM33 配備了 DSP 協處理器(PowerQuad)。
    的頭像 發表于 12-21 12:57 ?2306次閱讀

    《恩智浦FRDM-MCXN947開發實踐指南》上線啦

    RT-Thread率先支持NXPFRDM-MCXN947,并聯合恩智浦半導體推出了NXPFRDM-MCXN947開發評測活動。測評活動順利完成,并且有了不錯的產出,我們將大家的測試文檔及代碼整理后
    的頭像 發表于 05-13 18:19 ?1332次閱讀
    《恩智浦FRDM-<b class='flag-5'>MCXN947</b>開發實踐指南》上線啦

    使用VSCode調試FRDM MCXN947開發

    想必關注MCXN947系列MCU的朋友們已經知道板載MCXN947的FRDM開發已經正式和大家見面了。
    的頭像 發表于 05-16 11:16 ?1112次閱讀
    使用VSCode調試FRDM <b class='flag-5'>MCXN947</b>開發<b class='flag-5'>板</b>

    MCXN947系列高性能微控制器產品介紹

    基于Arm? Cortex?-M33的雙核邊緣人工智能新品MCXN947系列,搭配功能強大且完全開源的AWTK GUI框架,可輕松令產品方案實現成本與性能的完美平衡。
    的頭像 發表于 08-06 16:14 ?1653次閱讀
    <b class='flag-5'>MCXN947</b>系列高性能微控制器產品介紹

    使用NXP MCX-N板卡搭建環境及點燈

    FRDM-MCXN947開發是一個基于MCXN947器件的低成本設計的評估MCXN947器件將兩個Arm Cortex-M33微控制
    的頭像 發表于 02-12 09:07 ?584次閱讀
    使用NXP MCX-N板卡搭建環境及點燈