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

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

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

關(guān)于Segger J-Flash在Micron Flash固定區(qū)域下載校驗(yàn)失敗的故事

痞子衡嵌入式 ? 來(lái)源:痞子衡嵌入式 ? 作者:痞子衡 ? 2022-10-31 11:02 ? 次閱讀

痞子衡最近在支持一個(gè) i.MXRT1170 歐美客戶,客戶項(xiàng)目里選用了來(lái)自 Micron 的四線 NOR Flash - MT25QL256ABA8E12-0AAT 作為啟動(dòng)設(shè)備,一般讀寫(xiě)倒是沒(méi)有問(wèn)題,但是在 Segger J-Flash 下燒寫(xiě)遇到了特定區(qū)域內(nèi)校驗(yàn)失敗的問(wèn)題。

從痞子衡過(guò)往豐富的 Flash 支持經(jīng)驗(yàn)來(lái)看,亞太區(qū)客戶一般選用 ISSI(芯成)/Winbond(華邦)/MXIC(旺宏)/GigaDevices(兆易創(chuàng)新) 的 Flash 比較多,痞子衡對(duì)這些廠商 Flash 可以說(shuō)是門(mén)清了。這個(gè)歐美客戶選用的是痞子衡不太熟的 Micron(鎂光) 產(chǎn)品,借著這個(gè)問(wèn)題,痞子衡帶大家一起稍微深入地了解下 Micron Flash 產(chǎn)品:

一、引出客戶問(wèn)題

首先是復(fù)現(xiàn)下客戶的問(wèn)題,痞子衡找了塊 MIMXRT1170-EVK 開(kāi)發(fā)板,將板載其他廠商 Flash 換成這顆 MT25QL256ABA8E12-0AAT(因?yàn)槭?T-PBGA24 封裝,所以需要放到原來(lái)的 OctalFlash 位置 - U21),然后將 SDK_2.11.1_MIMXRT1170-EVKoardsevkmimxrt1170driver_examplesflexspi orpolling_transfer 例程稍作適配性修改,主要是將 customLUT 里的命令表按 Micron 數(shù)據(jù)手冊(cè)命令表做調(diào)整(全用了四字節(jié)地址命令),然后跑了一下例程發(fā)現(xiàn)基本的 Flash 讀寫(xiě)擦操作沒(méi)有問(wèn)題(默認(rèn)操作的是 0x14000 處的 Sector),這表明硬件修改沒(méi)有問(wèn)題。

constuint32_tcustomLUT[CUSTOM_LUT_LENGTH]={
/*Fastreadquadmode-SDR*/
[4*NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD]=
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR,kFLEXSPI_1PAD,0xEC,kFLEXSPI_Command_RADDR_SDR,kFLEXSPI_4PAD,0x20),
[4*NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD+1]=
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DUMMY_SDR,kFLEXSPI_4PAD,0x0a,kFLEXSPI_Command_READ_SDR,kFLEXSPI_4PAD,0x04),

/*EraseSector*/
[4*NOR_CMD_LUT_SEQ_IDX_ERASESECTOR]=
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR,kFLEXSPI_1PAD,0xDC,kFLEXSPI_Command_RADDR_SDR,kFLEXSPI_1PAD,0x20),

/*PageProgram-quadmode*/
[4*NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD]=
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR,kFLEXSPI_1PAD,0x34,kFLEXSPI_Command_RADDR_SDR,kFLEXSPI_1PAD,0x20),
[4*NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD+1]=
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR,kFLEXSPI_4PAD,0x04,kFLEXSPI_Command_STOP,kFLEXSPI_1PAD,0x00),
};

接下來(lái)就是按客戶操作流程來(lái)復(fù)現(xiàn) Segger J-Flash 燒寫(xiě)校驗(yàn)失敗問(wèn)題,客戶其實(shí)是嘗試燒寫(xiě)全部 32MB 數(shù)據(jù)來(lái)查看 J-Flash 及其配套下載算法能否適用這顆 Flash,這里痞子衡就用 《超級(jí)下載算法RT-UFL v1.0》,經(jīng)過(guò)測(cè)試,確實(shí)復(fù)現(xiàn)了客戶的問(wèn)題。

經(jīng)過(guò)反復(fù)測(cè)試,定位了問(wèn)題是這顆 Micron 32MB 的 Flash 前 3/4 區(qū)域(0x0 - 0x17FFFFF)是沒(méi)問(wèn)題的,但是在后 1/4 區(qū)域(0x1800000 - 1FFFFFF)均會(huì)出現(xiàn)校驗(yàn)錯(cuò)誤(J-Flash軟件里看擦寫(xiě)操作是能進(jìn)行的,但后面發(fā)現(xiàn)其實(shí)根本沒(méi)有正常擦寫(xiě))。

6212c498-5783-11ed-a3b6-dac502259ad0.png

二、Micron QuadSPI NOR Flash有什么不同?

在分析客戶問(wèn)題之前,我們先來(lái)簡(jiǎn)單認(rèn)識(shí)一下這顆 Micron NOR Flash,痞子衡瀏覽了 Micron 的官網(wǎng)以及這顆 Flash 的數(shù)據(jù)手冊(cè),發(fā)現(xiàn)它確實(shí)跟其他廠商的 NOR Flash 設(shè)計(jì)有點(diǎn)區(qū)別。

首先是 Flash 容量,其他廠商一般都是能夠提供從 512Kb 到 2Gb 全范圍的 Flash 產(chǎn)品,但是 Micron 串行 NOR Flash 最小容量就是 128Mb,果然是國(guó)際 Memory 大廠,設(shè)計(jì)就是豪橫。但是從 Flash 作為 XIP 啟動(dòng)設(shè)備角度而言,128Mb 其實(shí)挺多的,普通的嵌入式項(xiàng)目沒(méi)有這么大的代碼存儲(chǔ)需求。

62a7172e-5783-11ed-a3b6-dac502259ad0.png

其次是 NOR Flash 里的高頻問(wèn)題 《QE bit 設(shè)計(jì)》,一般 Flash 的 IO2/3 引腳復(fù)用功能都是通過(guò)內(nèi)部狀態(tài)寄存器里的 QE 位來(lái)控制,QE 關(guān)閉則 IO2/3 是 RESET#/HOLD#/WP# 功能:如果 QE 開(kāi)啟則 IO2/3 用于數(shù)據(jù)傳輸(這種情況下才可以用 Quad I/O 相關(guān)命令)。

然而 Micron Flash 根本就沒(méi)有 QE 位控制,IO2/3 功能主要靠當(dāng)前命令類型來(lái)決定:如果是 Single SPI 或者 Dual I/O SPI 命令,則 IO2/3 是 RESET#/HOLD#/WP# 功能;如果是 Quad I/O SPI 命令,則 IO2/3 用于傳輸數(shù)據(jù)。

其它設(shè)計(jì)上的區(qū)別就不再詳細(xì)展開(kāi)了,等用到具體功能查看數(shù)據(jù)手冊(cè)再去了解對(duì)比。

三、找到問(wèn)題原因

現(xiàn)在來(lái)分析客戶問(wèn)題,F(xiàn)lash 后 1/4 區(qū)域在 J-Flash 下校驗(yàn)錯(cuò)誤,那我們先修改 polling_transfer 例程去操作 0x1800000 之后的 Sector,發(fā)現(xiàn)確實(shí)跑不過(guò)。如果不是 Flash 介質(zhì)問(wèn)題,也不是讀寫(xiě)擦命令問(wèn)題,那只能有一種解釋,那就是 Flash 里這個(gè)區(qū)域被保護(hù)了,F(xiàn)lash 里是有非易失寄存器可以設(shè)置軟件保護(hù)的,但是默認(rèn)應(yīng)該是全部區(qū)域不保護(hù),而第一小節(jié)里我們先跑了 polling_transfer 例程驗(yàn)證 Flash 讀寫(xiě),那大概率這個(gè)例程里有修改 Flash 內(nèi)部寄存器操作,經(jīng)過(guò)排查痞子衡定位到了 flexspi_nor_enable_quad_mode() 函數(shù)。

#defineFLASH_QUAD_ENABLE0x40U

constuint32_tcustomLUT[CUSTOM_LUT_LENGTH]={
/*EnableQuadmode*/
[4*NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG]=
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR,kFLEXSPI_1PAD,0x01,kFLEXSPI_Command_WRITE_SDR,kFLEXSPI_1PAD,0x04),
};

intmain(void)
{
//代碼省略

/*Enterquadmode.*/
status=flexspi_nor_enable_quad_mode(EXAMPLE_FLEXSPI);
if(status!=kStatus_Success)
{
returnstatus;
}

//代碼省略
}

第二小節(jié)介紹里我們知道 Micron Flash 是沒(méi)有 QE 位設(shè)計(jì)的,因此 flexspi_nor_enable_quad_mode() 函數(shù)在這里是多余的,這個(gè)函數(shù)是將 0x40 寫(xiě)入到了命令標(biāo)號(hào)為 0x01 的 Status Register(這個(gè)操作適用于 ISSI Flash),我們?cè)跀?shù)據(jù)手冊(cè)里找到這個(gè)寄存器定義,發(fā)現(xiàn)被置位的 bit 6 是塊保護(hù)控制位 BP[3:0] 里的最高位,并且 BP[3:0] 設(shè)置是非易失性的(斷電不丟失)。

62d29106-5783-11ed-a3b6-dac502259ad0.png

再進(jìn)一步往下找 BP[3:0] 設(shè)置與 Flash 空間對(duì)應(yīng)關(guān)系,發(fā)現(xiàn) 4'b1000 設(shè)置就是保護(hù)后 1/4 區(qū)域里的所有 block,至今似乎真相大白了。為了驗(yàn)證發(fā)現(xiàn),我們需要將 Status Register 重設(shè)為 0x00,然后再用 J-Flash 燒寫(xiě)一次,這時(shí)候校驗(yàn)失敗問(wèn)題消失了,一切恢復(fù)正常。

6319ae38-5783-11ed-a3b6-dac502259ad0.png

回顧這個(gè)故事,如果痞子衡事先不用 polling_transfer 例程去操作一次 Flash,或者即使跑了例程但事先意識(shí)到了 Micron Flash 沒(méi)有 QE 設(shè)計(jì)而刪除 flexspi_nor_enable_quad_mode() 函數(shù),也就無(wú)法復(fù)現(xiàn)客戶問(wèn)題了,這也是本次故事里最神奇的地方,客戶和痞子衡犯了同樣的失誤,也許這就是緣分?






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5270

    瀏覽量

    119646
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1681

    瀏覽量

    91053
  • NOR flash
    +關(guān)注

    關(guān)注

    2

    文章

    89

    瀏覽量

    22956

原文標(biāo)題:J-Flash在Micron Flash固定區(qū)域下載校驗(yàn)失敗的故事

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用J-Flash調(diào)試

    如何使用J-Flash調(diào)試
    發(fā)表于 11-08 17:29

    STM32入門(mén)系列教程之三《如何使用J-Flash調(diào)試》

    對(duì)初學(xué)者來(lái)說(shuō),要進(jìn)行STM32 的程序下載調(diào)試,一般有三種方法:(1)使用SEGGER J-FlashJ-Link)下載程序到閃存中運(yùn)行;
    發(fā)表于 11-04 15:17

    請(qǐng)問(wèn)IAR下載程序與J-FLASH ARM的差別是什么?

    我發(fā)現(xiàn)IAR仿真程序與用J-FLASH ARM下載程序不同。之前我程序初始化時(shí)死循環(huán)起不了機(jī),且其它參數(shù)都變化,用J-FLASH ARM重新下載
    發(fā)表于 03-12 08:08

    如何使用J-Flash軟件燒錄程序

    固件文件。Segger J-Link Plus以上版本仿真器或Flasher系列編程器產(chǎn)品的用戶可免費(fèi)使用該軟件。本文將介紹如何使用J-Flash軟件來(lái)燒錄程序。1、打開(kāi)J-Flash
    發(fā)表于 01-17 11:11

    J-flash arm是什么

    J-flash arm是單獨(dú)的Flash ISP燒寫(xiě)軟件,把單獨(dú)的bin文件或者h(yuǎn)ex文件燒寫(xiě)到單片機(jī)的flash里面去,開(kāi)發(fā)ARM9、ARM11的時(shí)候,對(duì)于已經(jīng)批量生產(chǎn)的產(chǎn)品,在下
    發(fā)表于 07-16 06:02

    STM32單片機(jī)是怎樣使用SEGGER J-Flash進(jìn)行燒錄的呢

    STM32單片機(jī)使用SEGGER J-Flash 燒錄的方法1. 燒錄環(huán)境需求硬件需求:電腦: 裝有Windows 7 及以上的32位或64位操作系統(tǒng)的電腦燒錄工具:J-Link V8 (硬件版本
    發(fā)表于 01-26 07:20

    AllinOne Flash Algorithm for J-Flash平臺(tái)使用方法

    : J-Link_v9, J-Flash_v6.90, Keil_v5.31, Segger Embeded Studio_v5.4使用方法:(1)AllinOne
    發(fā)表于 09-28 16:07

    如何在Segger J-Flash中設(shè)置芯片初始化序列?

    許多微控制器燒錄之前需要一個(gè)自定義的初始化序列來(lái)初始化目標(biāo)硬件,例如初始化PLL時(shí)鐘,關(guān)閉看門(mén)狗或定義Flash的等待狀態(tài)。使用這些對(duì)初始化過(guò)程有特殊要求的芯片時(shí),
    發(fā)表于 01-05 13:54

    STM32入門(mén)系列教程之三《如何使用J-Flash調(diào)試》

    對(duì)初學(xué)者來(lái)說(shuō),要進(jìn)行STM32 的程序下載調(diào)試,一般有三種方法: (1)使用SEGGER J-FlashJ-Link)下載程序到閃存中運(yùn)行
    發(fā)表于 06-01 14:54 ?1435次下載
    STM32入門(mén)系列教程之三《如何使用<b class='flag-5'>J-Flash</b>調(diào)試》

    jlink驅(qū)動(dòng)下載SEGGER J-FlASH ARM應(yīng)用程序免費(fèi)下載

    segger j-flash arm是jlink調(diào)試工具的新驅(qū)動(dòng)。本驅(qū)動(dòng)J-link ARM V4.08l適合山寨版jlink v7 v8使用 ,不鎖機(jī)不死機(jī),xpwin7通用!SEGGER
    發(fā)表于 04-12 17:30 ?507次下載
    jlink驅(qū)動(dòng)<b class='flag-5'>下載</b><b class='flag-5'>SEGGER</b> <b class='flag-5'>J-FlASH</b> ARM應(yīng)用程序免費(fèi)<b class='flag-5'>下載</b>

    如何使用J-Flash實(shí)現(xiàn)調(diào)試

    本文檔講述如何在芯達(dá)STM32 開(kāi)發(fā)板上使用SEGGER J-Flash 下載HEX 文件。而其他兩種方法,我們將在文檔《如何使用MDK + J-Link 調(diào)試》、以及《如何使用STM
    發(fā)表于 04-21 13:08 ?7次下載
    如何使用<b class='flag-5'>J-Flash</b>實(shí)現(xiàn)調(diào)試

    STM32單片機(jī)使用SEGGER J-Flash 燒錄的方法

    STM32單片機(jī)使用SEGGER J-Flash 燒錄的方法
    發(fā)表于 12-02 10:21 ?20次下載
    STM32單片機(jī)使用<b class='flag-5'>SEGGER</b> <b class='flag-5'>J-Flash</b> 燒錄的方法

    Segger J-Flash下燒寫(xiě)遇到特定區(qū)域內(nèi)校驗(yàn)失敗的問(wèn)題

    最近在支持一個(gè)i.MX RT1170歐美客戶,客戶項(xiàng)目里選用了來(lái)自Micron的四線NOR Flash - MT25QL256ABA8E12-0AAT作為啟動(dòng)設(shè)備,一般讀寫(xiě)倒是沒(méi)有問(wèn)題,但是
    的頭像 發(fā)表于 10-27 09:02 ?4831次閱讀

    一個(gè)關(guān)于Segger J-FlashMicron Flash固定區(qū)域下載校驗(yàn)失敗故事

    接下來(lái)就是按客戶操作流程來(lái)復(fù)現(xiàn) Segger J-Flash 燒寫(xiě)校驗(yàn)失敗問(wèn)題,客戶其實(shí)是嘗試燒寫(xiě)全部 32MB 數(shù)據(jù)來(lái)查看 J-Flash
    的頭像 發(fā)表于 11-01 11:28 ?905次閱讀

    如何在Segger J-Flash中設(shè)置芯片初始化序列?

    許多微控制器燒錄之前需要一個(gè)自定義的初始化序列來(lái)初始化目標(biāo)硬件,例如初始化PLL時(shí)鐘,關(guān)閉看門(mén)狗或定義Flash的等待狀態(tài)。使用這些對(duì)初始化過(guò)程有特殊要求的芯片時(shí),
    的頭像 發(fā)表于 12-12 10:56 ?2073次閱讀