• slider image 331
  • slider image 332
  • slider image 333
  • slider image 334
  • slider image 335
  • slider image 336
:::


Browsing this Thread:   1 Anonymous Users






Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#8
管理員
管理員


查看用戶資訊
先回應幾個方向一起研究一下, 因為目前Harmony的範例code沒有實現, 還在想辦法看看是否可以把Example code完成
1. SAMx5x QSPI physical memory mapping 只有24 bits沒錯, 因此如果以公板上的美光N25Q256A來講, 只能存取到128Mbit一半而已
2. 但是SAMx5x QSPI可以使用 INSTRFRAME 暫存器中的 OPTCODEEN與OPTCODELEN, 來決定是否啟用OPTION bits, 然後多的8 bits addressing是在INSTRCTRL暫存器中的OPTCODE這8bit來指定的, 因此可以使用32bit定址, 來存取大於128Mbit的QSPI Flash
紅框的部分
縮圖

3. 除了MCU這邊要設定外, 美光N25Q256A初始也是3-Byte(24bit) Addressing Mode, 也需要依照他的DataSheet, 傳送相對的命令來啟動它的4-Byte address模式, 這部分在目前的Harmony範例code當然也是沒有.
https://www.micron.com/-/media/client/ ... or/n25q/n25q_256mb_3v.pdf
4. OPTCODEEN需要依照傳送的模式來決定不能亂給(我畫個範例)
縮圖

Attach file:



jpg  SAME54_QSPI_OPTION.jpg (186.45 KB)
67979_60d99d2073b9d.jpg 1329X410 px

jpg  SAME54_QSPI_OPTCODELEN.jpg (554.67 KB)
67979_60d9a433adfc8.jpg 1395X1080 px

發表於: 6/28 17:57

Edited by Libra on 2021年06月28日 18:27:12
Edited by Libra on 2021年06月28日 18:28:09
Edited by Libra on 2021年06月28日 18:29:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#7
資深會員
資深會員


查看用戶資訊
那我這樣問好了

從DataSheet上看到的Product Memory Mapping Overview,可以看到QSPI的位址範圍
參考畫面


從MPLAB X中測試QSPI的static void qspi_memcpy_32bit(uint32_t* dst, uint32_t* src, uint32_t count)
可發現它寫入時是用0x04000000加入Offset來操作的,下圖是我設成從128Mb的位址開始寫入
參考執行畫面

從上面的圖看到當操作128Mb以上時,addr會大於0x05000000,已經大於第一張圖的QSPI定址範圍了,如果它可以支援4-Byte address mode的話,是怎麼做的?

下面的QSPI_MemoryWrite中,QSPI_ADDR 的定義是_UL_(0x04000000)

bool QSPI_MemoryWriteqspi_memory_xfer_t *qspi_memory_xferuint32_t *tx_datauint32_t tx_data_lengthuint32_t address )
{
    
uint32_t *qspi_mem = (uint32_t *)(QSPI_ADDR address);
    
uint32_t length_32bitlength_8bit;

    if (
qspi_setup_transfer(qspi_memory_xferQSPI_INSTRFRAME_TFRTYPE_WRITEMEMORY_Valaddress) == false)
    {
        return 
false;
    }

    
/* Write to serial flash memory */
    
length_32bit tx_data_length 4;
    
length_8bit tx_data_length 0x03;

    if(
length_32bit 0)
    {
        
qspi_memcpy_32bit(qspi_memtx_datalength_32bit);
    }
    
tx_data tx_data length_32bit;
    
qspi_mem qspi_mem length_32bit;

    if(
length_8bit 0)
    {
        
qspi_memcpy_8bit((uint8_t *)qspi_mem, (uint8_t *)tx_datalength_8bit);
    }
    
__DSB();
    
__ISB();

    
QSPI_EndTransfer();

    while((
QSPI_REGS->QSPI_INTFLAG QSPI_INTFLAG_INSTREND_Msk) != QSPI_INTFLAG_INSTREND_Msk)
    {
            
/* Poll Status register to know status if instruction has end */
    
}

    
QSPI_REGS->QSPI_INTFLAG |=  QSPI_INTFLAG_INSTREND_Msk;

    return 
true;
}

發表於: 6/25 14:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#6
管理員
管理員


查看用戶資訊
SAME54 default是24bits定址最大到 128Mbits,
如果要支援到大於128MBits時, 需要使用32bits 定址
縮圖

Attach file:



jpg  SAME54_QSPI.jpg (448.56 KB)
67979_60d5577260f6d.jpg 967X686 px

發表於: 6/25 12:11
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#5
資深會員
資深會員


查看用戶資訊
關於操作256Mb的部份,我在SAME54的DataSheet中的Product Memory Mapping Overview看到,
QSPI的Addr範圍是:0x04000000 -> 0x05000000
即可操作的範圍只有0x01000000 = 16MB = 128Mb

我找了SAM E70系列來比對,它們的QSPI範圍是:0x80000000 -> 0xA0000000
官網上寫著:
Quad I/O Serial Peripheral Interface (QSPI) interfacing up to 256 MB Flash and with eXecute-In-Place and on-the-fly scrambling
這顆的QSPI操作範圍是0X20000000 = 512MB,我不太確定它是跑XIP時只能到256MB還是當Data Flash也只能到256MB,我沒要用這顆就不太關心了

版大可以幫忙確認一下,SAME54這個說明就是只支援到128Mb的意思?

因為我在讀寫時,把INSTRFRAME的ADDRLEN設成1也是沒用,一樣跳到HardFault

發表於: 6/25 10:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#4
資深會員
資深會員


查看用戶資訊
你好 :

1. 因我是通訊斷線的時候做33Bytes保存,所以存到滿約4~5天的資料(沒記錯的話).
2. 位置要自己算, 會有一讀及一寫的位置變數, 讀與寫變數要做比較, 如果讀寫變數一樣就不能讀或寫了,也必須判斷sector,所以才可以先清除sector後再寫.
3. 沒有做復製.
4. 因我還須做斷電處理會更麻煩...

謝謝.

發表於: 6/24 14:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#3
資深會員
資深會員


查看用戶資訊
感謝回覆,

您使用18F來操作,3秒寫入一次33Bytes
這33Bytes是佔用一個Page的空間?不然索引值可能不太好算,跨sector時會有點麻煩

Flash每次寫入時應該要備份一次sector的內容,erase後再寫回去,不然每寫一次該sector的其它資料就不見了…
PIC18能開出4096的buffer?一次用掉16個bank只為了當備份sector的buffer,感覺有點心痛啊

所以您的流程是:複製sector到buffer --> erase --> 將修改的buffer寫入Flash嗎?

發表於: 6/24 12:46
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教操作QSPI Flash的觀念(讀寫資料用)
#2
資深會員
資深會員


查看用戶資訊
你好 :

1.我是用18F使用SPI讀寫SST26V32B.
2.要用之前要先解鎖.
3.要寫之前先清除,一個Sector(4096).
4.我是一筆資料33Bytes, 3秒存一筆, 存好存滿及重頭存, 目前都還OK.
5.有使用QSPI的先進, 請分享...

謝謝.

發表於: 6/24 10:13

Edited by jlian on 2021年06月24日 10:32:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


請教操作QSPI Flash的觀念(讀寫資料用)
#1
資深會員
資深會員


查看用戶資訊
我想用Flash操作Page的讀寫來存取資料

以前用的都是SPI的NAND Flash,操作時page的寫入命令會自動執行erase再寫進去,看起來比較單純

QSPI的NOR Flash看起來操作差異比較大,我找了一陣子資料,整理一下它的特色:
- earse最小單位為4k (有的叫subsector,有的叫sector)

- 讀取時可隨意指定addr(因它有x decoder, y decoder,可將輸入的addr轉為page index,及page內的位置)

- 模組直接mapping到MCU的address,以SAME54為例是QSPI_ADDR (0x04000000)

我看了一下範例(Harmony\V3\csp_apps_sam_d5x_e5x\apps\qspi\qspi_read_write)
裡面不管是SST26或N25Q256A,都是初始化後先erase 1個sector,然後在這個sector裡寫點資料再讀出來。

對QSPI Nor Flash有些問題:(操作使用MHC產生的plib_qspi.c)

- 在寫入Flash時,plib中提供
bool QSPI_MemoryWriteqspi_memory_xfer_t *qspi_memory_xferuint32_t *tx_datauint32_t tx_data_lengthuint32_t address )

csp網頁中的說明:
This function can be used to write maximum of one page of data to the specified address of the serial flash device connected as a QSPI slave.
裡面addr並沒有做限制,function的實作是設定命令為CMD_PAGE_PROGRAM之後就開始複製資料,沒有執行erase的動作,請問
- 想要寫入資料時,只要執行QSPI_MemoryWrite,還是必須先執行erase?

- addr是以page size為單位,即 (size%256)來當作addr?

我的應用裡,須要寫入的資料有好幾類,會把Flash分成幾段,每段寫入不同種類的資料。

資料都不大,但會不斷連續寫入(至少一分鐘寫入一次),若每次寫入都須要先erase 4k,頻繁的清除/寫入對NOR Flash好像不太好?NOR Flash好像是較適合不常寫入,常讀出的應用?


會想用NOR Flash (256Mb)一方面是開發板(SAME54)上有,想說有範例code較容易上手,但這個範例的用法過於簡略,看不出若是要反覆讀寫時應該怎麼做。(是否須要每次先Erase?)
(範例甚至無法讀寫整顆Flash,因size大於128Mb,預設的addr只有3byte)

另一方面QSPI不包含在sercom裡,用這顆的話可以省一組Sercom,就多了一組通訊介面可用

請問若應用是像這樣至少每分鐘會寫入(加上其它不定時其它類型事件),是否不適合使用NOR Flash?(我擔心頻繁的小資料寫入會讓flash很快就掛掉)

麻煩有用過的先進給些建議,謝謝

Plib中的實作
bool QSPI_MemoryWriteqspi_memory_xfer_t *qspi_memory_xferuint32_t *tx_datauint32_t tx_data_lengthuint32_t address )
{
    
uint32_t *qspi_mem = (uint32_t *)(QSPI_ADDR address);
    
uint32_t length_32bitlength_8bit;

    if (
qspi_setup_transfer(qspi_memory_xferQSPI_INSTRFRAME_TFRTYPE_WRITEMEMORY_Valaddress) == false)
    {
        return 
false;
    }

    
/* Write to serial flash memory */
    
length_32bit tx_data_length 4;
    
length_8bit tx_data_length 0x03;

    if(
length_32bit 0)
    {
        
qspi_memcpy_32bit(qspi_memtx_datalength_32bit);
    }
    
tx_data tx_data length_32bit;
    
qspi_mem qspi_mem length_32bit;

    if(
length_8bit 0)
    {
        
qspi_memcpy_8bit((uint8_t *)qspi_mem, (uint8_t *)tx_datalength_8bit);
    }
    
__DSB();
    
__ISB();

    
QSPI_EndTransfer();

    while((
QSPI_REGS->QSPI_INTFLAG QSPI_INTFLAG_INSTREND_Msk) != QSPI_INTFLAG_INSTREND_Msk)
    {
            
/* Poll Status register to know status if instruction has end */
    
}

    
QSPI_REGS->QSPI_INTFLAG |=  QSPI_INTFLAG_INSTREND_Msk;

    return 
true;
}

發表於: 6/23 9:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://mu.microchip.com/page/tmu
http://www.microchip.com.tw/modules/tadnews/page.php?ncsn=2&nsn=41
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
https://page.microchip.com/APAC-PrefCenters-TW.html
https://www.youtube.com/user/MicrochipTechnology
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
https://www.microchip.com/development-tools/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源