SPI-4.2總線應(yīng)用和調(diào)試經(jīng)驗談
在接收方,接收模塊(RX)在數(shù)據(jù)鏈路成功接收到對端發(fā)送的訓(xùn)練序列后,會設(shè)置本端的接收同步標(biāo)志;然后通過狀態(tài)鏈路發(fā)送訓(xùn)練序列,一旦發(fā)送模塊成功接收到訓(xùn)練序列后,就設(shè)置本端的發(fā)送同步標(biāo)志。
在同步過程中,訓(xùn)練序列由指定的連續(xù)的DIP-4碼字組成。發(fā)送模塊必須連續(xù)發(fā)送訓(xùn)練序列,直到本端的狀態(tài)鏈路收到有效信息。同時,接收模塊忽視所有接收到的數(shù)據(jù),直到觀察到訓(xùn)練序列,獲得數(shù)據(jù)同步。一旦數(shù)據(jù)鏈路同步之后,F(xiàn)IFO隊列狀態(tài)信息就開始傳送。如果發(fā)送
方接收到有效的狀態(tài)信息,它就可以開始進行數(shù)據(jù)突發(fā)傳輸。
如果在工作過程中,由于某些原因(例如一端器件掉電或重啟)導(dǎo)致總線失步,那么為了再次獲得同步,雙方需要按照上述過程發(fā)送連續(xù)的訓(xùn)練序列,直到建立同步為止。
3 SPI-4.2總線接口的調(diào)試
SPI-4.2總線接口的調(diào)試包括兩個重要步驟:鏈路的同步和數(shù)據(jù)的正常收發(fā)。
在調(diào)試鏈路同步時,首先必須查看總線兩端的初始化參數(shù)配置。因為SPI-4.2總線協(xié)議是一個對等端數(shù)據(jù)傳輸協(xié)議,所以大部分參數(shù)需要雙方的匹配和協(xié)商,特別是接收方和發(fā)送方的CALENDAR_LEN和CALENDAR_M參數(shù)。
如何查看同步呢?芯片通常會提供一個狀態(tài)寄存器來反映總線的同步。“接收同步標(biāo)志”只能說明在數(shù)據(jù)鏈路上成功接收到對端的訓(xùn)練序列,但不能保證接收的狀態(tài)鏈路是正常的,如果需要確認(rèn)可查看對端的“發(fā)送同步標(biāo)志”。在收發(fā)雙向通道應(yīng)用中,只有兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”都置位了,總線才算同步。此時,可以確認(rèn)總線兩端的物理連接是正確的,握手成功。
如果不能同步,就必須檢查兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”,判斷是哪一端出了問題。檢查是否有DIP4和DIP2錯誤,如果有此類錯誤,說明鏈路上信號質(zhì)量可能不佳,可以用示波器測量信號波形。如果信號質(zhì)量確實不好,可以通過提高信號驅(qū)動能力或者調(diào)整硬件匹配阻抗來優(yōu)化。如果兩端的接收和發(fā)送都沒有同步,就必須測量芯片的電壓、工作頻率、重啟等信號。
如果兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”都已經(jīng)置位,說明雙方的接收和發(fā)送都同步,可以正常收發(fā)數(shù)據(jù)了。在大流量數(shù)據(jù)傳輸過程中,最相關(guān)的是FIFO隊列的參數(shù)配置,配置不當(dāng)會導(dǎo)致錯包或丟包。以NetLogic公司的XLR732網(wǎng)絡(luò)處理器為例,SPI-4.2總線的發(fā)送模塊的所有邏輯端口共享一個FIFO隊列,寬度為16字節(jié),長度為128;接收模塊的所有邏輯端口共享一個FIFO隊列,寬度為16字節(jié),長度為512。每個邏輯端口所占用的隊列地址和大小都可以通過寄存器配置。
假如某個端口接收端隊列的長度是48,MaxBurst1是12,MaxBurst2是8。那么當(dāng)該模塊接收數(shù)據(jù)時,如果由于某些原因(例如軟件來不及處理),接收隊列只剩下12個空位,也就是接收隊列已經(jīng)有48-12=36個空位被占用時,它將通過狀態(tài)鏈路向?qū)Χ税l(fā)送“餓”的狀態(tài)信號(反壓信號)。對端收到該信號后實施流控策略,根據(jù)本端發(fā)送端的MaxBurst1設(shè)置值發(fā)送數(shù)據(jù),該值表示接收到“餓”狀態(tài)信號后最多還可以發(fā)送的數(shù)據(jù)塊數(shù)目。所以接收端的MaxBurst1的值一定要大于對端發(fā)送端的MaxBurst1,并且要留出一定的余量,因為數(shù)據(jù)在鏈路上的傳輸也是需要時間的。同理,接收端的MaxBurst2要大于對端發(fā)送端的MaxBurst2。值得注意的是,流控是基于邏輯端口的,而不是整條鏈路。
為保證不發(fā)生接收端FIFO隊列溢出等問題,盡量將接收端的MaxBurst1和MaxBurst2設(shè)置大一些,只要小于FIFO入口總數(shù)就可以,而發(fā)送端MaxBurst1和MaxBurst2的設(shè)置不要超過本端接收能力。
如果出現(xiàn)EOP(結(jié)束包)和SOP(起始包)錯誤或缺失,或者其他錯包(例如包長變短、幀校驗錯誤等),但沒有DIP4錯誤,該怎么辦?這類問題一般出現(xiàn)在FIFO隊列設(shè)置上,尤其是接收端的FIFO隊列可能溢出,從而丟失了某些數(shù)據(jù)塊,可以通過以下3種方法來檢測和解決:
①通過查看接收端FIFO溢出標(biāo)志來判斷FIFO隊列是否溢出;
②通過調(diào)整接收端的MaxBurst1和MaxBurst2來防止FIFO隊列溢出;
③如果方法②的調(diào)整足夠大,還有此問題,可以查看對端是否收到反壓信號,以及對端的狀態(tài)等。
為了方便,通常將發(fā)送端的MaxBurst1和MaxBurst2設(shè)置為相同數(shù)值,將接收端的MaxBurst1和MaxBurst2也設(shè)置成相同數(shù)值。
結(jié)語
隨著處理器的速度越來越快,處理器集成的內(nèi)核越來越多,處理器與外圍器件之間,處理器之間,以及外圍器件之間的連接速度逐漸成為制約平臺性能的瓶頸。許多芯片同時集成了多個總線接口,例如XLR732同時擁有SPI-4.2、HT、以太網(wǎng)3種總線接口。SPI-4.2總線在與其
他總線的競爭中體現(xiàn)出了強大的生命力,希望本文所介紹的經(jīng)驗對正在應(yīng)用或計劃應(yīng)用SPI-4.2總線的同行有所幫助。
評論