一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲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)不再提示

SPI NAND驅(qū)動(dòng)性能測(cè)試分析與優(yōu)化

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

本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注

SPI NAND驅(qū)動(dòng)性能測(cè)試分析與優(yōu)化 (qq.com)

一.前言

https://mp.weixin.qq.com/s/hgogGTFzBDx83sFjDX8lVw一文中我們?cè)敿?xì)介紹了SPI NAND,也實(shí)現(xiàn)了相關(guān)的驅(qū)動(dòng)(如果需要驅(qū)動(dòng)源碼可以和我聯(lián)系)。X1和x4模式的擦除,寫,讀等都測(cè)試OK了?,F(xiàn)在我們需要進(jìn)行性能測(cè)試和優(yōu)化。https://mp.weixin.qq.com/s/uLraKF5kWMTHLpTggh2Q4Q一文中也介紹了ONFI。

二. 性能測(cè)試

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

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

性能測(cè)試代碼如下:

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;  /* 壞塊標(biāo)志不能擦除 */
    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));

測(cè)試結(jié)果如下

圖片

對(duì)于寫

128MB花了17.40S

所以速度是7.36MB/S

三. 性能分析

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

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

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

編程PAGE的代碼如下,有三個(gè)步驟

即先寫數(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ù)如下,對(duì)應(yīng)如下三個(gè)步驟

圖片

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

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

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

從以上時(shí)間戳可以看到三個(gè)步驟分別對(duì)應(yīng)的時(shí)間是

第一次開(kāi)始

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

開(kāi)始寫使能

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

開(kāi)始編程

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

編程完成

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

下一次開(kāi)始

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

一個(gè)PAGE編程的周期

所以一個(gè)PAGE的編程時(shí)間是下一次開(kāi)始和前一次開(kāi)始的時(shí)間間隔

435.474-198.648=236.826uS

一次操作是寫2048+128字節(jié),對(duì)應(yīng)236.826uS,換算就是8.76MB/S比使用軟件定時(shí)器測(cè)試的7.36MB/S大一點(diǎn),因?yàn)檐浖~外一些邏輯處理需要一些時(shí)間,比如獲取定時(shí)器時(shí)間,塊之間的循環(huán)切換等。

波形如下

圖片

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

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

259.134-198.648=60.486uS

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

圖片

寫使能時(shí)間

由于編程完之后,NAND會(huì)自動(dòng)寫禁止,所以每次都需要重新寫使能。

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

對(duì)應(yīng)如下

273.890-259.134=14.756uS

圖片

編程時(shí)間

344.141-273.890=70.251

圖片

軟件處理時(shí)間

從下可以看出編程完成到下一次開(kāi)始,還有

91uS

圖片

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

所以整理下各階段的時(shí)間消耗如下

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

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

四. 性能優(yōu)化

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

1. 總線傳輸

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

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

圖片

2. 寫使能時(shí)間

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

3. 編程時(shí)間

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

圖片

4軟件處理時(shí)間

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

可以使用DMA或者提高Burst來(lái)減少該時(shí)間,

最好是這一部分工作由控制器完成,而不是軟件去搬運(yùn),比如軟件指定一個(gè)地址,控制器自動(dòng)從這個(gè)地址讀,或者寫入這個(gè)地址,而不是通過(guò)緩存再轉(zhuǎn)一遍,減少拷貝時(shí)間。

軟件時(shí)間還包括邏輯處理時(shí)間,比如一次傳輸?shù)较乱淮蝹鬏?,需要配?a href="http://www.www27dydycom.cn/tags/寄存器/" target="_blank">寄存器,進(jìn)行判斷,等邏輯處理。

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

對(duì)于HW層封裝可以使用宏或者內(nèi)聯(lián)函數(shù)替代函數(shù),減少函數(shù)調(diào)用時(shí)間,HW層和HAL不做參數(shù)檢查,因?yàn)榻涌谡{(diào)用頻繁等,在設(shè)備驅(qū)動(dòng)層做參數(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;
}

六.波形文件

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

波形文件使用軟件Acute TravelLogic Analyzer打開(kāi)查看。

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

七. 總結(jié)

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

審核編輯:湯梓紅

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

    關(guān)注

    16

    文章

    1713

    瀏覽量

    137613
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4469

    瀏覽量

    86895
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1749

    瀏覽量

    94075
  • 性能測(cè)試
    +關(guān)注

    關(guān)注

    0

    文章

    217

    瀏覽量

    21627
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用邏輯分析儀Acute TravelLogic Analyzer進(jìn)行SPI NAND驅(qū)動(dòng)開(kāi)發(fā)調(diào)試

    使用邏輯分析儀Acute TravelLogic Analyzer進(jìn)行SPI NAND驅(qū)動(dòng)開(kāi)發(fā)調(diào)試
    的頭像 發(fā)表于 06-08 11:13 ?6385次閱讀
    使用邏輯<b class='flag-5'>分析</b>儀Acute TravelLogic Analyzer進(jìn)行<b class='flag-5'>SPI</b> <b class='flag-5'>NAND</b><b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)調(diào)試

    雷龍CS SD NAND:貼片式TF卡體驗(yàn)與性能測(cè)試

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

    SD NAND、SPI NAND 和 Raw NAND 的定義與比較

    問(wèn)題,再也不用為SD卡的接觸穩(wěn)定性操心!   SD nand 和 SD 卡、SPI Nor flash、 nand flash、eeprom一樣,都是嵌入式系統(tǒng)中常見(jiàn)的用來(lái)存儲(chǔ)數(shù)據(jù)所使用的存儲(chǔ)芯片
    發(fā)表于 01-15 18:15

    SPI NAND FLASH 的簡(jiǎn)介和優(yōu)點(diǎn)

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

    SPI Nand Flash 簡(jiǎn)介

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

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

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

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

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

    NAND_Flash結(jié)構(gòu)與驅(qū)動(dòng)分析

    NAND_Flash結(jié)構(gòu)與驅(qū)動(dòng)分析NAND_Flash結(jié)構(gòu)與驅(qū)動(dòng)分析
    發(fā)表于 03-17 14:14 ?37次下載

    永磁驅(qū)動(dòng)電機(jī)接線盒結(jié)構(gòu)優(yōu)化性能分析_丁樹(shù)業(yè)

    永磁驅(qū)動(dòng)電機(jī)接線盒結(jié)構(gòu)優(yōu)化性能分析_丁樹(shù)業(yè)
    發(fā)表于 01-08 13:49 ?0次下載

    linux spi應(yīng)用層驅(qū)動(dòng)以及回環(huán)測(cè)試代碼

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

    SPI Nand Flash簡(jiǎn)介

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

    SD NANDSPI NAND的區(qū)別

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

    SD NAND、SPI NAND和eMMC的區(qū)別對(duì)比分析

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

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

    ? 2.2 Sysbench單線程CPU性能測(cè)試 ? 2.3 Sysbench多線程CPU性能測(cè)試(4線程) ? 2.4 高強(qiáng)度多線程CPU性能
    的頭像 發(fā)表于 12-30 14:52 ?471次閱讀
    華為云 X 實(shí)例 CPU <b class='flag-5'>性能</b><b class='flag-5'>測(cè)試</b>詳解與<b class='flag-5'>優(yōu)化</b>策略

    SD NANDSPI NAND 和 Raw NAND 的定義與比較

    問(wèn)題,再也不用為SD卡的接觸穩(wěn)定性操心! SD nand 和 SD 卡、SPI Nor flash、 nand flash、eeprom一樣,都是嵌入式系統(tǒng)中常見(jiàn)的用來(lái)存儲(chǔ)數(shù)據(jù)所使用的存儲(chǔ)芯片。 SD
    的頭像 發(fā)表于 01-15 18:16 ?576次閱讀
    SD <b class='flag-5'>NAND</b>、<b class='flag-5'>SPI</b> <b class='flag-5'>NAND</b> 和 Raw <b class='flag-5'>NAND</b> 的定義與比較