一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-10-27 09:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

一、引出客戶問題

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

const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
    /* Fast read quad mode - 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),

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

    /* Page Program - quad mode */
    [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),
};

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

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

eaf0e974-5590-11ed-a3b6-dac502259ad0.png

二、Micron Flash有什么不同?

在分析客戶問題之前,我們先來簡(jiǎn)單認(rèn)識(shí)一下這顆Micron NOR Flash,經(jīng)過瀏覽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)目沒有這么大的代碼存儲(chǔ)需求。

eb38d0d6-5590-11ed-a3b6-dac502259ad0.png

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

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

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

三、找到問題原因

現(xiàn)在來分析客戶問題,F(xiàn)lash的后1/4區(qū)域在J-Flash下校驗(yàn)錯(cuò)誤,那我們先修改 polling_transfer例程去操作0x1800000之后的Sector,發(fā)現(xiàn)確實(shí)跑不過。

如果不是Flash介質(zhì)問題,也不是讀寫擦命令問題,那只能有一種解釋,那就是 Flash里這個(gè)區(qū)域被保護(hù)了,F(xiàn)lash里是有非易失寄存器可以設(shè)置軟件保護(hù)的,但是默認(rèn)應(yīng)該是全部區(qū)域不保護(hù),而第一小節(jié)里我們先跑了polling_transfer例程驗(yàn)證 Flash讀寫,那大概率這個(gè)例程里有修改Flash內(nèi)部寄存器操作,經(jīng)過排查定位到了flexspi_nor_enable_quad_mode() 函數(shù)。

#define FLASH_QUAD_ENABLE            0x40U

const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
    /* Enable Quad mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x01, kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04),
};

int main(void)
{
    // 代碼省略

    /* Enter quad mode. */
    status = flexspi_nor_enable_quad_mode(EXAMPLE_FLEXSPI);
    if (status != kStatus_Success)
    {
        return status;
    }

    // 代碼省略

第二小節(jié)介紹里我們知道Micron Flash是沒有QE位設(shè)計(jì)的,因此 flexspi_nor_enable_quad_mode() 函數(shù)在這里是多余的,這個(gè)函數(shù)是將0x40寫入到了命令標(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è)置是非易失性的(斷電不丟失)。

eb4f6b84-5590-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)證這個(gè)發(fā)現(xiàn),我們需要將StatusRegister重設(shè)為0x00,然后再用J-Flash燒寫一次,這時(shí)候校驗(yàn)失敗問題消失了,一切恢復(fù)正常。

eb70bb36-5590-11ed-a3b6-dac502259ad0.png

一點(diǎn)小體會(huì)

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

審核編輯:彭靜
聲明:本文內(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)注

    128

    文章

    8677

    瀏覽量

    145478
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5680

    瀏覽量

    104702
  • 燒寫
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    14632

原文標(biāo)題:關(guān)于Segger J-Flash下載校驗(yàn)失敗的故事

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32失敗錯(cuò)誤的處理方法

    STM32失敗錯(cuò)誤:Contents mismatch at: 08000000H (Flash=FFH Required=00H)
    的頭像 發(fā)表于 06-21 08:55 ?1.5w次閱讀
    STM32<b class='flag-5'>燒</b><b class='flag-5'>寫</b><b class='flag-5'>失敗</b>錯(cuò)誤的處理方法

    J-FLASH時(shí)會(huì)將沒有數(shù)據(jù)的空白地址段寫成0x00,是否可以修改J-FLASH配置文件將數(shù)據(jù)寫成0xFF?

    J-FLASH時(shí),會(huì)將沒有數(shù)據(jù)的空白地址段寫成0x00,是否可以修改J-FLASH配置文件將數(shù)據(jù)寫成0xFF? 是否有大神知道怎么辦?
    發(fā)表于 04-19 08:12

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

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

    請(qǐng)問J-FLASH ARM程序報(bào)錯(cuò)應(yīng)該如何解決?

    使用J-FLASH ARM給STM32F103程序但是出現(xiàn)下面的問題是什么原因?該怎么解決呢?
    發(fā)表于 12-27 09:03

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

    ,沒有對(duì)應(yīng)工程文件的情況就無法通過IDE來燒錄了。德國(guó)Segger公司的J-Flash軟件可以很好的解決上面提到的兩個(gè)問題,J-Flash是一款獨(dú)立的編程軟件,可在無需項(xiàng)目工程文件的
    發(fā)表于 01-17 11:11

    J-Link Plus如何直接SPI Flash?

      J-Link不僅支持單片機(jī)片內(nèi)Flash,還能夠通過SPI協(xié)議直接燒錄SPI Flash
    發(fā)表于 12-16 17:27

    J-flash arm是什么

    J-flash arm是單獨(dú)的Flash ISP軟件,把單獨(dú)的bin文件或者h(yuǎn)ex文件寫到單片機(jī)的
    發(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)使用方法

    和FlashIMXRT1050_SPINor.elf算法文件(Segger版本,路徑\\Output\\FlashIMXRT1050_SPINor\\Exe);注意:Keil的FLM算法文件與J-Flash
    發(fā)表于 09-28 16:07

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

    設(shè)置的初始化命令包括讀寫特定地址、校驗(yàn)、暫停CPU和設(shè)置芯片復(fù)位方式等。支持的完整的指令列表請(qǐng)參考J-Flash用戶手冊(cè)中的介紹。下面簡(jiǎn)單介紹一些常用的初始化指令。Reset:設(shè)置芯片的復(fù)位方式,如硬件
    發(fā)表于 01-05 13:54

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

    對(duì)初學(xué)者來說,要進(jìn)行STM32 的程序下載調(diào)試,一般有三種方法: (1)使用SEGGER J-FlashJ-Link)下載程序到閃存中運(yùn)行; (2)使用串口ISP 來下載HEX 文件到CPU 中運(yùn)行; (3)
    發(fā)表于 06-01 14:54 ?1436次下載
    STM32入門系列教程之三《如何使用<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 ?513次下載
    jlink驅(qū)動(dòng)下載<b class='flag-5'>SEGGER</b> <b class='flag-5'>J-FlASH</b> ARM應(yīng)用程序免費(fèi)下載

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

    本文檔講述如何在芯達(dá)STM32 開發(fā)板上使用SEGGER J-Flash 下載HEX 文件。而其他兩種方法,我們將在文檔《如何使用MDK + J-Link 調(diào)試》、以及《如何使用STM32-ISP 下載調(diào)試》中詳細(xì)說明。
    發(fā)表于 04-21 13:08 ?9次下載
    如何使用<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> 燒錄的方法

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

    接下來就是按客戶操作流程來復(fù)現(xiàn) Segger J-Flash 校驗(yàn)失敗問題,客戶其實(shí)是嘗試
    的頭像 發(fā)表于 11-01 11:28 ?1381次閱讀