串行外設接口SPI的傳輸控制方法、裝置及系統與流程
2023-06-07 02:44:16
本發明涉及智能交通技術領域,具體而言,涉及一種串行外設接口spi的傳輸控制方法、裝置及系統。
背景技術:
串行外設接口(serialperipheralinterfacemaster,簡稱為spi)flash因其使用方便,易於連接,管腳較少等特點,在嵌入式系統中應用比較多。但是因為其使用串行傳輸數據,受限於可工作的時鐘的頻率範圍,傳輸較慢。並且單片flash的擦除和寫入速度也會成為系統瓶頸。
針對相關技術中需要多個spi控制器控制多片spiflash的問題,還未提出有效的解決方案。
技術實現要素:
本發明提供了一種spi的傳輸控制方法及裝置,以至少解決相關技術中需要多個spi控制器控制多片spiflash的問題。
根據本發明的一個方面,提供了一種spi的傳輸控制方法,包括:為單個spi控制器配置可編程器件;通過配置的所述可編程器件對多片spiflash的傳輸進行控制。
進一步地,通過配置的所述可編程器件對所述多片spiflash的傳輸進行控制包括:通過所述可編程器件將所述spi控制器的輸出時鐘clk進行分頻,產生多個相位不同的時鐘分別傳入所述多片spiflash訪問所述多片spiflash。
進一步地,通過配置的所述可編程器件對所述多片spiflash的傳輸進行控制包括:通過配置的所述可編程器件對所述多片spiflash的寫操作和讀操作進行控制;其中,所述寫操作為,通過將待寫入數據依次輸出到所述spi控制器的輸出mosi,分別連接到所述多片spiflash的輸出mosi,其中,所述多片spiflash在各自分頻後的時鐘clk的驅動下採樣mosi上的信號,作為所述多片spiflash的輸入數據;所述讀操作為,將所述多片spiflash返回的數據還原為能夠解析的數據。
進一步地,將所述多片spiflash返回的數據還原為能夠解析的數據包括:在數據傳輸階段,通過所述可編程器件將所述多片spiflash的輸出合成為一路所述spi控制器的輸入miso,其中,所述可編程器件在所述spi控制器的輸出時鐘clk的上升沿分別對所述多片spiflash的輸出依次採樣,所述多片spiflash的輸出為所述多片spiflash 根據配置模式的不同,在分頻後的clk的上升沿或下降沿發送的數據。
進一步地,所述可編程器件為邏輯可編程器件(complexprogrammablelogicdevice,簡稱為cpld)和現場可編程門陣列(field-programmablegatearray,簡稱為fpga)。
根據本發明的另一方面,提供了一種串行外設接口spi的傳輸控制裝置,包括:配置模塊,用於為單個spi控制器配置可編程器件;控制模塊,用於通過配置的所述可編程器件對多片spiflash的傳輸進行控制。
進一步地,所述控制模塊包括:訪問單元,用於通過所述可編程器件將所述spi控制器的輸出時鐘clk進行分頻,產生多個相位不同的時鐘分別傳入所述多片spiflash訪問所述多片spiflash。
根據本發明的另一方面,還提供了一種串行外設接口spi的傳輸控制系統,包括:一個spi控制器、可編程器件和多片spiflash,其中,所述spi控制器與所述可編程器件連接;所述可編程器件分別與所述多片spiflash連接,用於通過所述可編程器件對所述多片spiflash的數據傳輸進行控制。
進一步地,所述spi控制器的時鐘信號clk,輸入miso,輸出的片選ss經所述可編程器件處理後,分別與所述多片spiflash連接;所述spi控制器的輸出mosi直接輸出到所述多片spiflash。
進一步地,所述可編程器件為邏輯可編程器件cpld和現場可編程門陣列fpga。
通過本發明,採用為單個spi控制器配置可編程器件;通過配置的所述可編程器件對多片spiflash的傳輸進行控制,解決了相關技術中需要多個spi控制器控制多片spiflash的問題,節省了cpu的佔用,提高了訪問速度。
附圖說明
此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用於解釋本發明,並不構成對本發明的不當限定。在附圖中:
圖1是根據本發明實施例的串行外設接口spi的傳輸控制方法的流程圖;
圖2是根據本發明實施例的串行外設接口spi的傳輸控制裝置的框圖;
圖3是根據本發明優選實施例的串行外設接口spi的傳輸控制裝置的框圖一;
圖4是根據本發明實施例的spi訪問控制系統連接的框圖;
圖5是根據本發明實施例的spi訪問控制方法的流程圖;
圖6是根據本發明實施例的單片spi連接兩片spiflash的時序示意圖;
圖7是根據本發明實施例的單片spi連接四片spiflash的時序示意圖。
具體實施方式
下文中將參考附圖並結合實施例來詳細說明本發明。需要說明的是,在不衝突的情況下,本申請中的實施例及實施例中的特徵可以相互組合。
本發明實施例提供了一種串行外設接口spi的傳輸控制方法,圖1是根據本發明實施例的串行外設接口spi的傳輸控制方法的流程圖,如圖1所示,包括:
步驟s102,為單個spi控制器配置可編程器件;
步驟s104,通過配置的該可編程器件對多片spiflash的傳輸進行控制。
通過上述步驟,為單個spi控制器配置可編程器件;通過配置的該可編程器件對多片spiflash的傳輸進行控制,解決了相關技術中需要多個spi控制器控制多片spiflash的問題,節省了cpu的佔用,提高了訪問速度。
在一個可選的實施例中,通過配置的該可編程器件對該多片spiflash的傳輸進行控制可以包括:通過該可編程器件將該spi控制器的輸出時鐘clk進行分頻,產生多個相位不同的時鐘分別傳入該多片spiflash訪問該多片spiflash。
在另一個可選的實施例中,通過配置的該可編程器件對該多片spiflash的傳輸進行控制可以包括:通過配置的該可編程器件對該多片spiflash的寫操作和讀操作進行控制;其中,該寫操作為,通過將待寫入數據依次輸出到該spi控制器的輸出mosi,分別連接到該多片spiflash的輸出mosi,其中,該多片spiflash在各自分頻後的時鐘clk的驅動下採樣mosi上的信號,作為該多片spiflash的輸入數據;該讀操作為,將該多片spiflash返回的數據還原為能夠解析的數據。
進一步地,將該多片spiflash返回的數據還原為能夠解析的數據可以包括:在數據傳輸階段,通過該可編程器件將該多片spiflash的輸出合成為一路該spi控制器的輸入miso,其中,該可編程器件在該spi控制器的輸出時鐘clk的上升沿分別對該多片spiflash的輸出依次採樣,該多片spiflash的輸出為該多片spiflash根據配置模式的不同,在分頻後的clk的上升沿或下降沿發送的數據。
進一步地,該可編程器件可以為邏輯可編程器件cpld和現場可編程門陣列fpga。
本發明實施例提供了一種串行外設接口spi的傳輸控制裝置,圖2是根據本發明實施例的串行外設接口spi的傳輸控制裝置的框圖,如圖2所示,包括:
配置模塊22,用於為單個spi控制器配置可編程器件;
控制模塊24,用於通過配置的該可編程器件對多片spiflash的傳輸進行控制。
圖3是根據本發明優選實施例的串行外設接口spi的傳輸控制裝置的框圖一,如圖3所示,控制模塊24包括:
訪問單元32,用於通過該可編程器件將該spi控制器的輸出時鐘clk進行分頻,產生多個相位不同的時鐘分別傳入該多片spiflash訪問該多片spiflash。
本發明實施例還提供了一種串行外設接口spi的傳輸控制系統,包括:一個spi控制器、可編程器件和多片spiflash,其中,
該spi控制器與該可編程器件連接;
該可編程器件分別與該多片spiflash連接,用於通過該可編程器件對該多片spiflash的數據傳輸進行控制。
進一步地,該spi控制器的時鐘信號clk,輸入miso,輸出的片選ss經該可編程器件處理後,分別與該多片spiflash連接;該spi控制器的輸出mosi直接輸出到該多片spiflash。
進一步地,該可編程器件為邏輯可編程器件cpld和現場可編程門陣列fpga。
下面以cpld為例,結合具體實施例對本發明實施例進行進一步說明。
本發明實施例提供了一種單spi控制器實現多片spiflash的訪問方法,在不改變spi和flash通信協議的情況下,可以成倍地提高spiflash的讀寫傳輸和擦寫速度。其具體步驟如下:
圖4是根據本發明實施例的spi訪問控制系統連接的框圖,如圖4所示,spi控制器端有四個信號,分別是時鐘信號clk(clock),spi控制器的輸出mosi(masteroutputslaveinput),spi控制器的輸入miso(maserinputslaveoutput),以及spi控制器輸出的片選ss(slaveslect)。其中,mosi信號直接輸出到spiflash,其它三個信號都要經過可編程邏輯器件處理後,再分別與spiflash連接;
可編程邏輯器件將clk信號n分頻,輸出多路相位相差1個clk周期的時鐘,分別輸出連接至多片spiflash的時鐘輸入中,其中,n應為2的整數倍,能夠連接的最大flash數為n片;
傳輸流程與基本spi傳輸基本保持一致,分為三個階段,分別為命令字(command)傳輸階段,地址(address)傳輸階段和數據(data)傳輸階段。命令字和地址傳輸到spiflash端,根據工作模式的不同,在分頻後的clkn的上升沿或下降沿進行採樣和發送。
對於一個典型的寫操作,cpu將需要寫入的數據依次輸出到mosi,直接連接到每片spiflash的mosi0到mosi(n-1)。在該階段,spiflash晶片在各自分頻後的時鐘clkn的驅動下採樣mosi上的信號,作為自己的輸入數據。寫操作只需關注spiflash可正確採樣數據,但對於一個讀操作,還需要將spiflash返回的數據還原為cpu可以 解析的數據。讀操作的數據(data)傳輸階段,spiflash端根據配置的模式的不同,在分頻後的clkn的上升沿或下降沿發送數據,可編程邏輯器件在數據傳輸階段,在每個cpu輸出的時鐘clk的上升沿分別對多路輸出依次採樣,並保持一個周期時間,將多路輸出合成為一路miso輸入到cpu端解析。
本發明實施例提出的單spi控制器實現多片spiflash提速訪問的方法,僅使用單個spi控制器,不需要額外佔用cpu的spi控制器,能夠解決spi傳輸受限於可工作的時鐘的頻率範圍和擦寫速度慢的局限,具有非常好的實用價值。
在一個讀spi操作實例中,系統主要由spi控制器和兩片spiflash組成,spi控制器端時鐘信號clk,miso,ss經cpld處理後,分別與兩片spiflash連接;mosi直接輸出到spiflash。
傳輸階段分為三個階段,第一階段spi控制器(spimaster)輸出命令字信號,第二階段spi控制器(spimaster)輸出訪問地址信號,第三階段spiflash輸出回讀數據。
圖5是根據本發明實施例的spi訪問控制方法的流程圖,如圖5所示,具體傳輸的數據如下:
通過單spi控制器實現多片spiflash提速訪問的方法具體包括如下步驟:
步驟s1,配置spi控制器的工作模式,以配置spi控制器工作在模式1為例,在上升沿發送數據,下降沿採樣數據。
步驟s2,圖6是根據本發明實施例的單片spi連接兩片spiflash的時序示意圖,如圖6所示,在傳輸第一階段,首先將片選ss拉低。spi控制器在上升沿依次發送命令字信號,命令字字長8比特,因為連接有兩片spiflash,所以讀命令字需發送兩遍。其中,兩片spiflash分別稱為a,b,發送方式為:依次發送兩片spiflash命令字的第7(0-base)比特的內容,依次類推,直至發送完兩片spiflash第0(0-base)比特的內容,具體步驟如下。在第一個上升沿,發送給a命令字的第7個比特(0-base),第二個上升沿,發送給b命令字的第7個比特(0-base);依次類推,在奇數上升沿發送給a的命令字比特,在偶數上升沿發送給b的命令字比特,發送順序由高比特發送至低比特,即由第7比特發送至第0比特。總共發送16比特字長的命令字信號。
具體傳輸的數據如下:
第一階段傳輸數據:
步驟s3,在傳輸第二階段,spi控制器在上升沿依次發送訪問地址信號,訪問地址字長24比特,發送方式與第一階段(s2)方法相同,地址也需要發送兩遍,按奇偶上升沿依次發送,從高比特位開始發送,總共發送48比特字長的地址信號,具體方法與步驟s2相同。
步驟s4,判斷是讀操作還是寫操作,在判斷結果為寫操作的情況下,執行步驟s5,在判斷結果為讀操作的情況下,執行步驟s6;
步驟s5,在傳輸第三階段,cpu將需要寫入的數據依次輸出到mosi,直接連接到每片spiflash的mosi0到mosi(n-1)。在該階段,spiflash晶片在各自分頻後的時鐘clkn的驅動下採樣mosi上的信號,作為自己的輸入數據。
步驟s6,在傳輸第三階段,n片spiflash依次輸出n路回讀數據miso0到miso(n-1)。在該階段,cpld由spi控制器輸出時鐘clk觸發,依次採集miso0到miso(n-1)的8比特數據,然後保持一個clk周期,從高比特到低比特得到總的8*n比特字長的輸出miso,輸入到spi控制器。
步驟s7,在完成傳輸第三階段,將片選拉高,結束一次完整傳輸。
在傳輸第三階段,spiflash在clkn下降沿輸出回讀數據,a輸出數據miso0,b輸出數據miso1。因為經過偶數倍頻,分頻後的下降沿可與clk的上升沿一一對應,在該階段,cpld由spi控制器輸出時鐘clk的上升沿觸發,依次採集a,b的mison的8比特數據,並保持一個clk周期,得到總的16比特字長的輸出miso,直接輸入到spi控制器。此時完成了一個完整的傳輸過程。
單片spi連接四片spiflash的情況與上述的單片spi連接兩片spiflash類似,圖7是根據本發明實施例的單片spi連接四片spiflash的時序示意圖,如圖7所示,在此不再贅述。
上述的本發明實施例,僅利用單個spi控制器,實現了對多片spiflash傳輸的控制,不需要額外佔用cpu的spi控制器,並通過將cpu時鐘分頻並錯開相位的方法,使用分頻後的低頻時鐘訪問單個spiflash晶片,不僅可以使組合之後的spiflash傳輸頻率倍增,並且多塊晶片組合之後擦寫速度也相應的倍增,適合在嵌入式系統中使用。
顯然,本領域的技術人員應該明白,上述的本發明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執行的程序代碼來實現,從而,可以將它們 存儲在存儲裝置中由計算裝置來執行,並且在某些情況下,可以以不同於此處的順序執行所示出或描述的步驟,或者將它們分別製作成各個集成電路模塊,或者將它們中的多個模塊或步驟製作成單個集成電路模塊來實現。這樣,本發明不限制於任何特定的硬體和軟體結合。
以上所述僅為本發明的優選實施例而已,並不用於限制本發明,對於本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。