FPGA之BISS接口協議實現


    BISS通信協議是一種全雙工同步串行總線通信協議,專門為滿足實時、雙向、高速的傳感器通信而設計,在硬件上兼容工業標准SSI(同步串行接口協議)總線協議。具體可參考BISS通信協議概述https://wenku.baidu.com/view/d0faf64fc850ad02de804164.html,下面直接來看下它的時序圖:

時序圖 

 

注意事項

 

 程序設計思路

     MA是時鍾,SLO是數據,我們要做的就是給時鍾,然后采集數據。觀察時序,SLO有9個狀態,分別是等待狀態、Ack狀態、Start狀態、0狀態、Position狀態(根據我自己的實際硬件參數,這里取26bit)、Error狀態、Warn狀態與CRC狀態。當Error為1(表示數據可信)並且crc校驗正確時,將Position階段采集到的SLO數據保存輸出即可。

問1:如何區分SLO的9個狀態?

解答1:巧用狀態機,這里用狀態機標記SLO的9個狀態。 

問2:等待狀態跳轉Ack狀態以及Ack狀態跳轉Start狀態跳轉時間都是不確定的時長,針對不確定的時長如何設計轉移條件呢?

解答:可采用檢測SLO下降沿和上升沿的檢測方法。

 參考代碼:

1   assign slo_in_posedge =  slo_in_ack_ff2==0&&slo_in_ack_ff1==1;         //check the slo posedge;
2   assign slo_in_negedge =  slo_in_ack_ff2==1&&slo_in_ack_ff1==0;  //check the slo negedge;
3  
4  

問3:SLO屬於外部器件輸進來的信號,直接使用可能會造成亞穩態,那如何避免亞穩態的發生呢?
解答:打拍子緩存,常規做法是至少打3拍。

問4:輸進來的是串行數據,如何對數據進行緩存組合成26bit數據輸出?

解答:串轉並即可。

問5:如何進行crc-6檢驗?

解答:對於常規的crc-16,crc-32,crc-8,都有現成的網站在線生成代碼可以調用http://www.metools.info/code/c15.htm,對於crc6校驗我會單獨寫一篇文章詳細闡述設計思路。

上板驗證

  注意:未經允許,禁止轉載,違法必究!

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM