一、背景
在《先楫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倍的距離。
從波形上看,導(dǎo)致這個(gè)速度達(dá)不到原因就在于,每個(gè)字節(jié)之間存在了一定的間隔時(shí)間,這些間隔的累積導(dǎo)致傳輸時(shí)間變長(zhǎng),導(dǎo)致總的時(shí)間變長(zhǎng),進(jìn)而速度遠(yuǎn)遠(yuǎn)跟不上。
(二)使用了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也有兩倍的差距。
三、解決問(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í)傳輸保證。
在上面的DMA搬運(yùn)中,待發(fā)送的數(shù)據(jù)放在AXI SRAM中。那么把這發(fā)送的數(shù)據(jù)放在AHB SRAM,看下會(huì)不會(huì)有所提升。
從以下邏輯分析儀結(jié)果看出,傳輸512字節(jié),相比放在AXI_SRAM中,在AHB_SRAM只需要22.97us,縮短了23us, 合計(jì)22MB/S,提高了兩倍速度性能。當(dāng)仍與25MB/S理想速度有些許差距。
通過(guò)放大波形查看,有些字節(jié)依然產(chǎn)生間隔,這也是導(dǎo)致速度沒(méi)達(dá)到理想速度的原因。
(二)使用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ù)。
先楫的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)生間隔的原因。
所以這里我們可以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左右,接近了理想速度性能了。
放大波形查看,也能看到SCLK時(shí)鐘連續(xù)了。
(三)壓榨性能(使用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)致與理想速度不符合。
仔細(xì)翻下官方手冊(cè),可以知道SPI有個(gè)寄存器是TRANSFMT,有一個(gè)位是DATAMERGE,對(duì)于描述如下:
特別說(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接近。
80M的SPI SCLK頻率,傳輸512字節(jié),耗時(shí)12.794us,合計(jì)40MB/S左右,也能滿足預(yù)期40MB/S速度。
SCLK波形也能保持連續(xù)。
四、號(hào)外(單線SPI總線可以達(dá)到120M)
四線模式既然能達(dá)到80M,那么樓主想試下80M的單線,也是沒(méi)問(wèn)題的,效果如下:
再嘗試一把,把SPI SCLK分頻到120M,只是稍微有點(diǎn)間隔,但單線SPI也是沒(méi)問(wèn)題的。
五、總結(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)題存在。
審核編輯:湯梓紅
-
控制器
+關(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
+關(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)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論