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校驗我會單獨寫一篇文章詳細闡述設計思路。
上板驗證



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