国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 正文
    • 一、RT1024/1064片內(nèi)Flash連接差異
    • 二、不處理片內(nèi)Flash RESET#信號(hào)帶來(lái)的風(fēng)險(xiǎn)
    • 三、解決RESET#信號(hào)穩(wěn)定性的方案
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

有時(shí)候MCU片內(nèi)合封Flash就是個(gè)黑盒子!

05/12 12:10
675
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1064片內(nèi)Flash的RESET#引腳對(duì)程序啟動(dòng)和運(yùn)行的影響。

上一篇文章?《i.MXRT1024/1064片內(nèi)4MB Flash的SFDP表易丟失導(dǎo)致的燒錄異?!?痞子衡帶大家初步了解了 i.MXRT 上片內(nèi)合封的 4MB Flash,合封 Flash 方式一般來(lái)說(shuō)比外掛方式要省事省心,但前提是你充分了解了它的合封方式、信號(hào)連接等細(xì)節(jié)。如果對(duì)這些細(xì)節(jié)沒(méi)有完全掌握,合封就像是一個(gè)黑盒子,還真不一定就比外掛可靠。

近期另有一個(gè) RT1064 客戶反饋,產(chǎn)品在運(yùn)行過(guò)程中會(huì)發(fā)生極小概率的宕機(jī),分析發(fā)現(xiàn)宕機(jī)時(shí)(不斷電情況下)內(nèi)部 Flash 讀回的程序數(shù)據(jù)竟然全是 0x00,看起來(lái) Flash 內(nèi)容被篡改了,但是重新上電又能正常工作,這是怎么回事?今天痞子衡就和大家聊聊這個(gè)話題:

    Note:本文所述問(wèn)題僅在 RT1064 上發(fā)生,不存在于 RT1024 上。

一、RT1024/1064片內(nèi)Flash連接差異

1.1 W25Q32JV不同封裝

我們知道 RT1024/RT1064 內(nèi)部合封得是 Winbond W25Q32JV 裸 Die,而 W25Q32JV 作為單獨(dú)產(chǎn)品售賣(mài)時(shí)實(shí)際上提供了非常多的封裝形式,這其中我們最熟悉得是經(jīng)典的 8 個(gè)引腳的 SOIC-8 208-mil 封裝。

從 W25Q32JV 裸 Die 本身角度來(lái)說(shuō),其一共有 9 個(gè)信號(hào)線,在 SOIC-8 上將本該單獨(dú)引出的 RESET# 信號(hào)復(fù)用到了 IO3 上(雖然這個(gè)腳本身還有一個(gè) HOLD# 復(fù)用),而在 SOIC-16 或者 TFBGA-24 上我們就能看到這個(gè)單獨(dú)的 RESET# 信號(hào)了:

1.2 RT1024片內(nèi)RESET#連接

在 RT1024 上,內(nèi)部 Flash 的 RESET# 信號(hào)保留懸空(或其它處理),并沒(méi)有和 RT1020 之間有信號(hào)連接,這里 GPIO_AD_B1_13 被著重強(qiáng)調(diào),是因?yàn)?RT1024 BootROM 會(huì)根據(jù) efuse 配置情況控制這個(gè) I/O 來(lái)復(fù)位 Flash(顯然這里是無(wú)效的)。

1.3 RT1064片內(nèi)RESET#連接

在 RT1064 上,內(nèi)部 Flash 的 RESET# 信號(hào)被連接到了 RT1060 內(nèi)部信號(hào) GPIO_SPI_B0_13 上,當(dāng)然 RT1064 BootROM 也會(huì)根據(jù) efuse 配置情況控制這個(gè) I/O 來(lái)復(fù)位 Flash(這時(shí)就會(huì)產(chǎn)生一定作用)。

二、不處理片內(nèi)Flash RESET#信號(hào)帶來(lái)的風(fēng)險(xiǎn)

在痞子衡舊文?《深入i.MXRT系列ROM中串行NOR Flash啟動(dòng)初始化流程》?一文?2.1 復(fù)位Flash芯片?小節(jié)里,我們知道如果 efuse 里 RESET# 相關(guān) bit 被燒寫(xiě)使能后,RT1064 BootROM 才會(huì)初始化 GPIO_SPI_B0_13 引腳為 GPIO 輸出模式,并且拉低拉高一次來(lái)復(fù)位 Flash,等復(fù)位結(jié)束 GPIO_SPI_B0_13 會(huì)保持高電平輸出。

// RT1064 上 RESET# 相關(guān)的 fuse
fuse 0x6e0[7] ?- FLEXSPI_RESET_PIN_EN
? ? ? ? 0 - Disable
? ? ? ? 1 - Enable

fuse 0x6e0[31] - FLEXSPI_RESET_PIN_SEL
? ? ? ? 0 - GPIO_SPI_B0_00
? ? ? ? 1 - GPIO_SPI_B0_13

但是默認(rèn)情況下,RT1064 芯片出廠以及客戶都不會(huì)去燒寫(xiě)跟這個(gè) RESET# 相關(guān)的 efuse,這意味著 GPIO_SPI_B0_13 內(nèi)部引腳會(huì)一直保持上電默認(rèn)狀態(tài),那么默認(rèn)是什么狀態(tài)呢?這從 IOMUXC_SW_PAD_CTL_PAD_GPIO_SPI_B0_13 寄存器默認(rèn)值 0x10B0 可以得知其為輸入 Keeper 狀態(tài)。

我們知道 RESET# 信號(hào)對(duì) Flash 來(lái)說(shuō)也是輸入(從 Winbond 技術(shù)人員處得知,該信號(hào)內(nèi)部有 280K 歐姆上拉),兩個(gè)引腳相連,各自都是輸入狀態(tài),顯然有點(diǎn)不太可靠。說(shuō)一種極端情況,芯片上電過(guò)程中,在 Flash 端弱上拉對(duì) RESET# 作用讓電壓爬升到有效高電平 VCC x 0.7 之前,RT1060 的 GPIO_SPI_B0_13 端輸入 Keeper 狀態(tài)先產(chǎn)生作用,這時(shí)就會(huì)產(chǎn)生一個(gè)弱下拉,由于不同芯片的器件特性差異,這里的弱上拉/下拉都存在一定的誤差范圍,最終極有可能導(dǎo)致 RESET# 電平處于中間不定態(tài)。此外哪怕芯片上電過(guò)程中沒(méi)問(wèn)題,實(shí)際運(yùn)行中,由于片內(nèi)溫度電磁環(huán)境等各方面因素,導(dǎo)致 RESET# 信號(hào)發(fā)生翻轉(zhuǎn),對(duì) XIP 程序運(yùn)行穩(wěn)定性也是毀滅性打擊。

三、解決RESET#信號(hào)穩(wěn)定性的方案

為了驗(yàn)證 GPIO_SPI_B0_13 信號(hào)狀態(tài)對(duì)于 RT1064 影響,痞子衡在測(cè)試 SFDP 工程里加上了這個(gè)信號(hào)的控制,當(dāng) GPIO_SPI_B0_13 輸出為低時(shí),即 Flash RESET# 處于有效狀態(tài),此時(shí) Flash SFDP 都不能正常讀出,更別提內(nèi)存數(shù)據(jù)讀取操作了。

    燒錄SFDP工程:https://github.com/JayHeng/func-imxrt-sip-flash-sfdp-check

那么該如何解決這個(gè)問(wèn)題呢?上述原理知道后,其實(shí)方法就特別簡(jiǎn)單了:

    解決啟動(dòng)問(wèn)題:燒寫(xiě) fuse 0x6e0[31,7] 兩個(gè)位,讓 BootROM 去初始化 GPIO_SPI_B0_13 引腳。(大約增加 750us 啟動(dòng)時(shí)間)解決跑飛問(wèn)題:假如芯片沒(méi)有啟動(dòng)問(wèn)題,但你不想額外燒寫(xiě) fuse,那么 XIP App 運(yùn)行起來(lái)后第一件事就是初始化 GPIO_SPI_B0_13 為 GPIO 輸出模式,并且設(shè)為高電平。(為了可靠性,這部分代碼可以 RAMFUNC 運(yùn)行)

至此,不處理i.MXRT1064片內(nèi)Flash的RESET#引腳可能會(huì)導(dǎo)致無(wú)法啟動(dòng)或程序跑飛痞子衡便介紹完畢了,掌聲在哪里~~~

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門(mén),擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會(huì)定期分享嵌入式相關(guān)文章

晋宁县| 临潭县| 高阳县| 兴海县| 临夏市| 理塘县| 沐川县| 民乐县| 宣武区| 麟游县| 宝丰县| 巨野县| 安化县| 大宁县| 清涧县| 东乌珠穆沁旗| 崇礼县| 中阳县| 临漳县| 北流市| 连云港市| 锦屏县| 白玉县| 开阳县| 衡山县| 年辖:市辖区| 忻州市| 阿瓦提县| 定兴县| 韶关市| 桐梓县| 郴州市| 大渡口区| 禹城市| 台北县| 修文县| 长治市| 白水县| 沂南县| 曲阳县| 交城县|