串口轉SPI驅動協議的制定

串口轉SPI驅動協議的制定

      最近在做到一個項目,需要使用SPI去驅動外設,但是我們不是直接使用主控去編寫外設的SPI驅動。所以就會有一個串口轉SPI的需求,即使用UART發送數據轉爲SPI驅動。做了簡單的框架圖,以幫助大家理解。
在這裏插入圖片描述
      到這,不免大家有疑問,我幹嘛要這樣多此一舉,我直接用可編程主控去控制SPI外設不就好了。正常情況下,這樣的想法一點問題都沒有,甚至想給你點個贊。OK,接下來看我裝逼了~~~~。
      假如我手裏的主控是一個帶無線的主控。例如DFRobot的Bluno系列,就是帶藍牙的主控。這裏只是簡單舉個例子,不一定要用藍牙,有wifi,2.4G之類的等等,都有可能。那既然有無線,我幹嘛一定要使用有線的呢。當然,如果你是速度黨,那就另當別論了。接下來的可能不太適合你了,請移步~。
      所以上面的框架圖自然而然就得更新了,然後圖就變成下面這樣了。
在這裏插入圖片描述
      這樣的話,我想大家就應該能理解爲什麼需要做這個串口轉SPI的驅動協議了。當然這裏所說的串口並不一定是物理的UART,我這裏用的藍牙,就是藍牙透傳過來的數據。統稱爲了串口數據。說白了就是把藍牙接收到的數據轉成SPI協議驅動外設。
      接下來我們先簡單看下SPI的協議。使用過SPI的應該比較熟悉,四線SPI的數據線有MISO和MOSI兩個,這兩條線上的數據是同步傳輸的,也就是主機在發一個數據的時候,從機也會有一個數據返回,至於返回的數據是否是有效的,就看各個傳感器自己的定義的。
在這裏插入圖片描述
      上圖的意思就是MOSI上數據爲0x01時,MISO返回的爲0x11。MOSI數據爲0x02時,MISO返回的是0x12,依次類推。MOSI和MISO是同步產生的,也就是說MOSI和MISO是在同一時間段上產生的。所以SPI的實質就是交換數據,但是像我們自定義的UART轉SPI協議是不可能像這樣全雙工的。因爲我們需要把UART得到數據先解析判斷一次,看它是個什麼意思,再把這意思通過SPI跟從設備進行通信。所以,在沒有數據量緩存的情況下,可以按照下面這種來進行通行。
在這裏插入圖片描述
      當然現在的單片機顯示是不可能這點數據緩存量都沒有。所以按照正常來說,我們還是選用發一段數據後,再查看這段數據的返回值。因爲有很多SPI傳感器是需要查看返回值的,根據返回的值來判斷下一步該怎樣執行。時序圖就像下面這樣了。
在這裏插入圖片描述
      當然如果我們的無線傳輸如果是全雙工的,並且速度很快的話,也可以像下面這樣,先緩存部分數據後,接收數據和SPI通信便可以同步進行,只需要主控這邊在接收到返回的數據後,進行一下偏移操作就可以得到正確的返回值。
在這裏插入圖片描述
      我這邊使用的是BLE設備,所以速度都被BLE限制了,再加上BLE這邊每次只能發送20字節的數據。感覺怎樣優化都沒多大影響了。所以決定乾脆直接以BLE的一個包爲解析對象了。
在這裏插入圖片描述
我們理想的狀態就像上面一樣第一個包把數據傳過來,SPI驅動後把數據再還回去。但是不可能達到理想狀態,因爲我們既然是做的UART轉SPI協議,就得讓他可以支持其他SPI外設,也就是我們得需要片選命令。保證其可以根據片選命令來執行拉低哪個IO口。所以我們需要一個包保證其先選對從機設備。例如可以發送一個如下圖的包在這裏插入圖片描述
這個包首先是一個不滿20字節的包,然後包頭爲0x55,0xAA,包尾爲0x0D,0x0A。數據位xx代表的是切換到哪個CS。
      接下來的話,就是當我結束SPI通信時,需要把CS拉高。我們也可以同樣發送上面的包,把xx設置爲0xFF就代表通信結束。或則發送的數據包不足20個字節也代表結束。這樣的話,整個通訊流程就比較清晰了。
      OK,然後我這邊總結下流程,演示一次跟SPI從機通信的流程。
      1、主控先通過藍牙發送控制CS的命令,設置好UART轉SPI芯片需要操作的CS的NUM號。
在這裏插入圖片描述
      2、UART轉SPI芯片接收到這條命令後,解析出需要操作的CS號是0x01號。
      3、主控在再發送下面的命令。
在這裏插入圖片描述
      4、UART轉SPI芯片接收到這條數據後,把之前設置好的CS引腳拉低,使能SPI從機,根據命令與SPI 從機進行通信,因爲該包沒有達到20字節,說明這個包包含了所有通信命令,即與SPI 從機通信後就可以把CS拉高。然後把返回的數據再通過藍牙發送回去。
在這裏插入圖片描述
      5、主控再根據接收到的數據來執行別的動作了。單次的SPI通信就完成了,有其他操作只需要重複步驟就好了。這樣就實現了UART轉SPI的功能了。
煩請各位積極批鬥,一個人的想法肯定是不完善的,有批鬥纔有進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章