在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SPI NAND驅動性能測試分析與優(yōu)化

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-06-21 17:29 ? 次閱讀

本文轉自公眾號,歡迎關注

SPI NAND驅動性能測試分析與優(yōu)化 (qq.com)

一.前言

https://mp.weixin.qq.com/s/hgogGTFzBDx83sFjDX8lVw一文中我們詳細介紹了SPI NAND,也實現(xiàn)了相關的驅動(如果需要驅動源碼可以和我聯(lián)系)。X1和x4模式的擦除,寫,讀等都測試OK了。現(xiàn)在我們需要進行性能測試和優(yōu)化。https://mp.weixin.qq.com/s/uLraKF5kWMTHLpTggh2Q4Q一文中也介紹了ONFI。

二. 性能測試

既然是追求性能,所以我們后面就都基于X4模式進行了。

我們分別進行擦除,寫,讀全盤測試(128MB),然后使用定時器計算操作的時間。

性能測試代碼如下:

nand_set_qe(1,3); /* 使能QE模式 */
    /* 擦除 */
    pre = iot_timer_get_time();
    for(uint32_t block=0; block <   dev.blocks_per_lun*dev.luns; block++)
    {
        if(0 != (res = nand_block_erase(block*dev.pages_per_block)))
        {
            iot_printf("block %d erase err

",block,res);
        }
    }
    cur = iot_timer_get_time();
    if(cur <   pre)
    {   
        used = 0xFFFFFFFF - pre + cur;
    }
    else
    {
        used = cur-pre;
    }
    printf("erase time:%duS

",used);

    /* 編程 */
    memset(w_buffer,0xFF,sizeof(w_buffer));
    w_buffer[dev.page_size] = 0xFF;  /* 壞塊標志不能擦除 */
    pre = iot_timer_get_time();
    for(uint32_t block=0; block <   dev.blocks_per_lun*dev.luns; block++)
    {
        for(uint32_t page=0; page<  dev.pages_per_block; page++)
        {
            if(0 != (res = nand_write_page_x4(w_buffer, block*dev.pages_per_block+page, 0, dev.page_size+dev.page_spare_size)))
            {
                iot_printf("write page %d err %d

",block*dev.pages_per_block+page,res);
            }
        }
    }
    cur = iot_timer_get_time();
    if(cur <   pre)
    {   
        used = 0xFFFFFFFF - pre + cur;
    }
    else
    {
        used = cur-pre;
    }
    printf("write time:%duS

",(cur-pre));

    /* 讀 */
    pre = iot_timer_get_time();
    for(uint32_t block=0; block <   dev.blocks_per_lun*dev.luns; block++)
    {
        for(uint32_t page=0; page<  dev.pages_per_block; page++)
        {
            if(0 != (res = nand_read_page_x4(r_buffer, block*dev.pages_per_block+page, 0, dev.page_size+dev.page_spare_size)))
            {
                iot_printf("write page %d err %d

",block*dev.pages_per_block+page,res);
            }
        }
    }
    cur = iot_timer_get_time();
    if(cur <   pre)
    {   
        used = 0xFFFFFFFF - pre + cur;
    }
    else
    {
        used = cur-pre;
    }
    printf("read time:%duS

",(cur-pre));

測試結果如下

圖片

對于寫

128MB花了17.40S

所以速度是7.36MB/S

三. 性能分析

我們使用邏輯分析儀抓取總線波形,用于進行性能分析

參考文章https://mp.weixin.qq.com/s/bCdgCNsGPbYjSzjv8VJyRA

我們以編程為例,擦除和讀類似。

編程PAGE的代碼如下,有三個步驟

即先寫數(shù)據(jù)到CACHE,然后寫使能,最后執(zhí)行CACHE到PAGE的數(shù)據(jù)編程。

int nand_write_page_x4(uint8_t* buffer, uint32_t pageaddr, uint16_t start, uint16_t len)
{
    int res = 0;
    res = nand_write_to_cache_x4(start, len, buffer);
    if(res == 0)
    {
        res = nand_write_enable();
        if(res == 0)
        {
            res = nand_write_cache_to_page(pageaddr,NAND_PROG_CHECK_RETRY);
            if(res == 0)
            {
                return 0;
            }
            else
            {
                return -3;
            }
        }
        else
        {
            return -2;
        }
    }
    else
    {
        return -1;
    }
}

查看邏輯分析儀抓取到的數(shù)據(jù)如下,對應如下三個步驟

圖片

(1)總線上寫數(shù)據(jù)到NAND的Cache

(2)寫使能,并查詢寫使能OK

(3)執(zhí)行CACHE到PAGE編程,并查詢完成

從以上時間戳可以看到三個步驟分別對應的時間是

第一次開始

19:48:31.513.198.648,PROGRAM LOAD x4(32),0000, ,FF,FF,FF,FF,FF,FF,FF,FF,........,

開始寫使能

19:48:31.513.259.134,WRITE ENABLE(06), , , , , , , , , , , ,

開始編程

19:48:31.513.273.890,PROGRAM EXECUTE(10),0040BE, , , , , , , , , , ,

編程完成

19:48:31.513.344.141,GET FEATURE(0F),C0, ,00, , , , , , , ,.,

下一次開始

19:48:31.513.435.474,PROGRAM LOAD x4(32),0000, ,FF,FF,FF,FF,FF,FF,FF,FF,........,

一個PAGE編程的周期

所以一個PAGE的編程時間是下一次開始和前一次開始的時間間隔

435.474-198.648=236.826uS

一次操作是寫2048+128字節(jié),對應236.826uS,換算就是8.76MB/S比使用軟件定時器測試的7.36MB/S大一點,因為軟件額外一些邏輯處理需要一些時間,比如獲取定時器時間,塊之間的循環(huán)切換等。

波形如下

圖片

總線上數(shù)據(jù)傳輸時間

總線寫數(shù)據(jù)時間即第一次開始到開始寫使能,

259.134-198.648=60.486uS

如下如圖,后面6.96uS是兩次傳輸之間的間隔,即軟件完成一次傳輸?shù)较乱淮蝹鬏斨g的時間,也算在這個階段了。

圖片

寫使能時間

由于編程完之后,NAND會自動寫禁止,所以每次都需要重新寫使能。

執(zhí)行寫使能后要回讀是否設置成功(當然回讀也可以省略但是出于可靠性考慮還是建議回讀,如果回讀未使能再重試)。

對應如下

273.890-259.134=14.756uS

圖片

編程時間

344.141-273.890=70.251

圖片

軟件處理時間

從下可以看出編程完成到下一次開始,還有

91uS

圖片

這一部分是軟件處理時間,主要是軟件從NAND控制器的緩存區(qū)中將數(shù)據(jù)搬運到用戶存儲中去。

所以整理下各階段的時間消耗如下

總線傳輸 寫使能 編程 軟件處理
時間 60.49 14.76 70.25 91 236.5
占比 25.58% 6.24% 29.7% 38.48% 100%

可以看出軟件處理實際占用時間比例最大,主要是從控制器的緩沖區(qū)中將數(shù)據(jù)搬運到用戶存儲的時間。

四. 性能優(yōu)化

針對以上性能分析過程,對各個階段考慮優(yōu)化

1. 總線傳輸

已經使用了X4模式, 如果還要縮短該階段的時間,只能繼續(xù)提高頻率了,目前是80M的時鐘,手冊中參數(shù)是3.3V快讀可達133MHz。

針對讀還可以使用DTR雙邊沿模式但是這時最大時鐘頻率只有70MHz,雙邊沿也就是140M所以比133M也大不了多少。

圖片

2. 寫使能時間

由于每次編程之后,NAND自動寫禁止,所以該步驟不能少,可以減少回讀操作大約節(jié)省7uS,但是出于可靠性設計,建議還是回讀,如果回讀不成功則重試。

3. 編程時間

手冊中描述的時間是不使能ECC也最少要300uS,我們實測是70uS左右,所以手冊已經寫的很保守了,這里也沒有優(yōu)化空間了。

圖片

4軟件處理時間

這一部分主要是軟件在用戶存儲和NAND控制器的緩存之間拷貝數(shù)據(jù)的時間。

可以使用DMA或者提高Burst來減少該時間,

最好是這一部分工作由控制器完成,而不是軟件去搬運,比如軟件指定一個地址,控制器自動從這個地址讀,或者寫入這個地址,而不是通過緩存再轉一遍,減少拷貝時間。

軟件時間還包括邏輯處理時間,比如一次傳輸?shù)较乱淮蝹鬏敚枰渲?a href="http://www.xsypw.cn/tags/寄存器/" target="_blank">寄存器,進行判斷,等邏輯處理。

由于軟件是分層設計包括HW層寄存器的封裝,HAL層傳輸?shù)?a target="_blank">接口,以設備驅動層,

對于HW層封裝可以使用宏或者內聯(lián)函數(shù)替代函數(shù),減少函數(shù)調用時間,HW層和HAL不做參數(shù)檢查,因為接口調用頻繁等,在設備驅動層做參數(shù)檢查。

/**
 * n        int nfc_set_datalen(uint8_t id, uint16_t len)
 * param[in] id port id
 * param[in] len data len
 * 
etval    0  ok
 * 
etval    < 0 param err
 * 
*/
NFC_INLINE int nfc_set_datalen(uint8_t id, uint16_t len)
{
    uint32_t tmp;
    (void)id;
    tmp = NFC_READ_REG(CFG_NFC_ENA_ADDR);
    tmp &= ~NFC_DATA_LEN_MASK;
    tmp |= (len < < NFC_DATA_LEN_OFFSET);
    NFC_WRITE_REG(CFG_NFC_ENA_ADDR,tmp);
    return 0;
}

六.波形文件

這里分享一些實際抓取到的波形文件供參考

波形文件使用軟件Acute TravelLogic Analyzer打開查看。

鏈接:https://pan.baidu.com/s/103HHT4qcvFjGn1q-jJhAUg?pwd=iqlm
提取碼:iqlm

七. 總結

從以上分析可以看出最大的優(yōu)化空間是減少軟件從控制器緩沖區(qū)去搬運數(shù)據(jù)的時間,這一部分時間占最大頭,可IP設計優(yōu)化直接硬件搬運數(shù)據(jù)到用戶存儲。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • NAND
    +關注

    關注

    16

    文章

    1686

    瀏覽量

    136273
  • 存儲
    +關注

    關注

    13

    文章

    4337

    瀏覽量

    85984
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1715

    瀏覽量

    91830
  • 性能測試
    +關注

    關注

    0

    文章

    213

    瀏覽量

    21356
收藏 人收藏

    評論

    相關推薦

    使用邏輯分析儀Acute TravelLogic Analyzer進行SPI NAND驅動開發(fā)調試

    使用邏輯分析儀Acute TravelLogic Analyzer進行SPI NAND驅動開發(fā)調試
    的頭像 發(fā)表于 06-08 11:13 ?5437次閱讀
    使用邏輯<b class='flag-5'>分析</b>儀Acute TravelLogic Analyzer進行<b class='flag-5'>SPI</b> <b class='flag-5'>NAND</b><b class='flag-5'>驅動</b>開發(fā)調試

    雷龍CS SD NAND:貼片式TF卡體驗與性能測試

    =1M:每次讀取的數(shù)據(jù)塊大小為 1MB。 iflag=direct:使用直接 I/O,繞過緩存,以獲得更真實的讀取速度。 可以看到,CS SD NAND的讀寫性能都很好。 總結 綜合測試表現(xiàn),CS
    發(fā)表于 11-26 10:04

    SPI NAND FLASH 的簡介和優(yōu)點

    ,充分節(jié)省了PCB板的空間,已經管腳的數(shù)量,從而可以減小PCB的尺寸及層數(shù),既滿足了小型化的需求也降低了產品的成本。從上面我們了解到了 SPI NAND flash的這么多優(yōu)點,那么他的性能相比于傳統(tǒng)
    發(fā)表于 08-07 17:01

    怎樣對基于NK-980IOT開發(fā)板的SPI NAND Flash進行讀寫測試

    flash作文件系統(tǒng),spi nor flash對接是SFUD通用的spi flash 驅動,沒細看這個spi nand flash對接是
    發(fā)表于 06-23 12:05

    SPI Nand Flash 簡介

    一般可通過PAD連接閃存,比如Cadence公司的Octal-SPI NAND Flash controller, 支持8-bit的數(shù)據(jù)和地址傳輸,這樣的速度會比傳統(tǒng)的單比特串行SPI快很多。因為
    發(fā)表于 07-01 10:28

    《現(xiàn)代CPU性能分析優(yōu)化》---精簡的優(yōu)化

    《現(xiàn)代CPU性能分析優(yōu)化》是一本非常實用的書籍,對于從事性能關鍵型應用程序開發(fā)和進行系統(tǒng)底層優(yōu)化的技術人員來說是不可或缺的。這本書也很適合
    發(fā)表于 04-18 16:03

    《現(xiàn)代CPU性能分析優(yōu)化》--讀書心得筆記

    很榮幸拿到這本<<現(xiàn)代CPU性能分析優(yōu)化>>,花了幾天的時間瀏覽了一遍,書比較單薄,正文只有不到200頁,但是里面的內容確是非常豐富的,一般
    發(fā)表于 04-24 15:31

    沒有SPI-Nand, NAND無法啟動怎么解決?

    沒有SPI-Nand, NAND 無法啟動
    發(fā)表于 09-06 06:24

    NAND_Flash結構與驅動分析

    NAND_Flash結構與驅動分析NAND_Flash結構與驅動分析
    發(fā)表于 03-17 14:14 ?37次下載

    永磁驅動電機接線盒結構優(yōu)化性能分析_丁樹業(yè)

    永磁驅動電機接線盒結構優(yōu)化性能分析_丁樹業(yè)
    發(fā)表于 01-08 13:49 ?0次下載

    linux spi應用層驅動以及回環(huán)測試代碼

    linux spi應用層驅動以及回環(huán)測試代碼
    發(fā)表于 10-22 15:47 ?2次下載

    SPI Nand Flash簡介

    1.SPI Nand Flash簡介SPI Nand Flash顧名思義就是串行接口的Nand Flash,它和普通并行的
    發(fā)表于 12-02 10:51 ?34次下載
    <b class='flag-5'>SPI</b> <b class='flag-5'>Nand</b> Flash簡介

    SD NANDSPI NAND的區(qū)別

    SD NANDSPI NAND各有優(yōu)缺點,適用于不同的應用場景。SD NAND提供更高的讀寫速度和大容量存儲,適合需要高性能和大容量存儲的
    的頭像 發(fā)表于 06-04 14:26 ?2128次閱讀

    SD NANDSPI NAND和eMMC的區(qū)別對比分析

    SPI NAND、SD NAND和eMMC是三種不同類型的嵌入式存儲技術,它們各自具有獨特的特點和應用場景。以下是這三種存儲技術的主要區(qū)別:
    的頭像 發(fā)表于 07-02 11:31 ?1393次閱讀
    SD <b class='flag-5'>NAND</b>、<b class='flag-5'>SPI</b> <b class='flag-5'>NAND</b>和eMMC的區(qū)別對比<b class='flag-5'>分析</b>

    華為云 X 實例 CPU 性能測試詳解與優(yōu)化策略

    ? 2.2 Sysbench單線程CPU性能測試 ? 2.3 Sysbench多線程CPU性能測試(4線程) ? 2.4 高強度多線程CPU性能
    的頭像 發(fā)表于 12-30 14:52 ?140次閱讀
    華為云 X 實例 CPU <b class='flag-5'>性能</b><b class='flag-5'>測試</b>詳解與<b class='flag-5'>優(yōu)化</b>策略
    主站蜘蛛池模板: 亚洲第一视频在线观看| 在线免费黄色网址| 日本黄色大片在线观看| 色多多在线视频| 色婷婷社区| 4tube高清性欧美| 成人精品人成网站| 色婷婷国产| 日韩美女拍拍免费视频网站| 日本黄视频在线观看| 免费色视频| 韩国三级hd| 一级午夜| 久热国产精品视频| 在线免费观看h视频| 亚洲黄色在线网站| 夜色资源站www国产在线观看| 四虎永久免费地址| 六月婷婷啪啪| 成年人视频黄色| 国产免费久久精品| 97人人做人人爱| 色综合免费视频| 色之综综| 手机看片神马午夜片| 男女全黄做爰视频| 香港澳门a级三级三级全黄| 欧美一区二区视频在线观看| 国产人成精品免费视频| 天天爽夜爽免费精品视频| 国产成人悠悠影院| 性夜黄a爽影免费看| 午夜性福利| 毛片网站免费在线观看| 在线观看免费xx高清视频| 国产伦精品一区二区三区女| 亚洲免费播放| 四虎影院在线播放| 国产婷婷综合丁香亚洲欧洲| 人日人操| 天天躁夜夜躁狠狠躁2021a|