SPI4.2總線應(yīng)用和調(diào)試
圖3 日歷長度和重復(fù)次數(shù)都為4的數(shù)據(jù)傳輸示意圖
圖4 收發(fā)同步過程示意圖
SPI4.2總線接口的調(diào)試包括兩個重要步驟:鏈路的同步和數(shù)據(jù)的正常收發(fā)。
在調(diào)試鏈路同步時,首先必須查看總線兩端的初始化參數(shù)配置。因為SPI4.2 總線協(xié)議是一個對等端數(shù)據(jù)傳輸協(xié)議,所以大部分參數(shù)需要雙方的匹配和協(xié)商,特別是接收方和發(fā)送方的CALENDAR_LEN和CALENDAR_M參數(shù)。
如何查看同步呢?芯片通常會提供一個狀態(tài)寄存器來反映總線的同步?!敖邮胀綐?biāo)志”只能說明在數(shù)據(jù)鏈路上成功接收到對端的訓(xùn)練序列,但不能保證接收的狀態(tài)鏈路是正常的,如果需要確認可查看對端的“發(fā)送同步標(biāo)志”。在收發(fā)雙向通道應(yīng)用中,只有兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”都置位了,總線才算同步。此時,可以確認總線兩端的物理連接是正確的,握手成功。
如果不能同步,就必須檢查兩端的“接收同步標(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ò)處理器為例[2],SPI4.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ā)送端的Max
評論