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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于SPI配合DMA實(shí)現(xiàn)理論速度性能

331062281 ? 來(lái)源:RCSN嵌入式 ? 2023-07-21 10:17 ? 次閱讀

一、背景

在《先楫hpm6000的SPI外設(shè)使用四線模式操作讀寫華邦flash》一文中介紹了先楫SPI外設(shè)是為flash器件而生的控制器,但是樓主在該篇文章讀寫flash的頁(yè)是用的poll輪詢讀寫spi fifo的接口,并沒(méi)用DMA來(lái)進(jìn)行加速優(yōu)化。本篇就是基于SPI配合DMA實(shí)現(xiàn)理論速度性能。

二、問(wèn)題點(diǎn)

(一) SPI FIFO poll阻塞發(fā)送無(wú)法發(fā)揮SPI理論速度性能

使用spi poll阻塞的時(shí)候,雖然能實(shí)現(xiàn)數(shù)據(jù)的完整傳輸,但是傳輸?shù)臅r(shí)間并不能達(dá)到理想傳輸速度,比如SPI四線模式下,30M的SPI SCLK時(shí)鐘,理論可以達(dá)到15MB/S速度。但實(shí)際測(cè)量當(dāng)中并未達(dá)到該性能。從邏輯分析儀看到,發(fā)送flas一頁(yè)數(shù)據(jù),也就是256字節(jié),從開(kāi)始傳輸?shù)浇Y(jié)束傳輸?shù)臅r(shí)間需要37.034us,合計(jì)為6.91MB/S,與理論速度相差了2到3倍的距離。

ce1a537a-2769-11ee-962d-dac502259ad0.png

從波形上看,導(dǎo)致這個(gè)速度達(dá)不到原因就在于,每個(gè)字節(jié)之間存在了一定的間隔時(shí)間,這些間隔的累積導(dǎo)致傳輸時(shí)間變長(zhǎng),導(dǎo)致總的時(shí)間變長(zhǎng),進(jìn)而速度遠(yuǎn)遠(yuǎn)跟不上。

ce63203c-2769-11ee-962d-dac502259ad0.png

(二)使用了DMA仍然有SPI SCLK時(shí)鐘不連續(xù)問(wèn)題

從(一)的問(wèn)題可以看出,要想達(dá)到理論速度,必須消除每個(gè)字節(jié)的SCLK間隔,縮短傳輸時(shí)間。這時(shí)候需要DMA來(lái)加持速度性能,但實(shí)際上,在使用了相關(guān)配置之后,速度雖然有些提升,但還是存在些許間隔產(chǎn)生。

在這里的例子驗(yàn)證條件是:SPI SCLK時(shí)鐘頻率為50M,主機(jī)發(fā)送512字節(jié)。理論傳輸速度可以25MB/S.從邏輯分析儀可看到,間隔有所縮短,但依然存在字節(jié)間隔。512字節(jié)傳輸需要45.97us,合計(jì)為11.173MB/S。距離25MB/S也有兩倍的差距。

ce98458c-2769-11ee-962d-dac502259ad0.png

三、解決問(wèn)題

在二問(wèn)題的所有描述當(dāng)中,速度達(dá)不到理想性能,歸根到底是字節(jié)之間產(chǎn)生間隔累積形成。

所以我們的問(wèn)題解決點(diǎn)是:再配合DMA,進(jìn)行其他優(yōu)化。達(dá)到理想速度性能。

(一) 使用AHB SRAM(內(nèi)存32KB空間)作為數(shù)據(jù)交互RAM。

在HPM6000系列中,AHB/APB外設(shè)總線連接了一個(gè)內(nèi)存為32KB空間的AHB SRAM,與之同時(shí)連接的也有DMA控制器之一HDMA。

從官方文檔可知,AHB SRAM和HDMA以及SPI外設(shè)同樣位于AHB/APB外設(shè)總線中,AHB SRAM是專門給HDMA進(jìn)行低延時(shí)訪問(wèn)的內(nèi)存,也是SPI進(jìn)行DMA低延時(shí)傳輸保證。

cec90532-2769-11ee-962d-dac502259ad0.png

在上面的DMA搬運(yùn)中,待發(fā)送的數(shù)據(jù)放在AXI SRAM中。那么把這發(fā)送的數(shù)據(jù)放在AHB SRAM,看下會(huì)不會(huì)有所提升。

cf07639a-2769-11ee-962d-dac502259ad0.png

從以下邏輯分析儀結(jié)果看出,傳輸512字節(jié),相比放在AXI_SRAM中,在AHB_SRAM只需要22.97us,縮短了23us, 合計(jì)22MB/S,提高了兩倍速度性能。當(dāng)仍與25MB/S理想速度有些許差距。

cf293ad8-2769-11ee-962d-dac502259ad0.png

通過(guò)放大波形查看,有些字節(jié)依然產(chǎn)生間隔,這也是導(dǎo)致速度沒(méi)達(dá)到理想速度的原因。

cf619342-2769-11ee-962d-dac502259ad0.png

(二)使用DMA的burst突發(fā)傳輸

先楫的DMA,對(duì)于源地址數(shù)據(jù)來(lái)說(shuō),支持突發(fā)傳輸。例如傳輸位寬為8,設(shè)置burst數(shù)量為4,那么就是相當(dāng)一次DMA請(qǐng)求設(shè)置了4個(gè)節(jié)拍,連續(xù)傳輸4個(gè)字節(jié)。是單次傳輸?shù)?倍效率。在這里來(lái)說(shuō),待發(fā)送的數(shù)據(jù)就是源地址數(shù)據(jù)。

cf857b4a-2769-11ee-962d-dac502259ad0.png

先楫的SPI控制器有四個(gè)字的FIFO數(shù)據(jù)空間,每個(gè)FIFO是32位。SPI請(qǐng)求DMA搬運(yùn)是通過(guò)發(fā)送FIFO閾值請(qǐng)求。從效率上來(lái)看,最好是一次請(qǐng)求中能把FIFO數(shù)據(jù)全部搬運(yùn)。從上面的優(yōu)化流程來(lái)看,都設(shè)置為了默認(rèn),TX FIFO閾值設(shè)置為了0,也就是只要TXFIFO有一個(gè)為空就請(qǐng)求一次,DMA的源數(shù)據(jù)burst數(shù)量為0,也就是相當(dāng)設(shè)置了1個(gè)節(jié)拍的突發(fā)傳輸,傳輸寬度為8位,一次DMA請(qǐng)求就塞給一次FIFO,等待FIFO完全塞滿后這時(shí)候沒(méi)法請(qǐng)求,所以會(huì)導(dǎo)致一次周期的間隔,當(dāng)DMA收到請(qǐng)求后連這樣能解釋上面為何每隔四個(gè)字節(jié)會(huì)產(chǎn)生間隔的原因。

cfbc3752-2769-11ee-962d-dac502259ad0.png

所以這里我們可以SPI的TXFIFO閾值為3,當(dāng)出現(xiàn)一個(gè)空位的時(shí)候就請(qǐng)求一次,設(shè)置burst數(shù)量為2,也就是四個(gè)字節(jié),一次請(qǐng)求搬運(yùn)四個(gè)字節(jié)。通過(guò)邏輯分析儀可看到:

配合(一)的方案,傳輸512字節(jié),只需要20.468us,合計(jì)為25MB/S左右,接近了理想速度性能了。

cff5f26c-2769-11ee-962d-dac502259ad0.png

放大波形查看,也能看到SCLK時(shí)鐘連續(xù)了。

d01c8cc4-2769-11ee-962d-dac502259ad0.png

(三)壓榨性能(使用SPI的字節(jié)合并merge功能)

先楫官方手冊(cè)說(shuō)明的是SPI時(shí)鐘可以80M,保守是40M。在四線模式下,SPI時(shí)鐘SCLK為80M,相比單線來(lái)說(shuō)可以提高四倍性能傳輸,也就是可以達(dá)到40MB/S。

但是在實(shí)際操作的時(shí)候,分頻SPI SCLK頻率到66M,又出現(xiàn)了SCLK時(shí)鐘不連續(xù)的情況,導(dǎo)致與理想速度不符合。

d04fc6fc-2769-11ee-962d-dac502259ad0.png

仔細(xì)翻下官方手冊(cè),可以知道SPI有個(gè)寄存器是TRANSFMT,有一個(gè)位是DATAMERGE,對(duì)于描述如下:

d07de9d8-2769-11ee-962d-dac502259ad0.png

特別說(shuō)明的是,由于SPI的數(shù)據(jù)FIFO是32位,這個(gè)功能只在數(shù)據(jù)單位長(zhǎng)度為8位的時(shí)候有效,而且合并的數(shù)據(jù)量需要以四的整數(shù)倍。如此來(lái)說(shuō),在配置DMA的時(shí)候,傳輸寬度可以從8位變到32位,傳輸?shù)膸捯材芴岣吡怂谋?。那么我們這樣配置下,邏輯分析儀結(jié)果如下:

在66M的SPI SCLK時(shí)鐘下,邏輯分析儀抓到的SCLK能保持連續(xù),并且數(shù)據(jù)能對(duì)得上。512字節(jié)耗時(shí)15.352us,合計(jì)33MB/S左右,與理論速度33MB/S接近。

d0a7f750-2769-11ee-962d-dac502259ad0.png

80M的SPI SCLK頻率,傳輸512字節(jié),耗時(shí)12.794us,合計(jì)40MB/S左右,也能滿足預(yù)期40MB/S速度。

d0cafe3a-2769-11ee-962d-dac502259ad0.png

SCLK波形也能保持連續(xù)。

d1021bae-2769-11ee-962d-dac502259ad0.png

四、號(hào)外(單線SPI總線可以達(dá)到120M)

四線模式既然能達(dá)到80M,那么樓主想試下80M的單線,也是沒(méi)問(wèn)題的,效果如下:

d131423a-2769-11ee-962d-dac502259ad0.png

再嘗試一把,把SPI SCLK分頻到120M,只是稍微有點(diǎn)間隔,但單線SPI也是沒(méi)問(wèn)題的。

d165ae6c-2769-11ee-962d-dac502259ad0.png

五、總結(jié)

對(duì)于先楫這個(gè)SPI外設(shè)來(lái)說(shuō),配合DMA,SPI的數(shù)據(jù)FIFO以及相關(guān)SPI配置,能達(dá)到手冊(cè)描述的性能。無(wú)論是四線模式還是二線模式還是單線模式,都能到達(dá)80M的SPI時(shí)鐘性能。

對(duì)于SCLK不連續(xù)的問(wèn)題在于DMA搬運(yùn)和SPI傳輸不同步造成,導(dǎo)致傳輸間隔中斷,特別是SPI頻率越來(lái)越高的情況下。解決同步問(wèn)題就不會(huì)有SCLK不連續(xù)的問(wèn)題存在。

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16103

    瀏覽量

    177071
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147652
  • 主機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    982

    瀏覽量

    35007
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1714

    瀏覽量

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

    關(guān)注

    17

    文章

    1688

    瀏覽量

    91202

原文標(biāo)題:開(kāi)發(fā)者分享| [玩轉(zhuǎn)先楫SPI外設(shè)系列之一] 細(xì)說(shuō)SPI主機(jī)發(fā)送性能最大化實(shí)現(xiàn)方案

文章出處:【微信號(hào):HPMicro,微信公眾號(hào):先楫半導(dǎo)體HPMicro】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一種高性能多通道通用DMA設(shè)計(jì)與實(shí)現(xiàn)

    為充分發(fā)揮異構(gòu)多核DSP芯片的實(shí)時(shí)計(jì)算能力,設(shè)計(jì)并實(shí)現(xiàn)了一種高性能多通道的通用DMA,該DMA最大支持64個(gè)通道的數(shù)據(jù)搬運(yùn),并支持一維、二維、轉(zhuǎn)置以及級(jí)聯(lián)描述符等多種傳輸模式。芯片實(shí)測(cè)
    的頭像 發(fā)表于 11-20 15:52 ?1064次閱讀
    一種高<b class='flag-5'>性能</b>多通道通用<b class='flag-5'>DMA</b>設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    STM32 SPI DMA 的使用

    可以執(zhí)行其它任務(wù),只有在整個(gè)數(shù)據(jù)塊傳輸結(jié)束后,需要處理這些數(shù)據(jù)時(shí)才會(huì)中斷主處理器的操作。它可以在對(duì)系統(tǒng)性能產(chǎn)生較小影響的情況下,實(shí)現(xiàn)大量數(shù)據(jù)的傳輸。 五、SPI_DMA的通信過(guò)程·設(shè)置外設(shè)地址·設(shè)置
    發(fā)表于 07-19 19:02

    SPI DMA的無(wú)線傳輸速率

    請(qǐng)問(wèn),SPI DMA作為從機(jī)接收速度可以達(dá)到多快 SPI DMA的傳輸方式是一次性接收多少字節(jié)?1024個(gè)字節(jié)嗎 我用作為服務(wù)器模式發(fā)送給T
    發(fā)表于 06-21 10:58

    DMA與DAC之間如何配合工作

    要輸出正弦波,需要好幾個(gè)外設(shè)配合:Timer、DAC、DMA。TImer用來(lái)設(shè)置正弦波的頻率的;DAC顧名思義將數(shù)字量轉(zhuǎn)換成模擬量,在這里就是轉(zhuǎn)化成電壓信號(hào);DMA直接控制DAC輸出,而不用麻煩芯片
    發(fā)表于 08-18 08:09

    SPI主從機(jī)DMA通信如何實(shí)現(xiàn)?

    SPI主從機(jī)硬件連接關(guān)系是怎樣的?SPI主從機(jī)DMA通信如何實(shí)現(xiàn)?
    發(fā)表于 02-17 06:15

    SPI改變時(shí)鐘頻率或者加上DMA對(duì)SPI FLASH性能有何影響?

    寫入的影響都不大,速度都是一樣的.提升時(shí)鐘頻率的話,要求驅(qū)動(dòng)能力也要跟上(例如加上DMA),不然改變變化不大.甚至倒退?問(wèn)題所以我測(cè)試的是否有問(wèn)題?加入DMA對(duì)讀取和擦除為什么可以有影響?為什么怎么改變方式,對(duì)于擦除沒(méi)有任何影響
    發(fā)表于 02-02 15:24

    SPI—CH32V307VCT6實(shí)現(xiàn)SPI從機(jī)DMA收發(fā)

    SPI從機(jī)DMA收發(fā)使用CH32V307VCT6單片機(jī)實(shí)現(xiàn)主從SPI數(shù)據(jù)交換SPI從機(jī)IO口配置從機(jī)SP
    發(fā)表于 03-08 10:50

    測(cè)試一下SPI讀寫SD卡的速度

    的判斷等操作,而且單字節(jié)傳輸也嚴(yán)重影響效率。如果自己優(yōu)化一下,相信效率會(huì)有很大的提升。有興趣的小伙伴可以試試。我們這次其實(shí)主要是測(cè)試SPI+DMA速度,所以就不在這里糾結(jié)了?! ?.SPI+DMA接口
    發(fā)表于 03-23 14:47

    GD32-Colibri-F207實(shí)驗(yàn)板SPI-DMA

    GD32-Colibri-F207實(shí)驗(yàn)板SPI-DMA,很好的GD32資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-21 16:35 ?43次下載

    如何使用STM32單片機(jī)實(shí)現(xiàn)DMA的同時(shí)發(fā)送和接收

    SPI通信中,可以同時(shí)開(kāi)啟發(fā)送和接收DMA請(qǐng)求,自動(dòng)數(shù)據(jù)的發(fā)送和接收,完成數(shù)據(jù)的交換 基本步驟是: 1. 配置好SPI相應(yīng)引腳功能 2. 配置和初始化SPI
    發(fā)表于 12-07 15:26 ?1w次閱讀

    GD32F103配置SPI+DMA收發(fā)數(shù)據(jù)

    本文介紹如何配置GD32F103系列的SPIDMA,并貼出相關(guān)代碼。
    發(fā)表于 12-22 19:15 ?107次下載
    GD32F103配置<b class='flag-5'>SPI+DMA</b>收發(fā)數(shù)據(jù)

    stm32f103使用dma和fpga進(jìn)行spi通信

    stm32作為從機(jī),fpga作為主機(jī)。進(jìn)行spi通信。stm32使用dma進(jìn)行數(shù)據(jù)接收。在dma中斷中進(jìn)行接收數(shù)據(jù)和處理。通過(guò)調(diào)節(jié)fpga里面spi數(shù)據(jù)的發(fā)送頻率。來(lái)保證stm32實(shí)時(shí)
    發(fā)表于 12-22 19:29 ?94次下載
    stm32f103使用<b class='flag-5'>dma</b>和fpga進(jìn)行<b class='flag-5'>spi</b>通信

    細(xì)說(shuō)SPI主機(jī)發(fā)送性能最大化實(shí)現(xiàn)方案

    spififo的接口,并沒(méi)用DMA來(lái)進(jìn)行加速優(yōu)化。本篇就是基于SPI配合DMA實(shí)現(xiàn)理論速度
    的頭像 發(fā)表于 07-31 23:03 ?3165次閱讀
    細(xì)說(shuō)<b class='flag-5'>SPI</b>主機(jī)發(fā)送<b class='flag-5'>性能</b>最大化<b class='flag-5'>實(shí)現(xiàn)</b>方案

    基于STM32H7 EXTI+SPI+DMA雙緩沖應(yīng)用演示

    最近有STM32用戶咨詢---如何基于STM32H7系列芯片用EXTI0中斷同步觸發(fā)SPI DMA實(shí)現(xiàn)DMA雙緩沖功能。當(dāng)然,在論壇上也有發(fā)布類似咨詢帖。其實(shí),老早之前我算是未雨綢繆
    的頭像 發(fā)表于 08-21 09:12 ?4642次閱讀
    基于STM32H7 EXTI+<b class='flag-5'>SPI+DMA</b>雙緩沖應(yīng)用演示

    使用i.MX RT500實(shí)現(xiàn)SPI/DMA AN14170應(yīng)用指南

    電子發(fā)燒友網(wǎng)站提供《使用i.MX RT500實(shí)現(xiàn)SPI/DMA AN14170應(yīng)用指南.pdf》資料免費(fèi)下載
    發(fā)表于 02-01 10:05 ?0次下載
    使用i.MX RT500<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>SPI</b>/<b class='flag-5'>DMA</b> AN14170應(yīng)用指南