国产电影一区二区三区,,欧美大片免费观看,伊人久久大香线蕉av,国产日韩成人内射视频

有時候MCU片內合封Flash就是個黑盒子!

大家好,我(wo)是痞子衡,是正經搞技術的痞子。今(jin)天(tian)痞子衡給(gei)大家介(jie)紹的是i.MXRT1064片內Flash的RESET#引(yin)腳對程序啟動和(he)運行的影響

上一篇文章 《i.MXRT1024/1064片內4MB Flash的SFDP表易丟失導致的燒錄異常》 痞子衡帶大家初步了解了 i.MXRT 上片內合封的 4MB Flash,合封 Flash 方式一般來說比外掛方式要省事省心,但前提是你充分了解了它的合封方式、信號連接等細節。如果對這些細節沒有完全掌握,合封就像是一個黑盒子,還真不一定就比外掛可靠。

近期另有一個 RT1064 客戶(hu)反饋,產品在(zai)運行過程中會發生極小概(gai)率的宕機,分析(xi)發現(xian)宕機時(不(bu)斷電情況下(xia))內(nei)部 Flash 讀回的程序數據竟(jing)然(ran)全是(shi) 0x00,看起來 Flash 內(nei)容被篡(cuan)改了,但是(shi)重新(xin)上電又能(neng)正(zheng)常工作(zuo),這(zhe)是(shi)怎(zen)么回事(shi)?今天痞子衡就和大家聊聊這(zhe)個話題:

  • Note:本文所述問題僅在 RT1064 上(shang)(shang)發生,不(bu)存在于(yu) RT1024 上(shang)(shang)。

一、RT1024/1064片(pian)內Flash連接差異

1.1 W25Q32JV不同(tong)封裝(zhuang)

我們(men)知道(dao) RT1024/RT1064 內部合封(feng)得(de)是(shi) Winbond W25Q32JV 裸 Die,而 W25Q32JV 作為單(dan)獨產品售賣時實際上提供了非常多的(de)(de)封(feng)裝(zhuang)(zhuang)形式(shi),這其中我們(men)最(zui)熟悉得(de)是(shi)經典的(de)(de) 8 個引(yin)腳的(de)(de) SOIC-8 208-mil 封(feng)裝(zhuang)(zhuang)。

從 W25Q32JV 裸 Die 本身角度來說,其一共有 9 個信(xin)(xin)(xin)號線,在(zai) SOIC-8 上(shang)將本該(gai)單獨(du)引出的 RESET# 信(xin)(xin)(xin)號復用(yong)到了 IO3 上(shang)(雖(sui)然(ran)這(zhe)(zhe)個腳(jiao)本身還有一個 HOLD# 復用(yong)),而在(zai) SOIC-16 或者 TFBGA-24 上(shang)我們就能看到這(zhe)(zhe)個單獨(du)的 RESET# 信(xin)(xin)(xin)號了:

1.2 RT1024片內RESET#連接

在 RT1024 上,內(nei)部 Flash 的 RESET# 信號保留懸空(或(huo)其它處理),并沒有(you)和(he) RT1020 之間有(you)信號連接,這里 GPIO_AD_B1_13 被(bei)著(zhu)重強調,是因為 RT1024 BootROM 會(hui)根據(ju) efuse 配置情況控(kong)制這個 I/O 來復位 Flash(顯然(ran)這里是無(wu)效的)。

1.3 RT1064片內(nei)RESET#連接(jie)

在 RT1064 上,內部(bu)(bu) Flash 的 RESET# 信號被連接到(dao)了 RT1060 內部(bu)(bu)信號 GPIO_SPI_B0_13 上,當(dang)然 RT1064 BootROM 也會根據 efuse 配置情況控制這個 I/O 來復位 Flash(這時就會產生一定作用(yong))。

二(er)、不處理片(pian)內(nei)Flash RESET#信號帶來的風險

在痞子衡舊文 《深入i.MXRT系列ROM中串行NOR Flash啟動初始化流程》 一文 2.1 復(fu)位Flash芯(xin)片 小節里(li),我們(men)知(zhi)道(dao)如果 efuse 里(li) RESET# 相關 bit 被燒寫使能后,RT1064 BootROM 才會初始化 GPIO_SPI_B0_13 引腳為 GPIO 輸(shu)出模式,并且拉低拉高(gao)一次來復位 Flash,等復位結束 GPIO_SPI_B0_13 會保持(chi)高(gao)電平輸(shu)出。

// RT1064 上 RESET# 相關的 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

但是(shi)默認情況下,RT1064 芯片出廠以(yi)及客(ke)戶(hu)都不會去燒寫(xie)跟這個 RESET# 相關的(de) efuse,這意味著 GPIO_SPI_B0_13 內(nei)部引腳會一(yi)直保(bao)持上電(dian)默認狀態,那(nei)么默認是(shi)什么狀態呢?這從 IOMUXC_SW_PAD_CTL_PAD_GPIO_SPI_B0_13 寄存器默認值 0x10B0 可以(yi)得(de)知其為輸入 Keeper 狀態。

我們知道 RESET# 信(xin)號(hao)對(dui) Flash 來說(shuo)也是輸入(從 Winbond 技術人員處得知,該信(xin)號(hao)內部有 280K 歐(ou)姆上(shang)拉(la)),兩(liang)個引腳(jiao)相連,各自都(dou)是輸入狀態(tai)(tai)(tai),顯(xian)然(ran)有點不(bu)太可(ke)靠(kao)。說(shuo)一種極端情況,芯片(pian)(pian)上(shang)電(dian)(dian)(dian)(dian)過程中(zhong)(zhong)(zhong),在(zai) Flash 端弱(ruo)(ruo)上(shang)拉(la)對(dui) RESET# 作(zuo)用(yong)讓電(dian)(dian)(dian)(dian)壓爬升到有效高電(dian)(dian)(dian)(dian)平 VCC x 0.7 之前,RT1060 的 GPIO_SPI_B0_13 端輸入 Keeper 狀態(tai)(tai)(tai)先產(chan)生(sheng)作(zuo)用(yong),這時(shi)就會產(chan)生(sheng)一個弱(ruo)(ruo)下拉(la),由于(yu)不(bu)同芯片(pian)(pian)的器件(jian)特性差異,這里的弱(ruo)(ruo)上(shang)拉(la)/下拉(la)都(dou)存在(zai)一定(ding)的誤差范圍,最終極有可(ke)能導致 RESET# 電(dian)(dian)(dian)(dian)平處于(yu)中(zhong)(zhong)(zhong)間不(bu)定(ding)態(tai)(tai)(tai)。此外哪怕芯片(pian)(pian)上(shang)電(dian)(dian)(dian)(dian)過程中(zhong)(zhong)(zhong)沒(mei)問題,實際運行(xing)中(zhong)(zhong)(zhong),由于(yu)片(pian)(pian)內溫(wen)度電(dian)(dian)(dian)(dian)磁(ci)環境(jing)等各方(fang)面因(yin)素,導致 RESET# 信(xin)號(hao)發生(sheng)翻轉,對(dui) XIP 程序運行(xing)穩定(ding)性也是毀滅(mie)性打擊。

三(san)、解決(jue)RESET#信號(hao)穩定(ding)性(xing)的方案

為(wei)了驗證 GPIO_SPI_B0_13 信號狀(zhuang)態對于 RT1064 影響,痞(pi)子(zi)衡(heng)在測試 SFDP 工程里加上了這個信號的控制,當(dang) GPIO_SPI_B0_13 輸出(chu)為(wei)低時(shi),即 Flash RESET# 處于有效(xiao)狀(zhuang)態,此(ci)時(shi) Flash SFDP 都(dou)不能正常讀(du)出(chu),更別(bie)提內(nei)存數據(ju)讀(du)取操作了。

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

那么(me)該(gai)如何解決這個問題呢?上述原理知道后,其實方法就特別簡單了:

解決啟(qi)動(dong)問題:燒寫 fuse 0x6e0[31,7] 兩個位(wei),讓 BootROM 去初(chu)始(shi)化 GPIO_SPI_B0_13 引腳(jiao)。(大約增加 750us 啟(qi)動(dong)時(shi)間(jian))

解決跑飛問題:假(jia)如芯片沒有啟動問題,但你不想額外燒寫(xie) fuse,那么(me) XIP App 運(yun)行(xing)(xing)起(qi)來后第一(yi)件事就是初始化(hua) GPIO_SPI_B0_13 為 GPIO 輸出模式(shi),并且設為高電平(ping)。(為了可(ke)靠性,這部分代碼可(ke)以(yi) RAMFUNC 運(yun)行(xing)(xing))

至此,不處理i.MXRT1064片內Flash的RESET#引腳可(ke)能(neng)會導(dao)致無法(fa)啟(qi)動或(huo)程序跑飛(fei)痞子衡便介紹完畢了,掌聲在(zai)哪里~~~

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關注 41
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧