兩者之間是否有區別,還是僅僅是一個抽象問題?我的直覺說沒有什麼區別,但我很想錯。
兩者之間是否有區別,還是僅僅是一個抽象問題?我的直覺說沒有什麼區別,但我很想錯。
MCU中的實際SPI控制器外圍設備通常可以比接口的位衝擊更快。當然,這取決於MCU,但是看到SPI控制器以30 MHz以上的頻率運行,而比特跳動可能會限制在1 MHz左右(如果幸運的話),這不會令我驚訝。 >但是還有更多。當位撞擊時,MCU忙於位撞擊。它正在移出數據並旋轉GPIO線。意思是,它不能做其他任何事情。使用SPI控制器時,控制器忙於做所有這些事情,而MCU則可以自由地做其他事情。
因此,使用實際的SPI控制器,實際的SPI傳輸要快得多,MCU可以收回一些週期,可以用來做其他事情。
使用兩種方法都可以達到相同的結果並沒有什麼區別,但是出於某些原因,您會選擇其中一種。
使用SPI外設可以使處理器擺脫困境。不必擔心產生位撞擊I / O引腳的時序,使其能夠執行其他計算任務並簡化CPU的編程。由於外設是在硬件中實現的,因此與位衝擊I / O相比,它可以運行得更快,功耗更低。如果您的應用程序要求您選擇不帶SPI外圍設備的處理器,則在某些情況下,您可能希望使用I / O來與SPI接口。出於理智的考慮,除非絕對必要,否則我建議避免這樣做。
SPI是一個同步 i>接口,由主機控制時鐘。這意味著,如果您是大師,您將可以選擇時鐘速度和時序。從設備將可以處理的時鐘頻率有一些上限,但通常不在乎時鐘低於該頻率的速度。更具體地說,每個從站通常需要最短的時間才能看到時鐘處於高低狀態,然後才能再次切換,並且在時鐘沿周圍的數據線上存在一些最小數據建立和保持限制,從設備讀取數據線。
因此,在固件中實現SPI主設備確實非常容易。我經常這樣做是為了在沒有內置SPI硬件或者出於某種原因而無法用於某些目的時方便使用某些引腳。在固件中完成一個SPI主設備的過程幾乎就很容易。
許多SPI從設備速度非常快,因此通常只需確保每個時鐘週期至少一個指令周期即可滿足最小時鐘和建立時間寬。在這種情況下,代碼非常短且快速。在某些情況下,從設備每個時鐘相位可能需要兩個或三個指令周期,但這並不是很難保證的。低電平SPI位循環需要將下一個輸出位移入位置,抓取輸入位,並檢查循環計數器。通常,只需安排行車時間和採樣時間,並在正確的位置插入一些其他開銷,即可滿足兩個或三個週期的最小計時要求。如果速度很重要,則可以使用彙編器預處理器編寫展開循環。借助這樣的技術,您通常可以以大約從設備可以處理的速度獲得純固件SPI。
在固件中進行SPI主控有一些優勢。 SPI硬件有時在如何配置方面有點可笑。始終存在一個問題,即當從機選擇有效時,應該立即發生什麼。然後將第一位寫入數據線嗎?如果時鐘開始變低並且數據線應該在下降沿被鎖存怎麼辦?有時候這很重要,有時候卻沒有。使用固件SPI主設備,您可以更加寬容,並可能使用相同的例程與不同的從設備進行通信。例如,您可以確保MOSI(主輸出從輸入)數據線在時鐘的兩個邊沿上都是穩定的。 SPI硬件通常不會這樣做,因此需要根據當時與哪個從設備通信來重新配置此類硬件。
固件SPI主設備的另一個優點是您可以選擇每個SPI序列中任意數量的位。硬件通常限於8位的倍數。大多數設備旨在允許整個字節傳輸,但通常不需要它們。例如,一個10位的A / D可能會先發送10個數據位,然後如果繼續為其計時,則發送0或垃圾。如果使用硬件SPI,則將被迫傳輸16位並掩蓋垃圾。一切都可以正常工作,但是在這種情況下,固件SPI主控實際上可以比硬件更快,因為它僅傳輸最少的10位。
硬件SPI主機的主要優點是固件可以啟動字節傳輸,然後執行其他操作。時鐘通常還比展開的固件循環所能達到的更快。請注意,雖然這兩個優點在某些情況下可能很重要,但它們通常無關緊要。使用硬件傳輸字節的大多數SPI代碼隨後立即進入等待循環,以等待硬件完成傳輸。還要仔細檢查從機時序要求。 SPI設備總體上總體上是快速的,但是在某些情況下,無論如何,您都需要降低硬件速度以匹配從設備可以處理的最大速度。簡而言之,將SPI硬件用作主設備通常沒有什麼優勢,而有時不使用它甚至還有一些優勢。但是,對於奴隸來說,一切都不同。由於主機控制時鐘,因此從機必須為主機做任何準備。相對於指令時間而言,時序要求通常很短,因此通常需要硬件來實現SPI從設備。
您可以在固件中處理SPI從設備,但這很棘手,您必須仔細計算週期和等待時間,並且通常最終會實現您知道特定主機使用的協議的子集。例如,有一次我不得不設計與舊的模擬控制器板等效的數字器件(他們希望獲得模擬中無法合理完成的額外功能,並且他們想要更小,更便宜且更穩定的產品)。該開發板通過SPI總線連接到系統的其餘部分。舊的模擬板有兩個通道的D / A來設置控制值,還有一個兩個通道的A / D來回讀測量值。在單個處理器中實現這兩者都是很棘手的,其中包括弄清楚現有主機實際使用了硬件D / A和A / D SPI協議的哪些子集。它還開發了一種處理器,該處理器的運行速度可能比SPI時鐘速率快得多。最後,我使用了三個中斷,一個用於每個從機選擇,一個用於時鐘線的上升沿。最後一個中斷必須是系統中優先級最高的中斷,否則就無法滿足延遲要求。
總而言之,總的一點是,固件SPI主控器容易,小型,快速且靈活。 ,而且沒有理由迴避做某事。另一方面,對於從屬服務器,您確實需要硬件,或者您必須醒來並仔細考慮時序,延遲等。
這取決於您要執行SPI的目的。如果您的興趣是從中獲得最高的數據速率,那麼硬件總是比bitbanging快(例如,teensy中的手臂皮質芯片3我可以使用硬件SPI支持以22Mbps的速度推出數據,而bitbanging的速度為〜4.5Mbps(它還可以處理3-16中每次傳輸的任意數量的比特-在以12位塊的形式向某些led控制器發送數據時非常有用!))。在16Mhz avrs上,兩者之間的差異不太明顯,硬件的最高數據速率似乎是4Mbps /低5Mbps,而bitbanging約為2.3Mbps。
此外,如果您使用硬件支持,再次,根據所討論的微控制器,您可以使用DMA控制器將數據移出,從而使代碼返回到其他比保管數據寫入更有趣的事情。
以上所有內容都取決於是否可以選擇硬件SPI。
如果對SPI進行位擴展,則無法使用SSP中斷來處理通信。對於SPI的許多用途來說,這並不重要