關于FlexSPI外設的lookupTable,之前寫過一篇非常詳細的文章 《從頭開始認識i.MX RT啟動頭FDCB里的lookupTable》,這篇文章幾乎可以幫助解決所有串行QuadSPI NOR Flash(四線) 以及Octal Flash(八線)的讀時序配置問題,因為這些Flash都只用單一行地址(Row Addr)來尋址。
但是市面上也有一些特殊的存儲器(比如八線HyperBus Flash/RAM,OctalRAM等)采用了行列混合尋址方式,對于這類存儲器,我們在FlexSPI里配置讀時序,尤其是讀時序里的地址序列參數值時需要稍微注意一下,今天就來聊聊這個話題:
一、FlexSPI外設關于行列地址 Memory支持
先來看FlexSPI外設是如何支持行列混合尋址存儲器的。
在FLSHxxCR1寄存器里有CAS控制位,這里配置的即是存儲器列地址(Column Addr)位寬。對于不支持列地址的存儲器,CAS需要設置為0;如果存儲器支持列地址,那么CAS需要根據存儲器實際情況來設置。
如果FLSHxxCR1[CAS]位不為0,那么FlexSPI外設在傳輸時序里會拆分實際映射Flash Address(即存儲器自身偏移地址)為行地址FA[31:CAS]和列地址[CAS-1:0]來分別傳輸。
在最終lookupTable里我們可以用這樣的時序配置來實現存儲器的讀訪問,這里RADDR_DDR子序列即傳輸行地址,CADDR_DDR子序列即傳輸列地址(注:如下示例是在FLSHxxCR1[CAS] = 3的設置下)。
看到這里,似乎已經把FlexSPI對于行列地址Memory的支持講完了。
但是我相信你還是會有疑問,上面序列表里RADDR_DDR和CADDR_DDR具體參數值設置似乎沒有講清楚,為什么行列地址加起來位寬是0x18 + 0x10一共40bit(一般 Memory行列地址總位寬也就32 bit)?并且明明CAS值只是 3,為何CADDR_DDR 里設成0x10也行?
是的,這里需要再詳細展開!
首先我們要明白一點,因為FlexSPI連接的是八線Memory,在實際總線上行、列地址傳輸位一定都是8bits的整數倍,如果RADDR/CADDR_DDR參數值設置得不是8bits的整數倍,不足8bits的部分,FlexSPI會自動在低位插入相應保留位(即下圖低保留bits,這些保留位的值是什么不確定,對FlexSPI來說也不在乎),然后在 RADDR/CADDR_DDR設置的參數值范圍內,如果對應Memory實際行、列地址位寬小于參數值,超出實際行、列地址的部分會被FlexSPI自動填入0值(即下圖高亮填充bits)。
二、常見行列混合地址Memory 讀配置實例
大部分 HyperBus Flash/RAM 在行、列地址設計上是一樣的,這里羅列了市面上常見的型號如下,我們就以MIMXRT1050-EVKB板卡上那顆S26KS512為例來介紹。
1、ISSI的IS26KSxxx系列HyperFlash
2、ISSI的IS66/67WVH系列HyperRAM
3、Cypress/Infineon的S26KSxxx系列HyperFlash
4、Cypress/Infineon的S80KSxxx系列HyperRAM
5、Winbond的W957D8、W959D8系列HyperRAM
我們在S26KS512手冊里可以找到如下讀時序圖,主要關注時序最前面48bits的Command-Address序列,在手冊Command / Address Bit Assignments表里有這48bits的詳細定義,其中CA[37:16] 是行地址與高位列地址,CA[2:0] 是低位列地址。
再來看 SDK_2_12_0_EVKB-IMXRT1050boardsevkbimxrt1050driver_examplesflexspihyper_flashpolling_transfer 例程里的如下lookupTable,RADDR_DDR參數值是0x18,CADDR_DDR參數值是0x10,根據上一節的分析,RADDR_DDR里的高2bits會被FlexSPI設為0(RADDR[21:0]用于傳輸CA[37:16])。
因為CAS = 3,所以CADDR_DDR里的高13bits也會被FlexSPI設為0(CADDR[2:0]用于傳輸CA[2:0]),這是符合S26KS512手冊時序定義的。
flexspi_device_config_t deviceconfig = { .columnspace = 3, .enableWordAddress = true, }; const uint32_t customLUT[CUSTOM_LUT_LENGTH] = { /* Read Data */ [0] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04), };
三、特殊行列混合地址Memory 讀配置實例
最近我們在支持客戶的過程中也發現了一些Memory有著不一樣的行、列地址設計,比如如下這顆IS66WVO OctalRAM。從手冊里找到其Command / Address bit assignment表里48bits的定義。與上一節HyperBus Flash/RAM不一樣的是,其高位列地址并不是在8bits對齊處出現的。
1. ISSI出品的IS66/67WVO系列OctalRAM
對于IS66WVO這樣的行、列地址設計,我們在lookupTable里該如何填入RADDR/CADDR_DDR參數值呢?首先CAS設為4,CADDR_DDR設為0x08可以解決CA[3:0]傳輸問題。
現在的重點是RADDR_DDR參數值,總共24bits傳輸位,低位還需要留2個保留位,所以RADDR_DDR僅能被設為0x16(RADDR[20:2]用于傳輸RA[12:0] + CA[9:4]),即如下面代碼:
flexspi_device_config_t deviceconfig = { .columnspace = 4, .enableWordAddress = false, }; const uint32_t customLUT[CUSTOM_LUT_LENGTH] = { /* Read Data with continuous burst Sequence in DDR command mode */ [0] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00), [1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x16, kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x08), [2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DUMMY_DDR, kFLEXSPI_8PAD, 0x1E, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04), };
來源:恩智浦MCU加油站
審核編輯:湯梓紅
-
FlaSh
+關注
關注
10文章
1642瀏覽量
148673 -
存儲器
+關注
關注
38文章
7528瀏覽量
164343 -
儲存器
+關注
關注
1文章
93瀏覽量
17537
發布評論請先 登錄
相關推薦
FlexSPI外設如何支持行列混合尋址存儲器
RT1176如何調試自定義FlexSPI配置塊?
I.MX RT1166 Flashdriver問題如何解決?
FlexSPI和FlexSPI2外設都可以使用BEE嗎?
01:i.MX RT的市場應用和參考解決方案
![01:<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的市場應用和參考解決方案](https://file.elecfans.com/web1/M00/7E/93/o4YBAFwbSLKAL8huAAAsy0wfxyk367.jpg)
i.MX RT開發筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)
![<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RT-Thread & NXP 發布 i.MX RT 系列 BSP 新框架
![<b class='flag-5'>RT</b>-Thread & NXP 發布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
i.MX RT1170上串行NOR Flash雙程序可交替啟動設計
FlexSPI外設關于行列地址Memory支持
探討i.MX RT下FlexSPI driver實現Flash編程時對于中斷支持問題
XMCD – i.MX RT11xx系列簡單易用的特定外設配置功能
![XMCD – <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>11xx系列簡單易用的特定<b class='flag-5'>外設</b><b class='flag-5'>配置</b>功能](https://file1.elecfans.com//web2/M00/AA/66/wKgaomU5wAGAJvRgAAEpzfTMgQE936.png)
評論