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

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

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

介紹一下i.MXRT1170上用于保護(hù)片內(nèi)OCRAM1,2的MECC64功能

痞子衡嵌入式 ? 來(lái)源:痞子衡嵌入式 ? 作者:痞子衡 ? 2023-12-29 16:11 ? 次閱讀

今天痞子衡給大家分享的是i.MXRT1170 MECC64功能特點(diǎn)及其保護(hù)片內(nèi)OCRAM1,2之道。

ECC是 “Error Correcting Code” 的簡(jiǎn)寫,ECC 能夠?qū)崿F(xiàn)錯(cuò)誤檢查和糾正,含有 ECC 功能的內(nèi)存一般稱為 ECC 內(nèi)存,使用了 ECC 內(nèi)存的系統(tǒng)在穩(wěn)定性和可靠性上得到很大提升。相比前幾代不帶 ECC 的 i.MXRT10xx 型號(hào),新一代 i.MXRT1170 在ECC上做了全面武裝,從 eFuse 到 FlexRAM,從 OCRAM 到外部存儲(chǔ)空間全都加上了 ECC 功能。如下表所示,不同類型的存儲(chǔ)由不同的 ECC 控制器來(lái)守護(hù):

c0e5ad76-a621-11ee-8b88-92fbcf53809c.png

今天痞子衡給大家簡(jiǎn)單介紹一下 i.MXRT1170 上用于保護(hù)片內(nèi) OCRAM1,2 的 MECC64 功能:

一、MECC64功能簡(jiǎn)介

1.1 MECC64特點(diǎn)

從用戶角度來(lái)說(shuō),其實(shí) MECC64 的設(shè)計(jì)特別簡(jiǎn)單,當(dāng) MECC64 使能后,任何對(duì)受保護(hù)的 OCRAM1/2 發(fā)起的 AXI 訪問都會(huì)被 MECC64 模塊接管,MECC64 組件負(fù)責(zé)根據(jù)用戶寫入的數(shù)據(jù)產(chǎn)生 ECC 校驗(yàn)值并將其存放于專用 OCRAM1/2_ECC 里,讀訪問時(shí)根據(jù)用戶讀取的地址從相應(yīng) OCRAM1/2_ECC 地址處獲取 ECC 檢驗(yàn)值并做檢驗(yàn)處理后再返回?cái)?shù)據(jù)。

從模塊框圖里看一個(gè) MECC64 里有四個(gè) ECC 校驗(yàn)流程(也對(duì)應(yīng)四個(gè) RAM Bank 控制器),這其實(shí)是跟單個(gè) 512KB OCRAM 由四個(gè) 128KB Bank 組成一一對(duì)應(yīng)的,這樣便于轉(zhuǎn)化 AXI64 接口到 RAM 接口。

1. OCRAM 四個(gè) Bank 掛載在 AXI64 系統(tǒng)總線上,AXI[1:0] 決定了訪問得是 Bank0-3,這樣的設(shè)計(jì)可以支持對(duì)不同 Bank 的讀、寫操作同時(shí)進(jìn)行。
2. ECC 計(jì)算單元是 64bits,這 64bits 數(shù)據(jù)必須在同一 Bank 里,這個(gè)設(shè)計(jì)對(duì) ECC 初始化操作影響較大,因此避免用 memset 函數(shù)去做初始化(STR指令是 byte access)。
c0f4c2f2-a621-11ee-8b88-92fbcf53809c.png

MECC64 模塊一共有兩個(gè),分別是 MECC1、MECC2,分別對(duì)應(yīng)保護(hù) OCRAM1、OCRAM2。此外還有兩個(gè)專用 OCRAM1_ECC、 OCRAM2_ECC 存放 ECC 校驗(yàn)值(當(dāng) MECC64 沒使能時(shí),OCRAM1/2_ECC 也可當(dāng)作普通 OCRAM 使用)。

MECC1 base address: 4001_4000h
MECC2 base address: 4001_8000h

1.2 關(guān)于MECC64設(shè)計(jì)細(xì)節(jié)

關(guān)于 MECC64 基本概念,參看《簡(jiǎn)析i.MXRT1170 Cortex-M7 FlexRAM ECC功能特點(diǎn)、開啟步驟、性能影響》 的 1.2節(jié),這里不予贅述。

1.2.1 MECC64檢驗(yàn)?zāi)芰?/p>

MECC64 中每 64bits 數(shù)據(jù)就會(huì)計(jì)算出一個(gè) ECC 校驗(yàn)值(8bits),ECC 算法用得是經(jīng)典的 Hsiao Hamming。

存儲(chǔ)類型 ECC校驗(yàn)數(shù)據(jù)塊大小 ECC校驗(yàn)值長(zhǎng)度 ECC校驗(yàn)?zāi)芰?/th>
Raw NAND 512 bytes 4 bytes 5-bit檢錯(cuò),4-bit糾錯(cuò)
MECC64 64bits 8bits 2-bit檢錯(cuò),1-bit糾錯(cuò)

1.2.2 ECC錯(cuò)誤觸發(fā)處理

ECC 錯(cuò)誤分兩種,分別是 1-bit 錯(cuò)誤和 2-bit 錯(cuò)誤(針對(duì) 64bits 數(shù)據(jù)而言)。從軟件層面來(lái)看,1-bit 錯(cuò)誤可以不用管,MECC64 模塊會(huì)自動(dòng)糾錯(cuò)。我們主要處理 2-bit 錯(cuò)誤,由于 2-bit 錯(cuò)誤僅能檢錯(cuò),無(wú)法糾錯(cuò),所以發(fā)生了這個(gè)錯(cuò)誤,就意味著讀取的數(shù)據(jù)不可靠了。對(duì)于 1/2 bit錯(cuò)誤,MECC64 均提供了中斷響應(yīng)(MECCx_INT_IRQn / MECCx_FATAL_INT_IRQn)。

這里還需要特別提醒一下,當(dāng)讀訪問是 64bits 時(shí),發(fā)生 ECC 錯(cuò)誤僅產(chǎn)生一次 ECC 中斷,但是如果是 32/16/8bits 讀訪問則會(huì)連續(xù)產(chǎn)生兩次 ECC 中斷,因?yàn)?ECC 校驗(yàn)總是以 64bits 為基本數(shù)據(jù)單元。

二、開啟MECC64的步驟

2.1 激活MECC64特性

芯片出廠,默認(rèn)是沒有激活 MECC64 特性的,如果需要開啟 MECC64,需要燒寫 efuse,fusemap 中 0x840[2] 對(duì)應(yīng)的是 MECC_ENABLE bit,我們需要將這個(gè) bit 燒寫成 1,才能激活 MECC64 特性。

c10a8cf4-a621-11ee-8b88-92fbcf53809c.png

2.2 SDK驅(qū)動(dòng)初始化MECC64

然后可以直接利用 SDK 里的 fsl_mecc 驅(qū)動(dòng)對(duì) MECC64 模塊進(jìn)行初始化,代碼非常簡(jiǎn)單,如下示例代碼就是初始化 MECC1,使能 OCRAM1 區(qū)域的讀寫 ECC 功能:

#include"fsl_mecc.h"

voidinit_mecc(void)
{
mecc_config_tconfig;
MECC_GetDefaultConfig(&config);

//使能MECC64,并且指明受保護(hù)的OCRAM空間
config.enableMecc=true;
config.Ocram1StartAddress=0x20240000;
config.Ocram1EndAddress=0x202BFFFF;

//初始化MECC64模塊,并且初始化OCRAM區(qū)域?yàn)槿?
MECC_Init(MECC1,&config);
}

進(jìn) MECC_Init() 函數(shù)內(nèi)部可以看到其對(duì) OCRAM 區(qū)域的初始化用得是 64bits 賦值,這樣可以保證正確生成首次 ECC 校驗(yàn)值,等 OCRAM 區(qū)域全部初始化過(guò)后,底下就可以對(duì) OCRAM 進(jìn)行任意數(shù)據(jù)長(zhǎng)度的訪問了。

c1153348-a621-11ee-8b88-92fbcf53809c.png

2.3 AXI方式讀寫OCRAM區(qū)域

現(xiàn)在我們直接調(diào)試 SDK_2_14_0_MIMXRT1170-EVKBoardsevkbmimxrt1170driver_examplesmeccmecc_single_errorcm7iar 工程,跑到 MECC 初始化結(jié)束后,打開 Memory 窗口,可以看到 OCRAM1 區(qū)域(0x20240000 - 0x202BFFFF) 已經(jīng)是全 0,OCRAM1_ECC 區(qū)域(0x20340000 - 0x2034FFFF)也是全 0。但是往 0x20240020 處寫入 8 字節(jié)測(cè)試數(shù)據(jù)后,并沒有看到 OCRAM1_ECC 區(qū)域有數(shù)據(jù)上的變化,說(shuō)明 ECC 校驗(yàn)碼數(shù)據(jù)是受保護(hù)的,僅能被 MECC64 模塊訪問,對(duì)用戶不可見。

c126aef2-a621-11ee-8b88-92fbcf53809c.png

三、激活MECC64特性后的影響

前面講到 fusemap 中 0x840[2] 對(duì)應(yīng)的是 MECC_ENABLE bit,這個(gè) bit 被燒錄為 1 后,我們還需要初始化 MECC64 模塊里(打開MECC->PIPE_ECC_EN[ECC_EN])才能真正開啟 OCRAM ECC 功能,但是別忘了芯片參考手冊(cè)里 MECC64 章節(jié)有一個(gè)提醒:

c1325e64-a621-11ee-8b88-92fbcf53809c.png

是的,BootROM 上電運(yùn)行,第一件事就是檢查 fuse MECC_ENABLE bit 位,如果已經(jīng)置 1,那就立刻開啟 MECC1 和 MECC2 模塊的 PIPE_ECC_EN[ECC_EN],即啟用 OCRAM ECC,但是 BootROM 并沒有初始化全部 OCRAM1 和 OCRAM2 區(qū)域,僅僅初始化了 OCRAM1 前 48KB,這部分是 BootROM 程序的 RW 區(qū)。

c140ba4a-a621-11ee-8b88-92fbcf53809c.png

痞子衡找了兩塊 RT1170 板卡做了對(duì)比測(cè)試(芯片設(shè)為 Serial Downloader模式,掛上 JLink 讀取內(nèi)存),未激活 MECC64 特性的芯片 OCRAM 區(qū)域讀取出來(lái)全是隨機(jī)值,而激活了 MECC64 特性的芯片僅 ROM RW 區(qū)被初始化了以及 OCRAMx_ECC 不可訪問外,其余區(qū)域全是隨機(jī)值(這里的讀取其實(shí)不太可靠,畢竟使能了 ECC 后首次訪問必須是寫,然后才能正常被讀寫)。

c1446988-a621-11ee-8b88-92fbcf53809c.png

對(duì)于激活了 MECC64 特性之后的芯片,無(wú)論是設(shè)計(jì)下載算法還是 IDE 里的初始化腳本,或者 App 應(yīng)用里的變量訪問,如果涉及到 ROM RW 區(qū)之外的 OCRAM1,OCRAM2 區(qū)域,建議一律做先寫后讀處理,否則可能會(huì)出現(xiàn)奇怪的錯(cuò)誤。

至此,i.MXRT1170 MECC64功能特點(diǎn)及其保護(hù)片內(nèi)OCRAM1,2之道痞子衡便介紹完畢了,掌聲在哪里~~~







審核編輯:劉清

聲明:本文內(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)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    15885

    瀏覽量

    175370
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1344

    瀏覽量

    114215
  • ECC
    ECC
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    20471

原文標(biāo)題:MECC64給i.MXRT1170片內(nèi)OCRAM帶來(lái)了哪些變化?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i.MXRT1170 的時(shí)鐘架構(gòu)

    目前 i.MXRT1xxx 系列主要分為 i.MX RT10xx 和 i.MXRT11xx 兩大分支。這兩個(gè)分支的時(shí)鐘系統(tǒng)設(shè)計(jì)是有些差異的,不過(guò)總體來(lái)說(shuō),架構(gòu)差別不大,我們以如下
    發(fā)表于 07-08 17:05 ?959次閱讀

    i.MXRT1170的相關(guān)資料分享

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的劃時(shí)代新品i.MXRT1170。  自2017年開始,每年的6月25日恩智浦都會(huì)在北京舉行
    發(fā)表于 11-04 08:38

    i.MXRT1170 eFuse空間訪問可靠性的保護(hù)策略是什么

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MXRT1170的eFuse空間訪問可靠性保護(hù)策略?! £P(guān)于i.MXRT系列的eFuse/OTP,痞子衡之
    發(fā)表于 12-20 07:56

    i.MXRT1010, 1170型號(hào)樣的SNVS GPR寄存器讀寫控制設(shè)計(jì)資料分享

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1010, 1170型號(hào)樣的SNVS GPR寄存器讀寫
    發(fā)表于 02-07 07:49

    求助,如何在沒有互聯(lián)網(wǎng)的情況通過(guò)以太網(wǎng)電纜將個(gè)簡(jiǎn)單的十六進(jìn)制數(shù)從I.MXRT1170板發(fā)送到PC?

    我有I.MXRT1170 板。我是這個(gè)板的新手,我想通過(guò)以太網(wǎng)電纜向我的 PC 發(fā)送個(gè)簡(jiǎn)單的十六進(jìn)制數(shù)字,如 0x12345678 或任何東西。任何人都可以通過(guò)告訴我如何去做以及我可以如何做
    發(fā)表于 03-17 07:20

    如何在IMXRT1170 CM7處理器啟用OCRAM MECC?

    我正在使用集成 IMX 的 TQ 的 STKa117xL 板。RT1170 處理器系列。我想在 OCRAM1OCRAM2 啟用漢明糾錯(cuò) (ECC)。處理器參考手冊(cè)表明這是
    發(fā)表于 03-23 07:19

    s32k144evb如何與i.MXRT通信?

    你好呀,我正在為 EV Cluster 設(shè)計(jì)個(gè)項(xiàng)目。我計(jì)劃將數(shù)據(jù)從 #S32K144EVB# 發(fā)送到 #i.MXRT1170# 以在我的顯示器 #RK055HDMIPI4MAO# 顯示它。我
    發(fā)表于 03-29 07:49

    如何確保 i.MXRT1176 從低功耗模式快速恢復(fù)?

    我們有個(gè)關(guān)于 i.MXRT1176 從低功耗模式恢復(fù)緩慢的問題引導(dǎo) ROM 似乎停留在地址 0x223104,大約 15 秒。這似乎是 i.MXRT1170 上調(diào)試安全設(shè)計(jì)的部分,
    發(fā)表于 04-06 07:17

    J-Link工具i.MXRT的串行NOR Flash下載算法設(shè)計(jì)

    本 Release Note 看,痞子衡目前的 J-Link 版本不支持全部 i.MXRT 型號(hào),那么如果想要支持新芯片(比如 i.MXRT1170),是不是定要重新安裝最新 J-
    的頭像 發(fā)表于 12-08 10:07 ?941次閱讀

    痞子衡嵌入式:終于可以放開聊i.MXRT1170這顆劃時(shí)代MCU了

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的劃時(shí)代新品i.MXRT1170?! ∽?017年開始,每年的6月25日恩智浦都會(huì)在北京舉行
    發(fā)表于 10-29 10:21 ?2次下載
    痞子衡嵌入式:終于可以放開聊<b class='flag-5'>一</b>聊<b class='flag-5'>i.MXRT1170</b>這顆劃時(shí)代MCU了

    "痞子衡嵌入式:i.MXRT1010, 1170型號(hào)樣的SNVS GPR寄存器讀寫控制設(shè)計(jì)"

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1010 1170型號(hào)樣的SNVS GPR寄存器讀寫控
    發(fā)表于 12-04 11:36 ?0次下載
    "痞子衡嵌入式:<b class='flag-5'>i.MXRT</b>1010, <b class='flag-5'>1170</b>型號(hào)<b class='flag-5'>上</b>不<b class='flag-5'>一</b>樣的SNVS GPR寄存器讀寫控制設(shè)計(jì)"

    i.MXRT1170串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

    i.MXRT10xx 樣,這里要聊的還是在一片掛載在 FlexSPI 的串行 NOR Flash 里做冗余/雙程序設(shè)計(jì),就是下圖中的 image L 和 image H,不涉及
    的頭像 發(fā)表于 04-29 15:23 ?967次閱讀

    MCU時(shí)鐘相關(guān)功能引腳作用介紹

    目前 i.MXRT1xxx 系列主要分為 i.MXRT10xx 和 i.MXRT11xx 兩大分支。這兩個(gè)分支的時(shí)鐘系統(tǒng)設(shè)計(jì)是有些差異的,不過(guò)總體來(lái)說(shuō),架構(gòu)差別不大,我們以如下
    的頭像 發(fā)表于 07-07 09:27 ?5287次閱讀

    i.MXRT1060和RT1170使用高效神經(jīng)網(wǎng)絡(luò)進(jìn)行多人檢測(cè)

    電子發(fā)燒友網(wǎng)站提供《在i.MXRT1060和RT1170使用高效神經(jīng)網(wǎng)絡(luò)進(jìn)行多人檢測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 08-17 10:46 ?0次下載
    在<b class='flag-5'>i.MXRT</b>1060和RT<b class='flag-5'>1170</b><b class='flag-5'>上</b>使用高效神經(jīng)網(wǎng)絡(luò)進(jìn)行多人檢測(cè)

    不同J-Link版本對(duì)于i.MXRT1170連接復(fù)位后處理行為

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是不同J-Link版本對(duì)于i.MXRT1170連接復(fù)位后處理行為。
    的頭像 發(fā)表于 08-08 15:29 ?237次閱讀
    不同J-Link版本對(duì)于<b class='flag-5'>i.MXRT1170</b>連接復(fù)位后處理行為