免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

SR寄存器BP[x:0]位 痞子衡嵌入式:一個關于Segger J-Flash在Micron Flash固定區(qū)域下載校驗失敗的故事

大家好,我是痞子衡,是正經搞技術的痞子 。今天痞子衡給大家講的是一個關于Segger J-Flash在Micron Flash固定區(qū)域下載校驗失敗的故事 。
痞子衡最近在支持一個 i.MXRT1170 歐美客戶,客戶項目里選用了來自 Micron 的四線 NOR Flash - MT25QL256ABA8E12-0AAT 作為啟動設備,一般讀寫倒是沒有問題,但是在 Segger J-Flash 下燒寫遇到了特定區(qū)域內校驗失敗的問題 。
從痞子衡過往豐富的 Flash 支持經驗來看,亞太區(qū)客戶一般選用 ISSI(芯成)/Winbond(華邦)/MXIC(旺宏)/GigaDevices(兆易創(chuàng)新) 的 Flash 比較多,痞子衡對這些廠商 Flash 可以說是門清了 。這個歐美客戶選用的是痞子衡不太熟的 Micron(鎂光) 產品,借著這個問題,痞子衡帶大家一起稍微深入地了解下 Micron Flash 產品:
一、引出客戶問題首先是復現下客戶的問題,痞子衡找了塊 MIMXRT1170-EVK 開發(fā)板,將板載其他廠商 Flash 換成這顆 MT25QL256ABA8E12-0AAT(因為是 T-PBGA24 封裝,所以需要放到原來的 OctalFlash 位置 - U21),然后將 \SDK_2.11.1_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\flexspi\nor\polling_transfer 例程稍作適配性修改,主要是將 customLUT 里的命令表按 Micron 數據手冊命令表做調整(全用了四字節(jié)地址命令),然后跑了一下例程發(fā)現基本的 Flash 讀寫擦操作沒有問題(默認操作的是 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),};接下來就是按客戶操作流程來復現 Segger J-Flash 燒寫校驗失敗問題,客戶其實是嘗試燒寫全部 32MB 數據來查看 J-Flash 及其配套下載算法能否適用這顆 Flash,這里痞子衡就用 《超級下載算法RT-UFL v1.0》,經過測試,確實復現了客戶的問題 。經過反復測試,定位了問題是這顆 Micron 32MB 的 Flash 前 3/4 區(qū)域(0x0 - 0x17FFFFF)是沒問題的,但是在后 1/4 區(qū)域(0x1800000 - 1FFFFFF)均會出現校驗錯誤(J-Flash軟件里看擦寫操作是能進行的,但后面發(fā)現其實根本沒有正常擦寫) 。

SR寄存器BP[x:0]位 痞子衡嵌入式:一個關于Segger J-Flash在Micron Flash固定區(qū)域下載校驗失敗的故事

文章插圖
二、Micron QuadSPI NOR Flash有什么不同?在分析客戶問題之前,我們先來簡單認識一下這顆 Micron NOR Flash,痞子衡瀏覽了 Micron 的官網以及這顆 Flash 的數據手冊,發(fā)現它確實跟其他廠商的 NOR Flash 設計有點區(qū)別 。
首先是 Flash 容量,其他廠商一般都是能夠提供從 512Kb 到 2Gb 全范圍的 Flash 產品,但是 Micron 串行 NOR Flash 最小容量就是 128Mb,果然是國際 Memory 大廠,設計就是豪橫 。但是從 Flash 作為 XIP 啟動設備角度而言,128Mb 其實挺多的,普通的嵌入式項目沒有這么大的代碼存儲需求 。
SR寄存器BP[x:0]位 痞子衡嵌入式:一個關于Segger J-Flash在Micron Flash固定區(qū)域下載校驗失敗的故事

文章插圖
其次是 NOR Flash 里的高頻問題 《QE bit 設計》,一般 Flash 的 IO2/3 引腳復用功能都是通過內部狀態(tài)寄存器里的 QE 位來控制,QE 關閉則 IO2/3 是 RESET#/HOLD#/WP# 功能:如果 QE 開啟則 IO2/3 用于數據傳輸(這種情況下才可以用 Quad I/O 相關命令) 。然而 Micron Flash 根本就沒有 QE 位控制,IO2/3 功能主要靠當前命令類型來決定:如果是 Single SPI 或者 Dual I/O SPI 命令,則 IO2/3 是 RESET#/HOLD#/WP# 功能;如果是 Quad I/O SPI 命令,則 IO2/3 用于傳輸數據 。

經驗總結擴展閱讀