SafeSPI (Serial Peripheral Interface for Automotive Safety)
SafeSPI 把「用 SPI 傳車用感測資料」這件事標準化。一般 SPI 只定義電氣與時脈關係,對內容完全不作規範——沒有位址、沒有校驗、沒有狀態——SafeSPI 因此在同樣四條線之上疊一層邏輯層:固定 32 或 48 位元的 frame、命令帶目標位址而回應帶來源位址、每個 frame 都有 CRC、感測器狀態位元,以及匯流排的時序上下限。實作依據 Rev 2.0;Rev 2.0 向下相容 Rev 1.0——CRC 定義與測試向量完全相同,48 位元 frame 是 v2.0 新增的——因此不需要版本選項。
Decode Settings
- Data Line:選擇波形區顯示哪一條線,MOSI (Command) 或 MISO (Response)。無論選哪一條,兩條線一律都會解碼——SafeSPI 是全雙工,而且兩條線的欄位邊界不對齊,一條波形帶容納不了兩者。要同時看到兩條波形帶,請再加入一次本解碼並設為另一條線。報表沒有這個限制,見下方 Report both directions。預設:MOSI (Command)。
- Frame Length:選擇 Auto、32 Bit 或 48 Bit。Auto 的判斷方式是:數 CS 拉低這段期間有幾個 SCK 週期,32 個就當 32 位元、48 個就當 48 位元,再用 CRC 驗證猜得對不對。這是規格本身建議的做法。判斷結果會寫在報表的設定列,例如
32oof (Auto)。預設:Auto。 - Mode:選擇 Out-of-Frame (Mode 0)、In-Frame (Mode 1) 或 Auto。out-of-frame 在 SCK 上升緣取樣,slave 的回應出現在下一個 frame;in-frame 在下降緣取樣,回應就在同一個 frame 內。Auto 的判斷方式是:上升緣與下降緣各取樣一份資料,看哪一份的 CRC 過得了,就是哪一種模式。Frame Length 選 48 Bit 時這一項會變灰,因為 48 位元沒有 in-frame。預設:Auto。
- Frame Format:選擇 FlexFrame 或 FixedSensorFrame。這一項沒辦法自動判斷,只能由你指定。兩者佔用的位元完全一樣、CRC 也都會通過,差別只在「那些位元算不算欄位」:FlexFrame 當成保留位不解讀,FixedSensorFrame 則把它們解讀成 RW、CAP、DATAI。如果匯流排其實是 Flex 卻選了 Fixed,那些欄位的值是從保留位湊出來的,看起來很合理但完全不存在。預設選 Flex 就是為了避免這種假資料。預設:FlexFrame。
- Slave Address:選擇目標位址與來源位址如何切分成 slave 位址與 slave 內部位址:SelSlaveByCS(每個 slave 一條晶片選擇)、Sel2SlaveByAdrPin、Sel2SlaveByAdrNVM、Sel4SlaveByAdrPin 或 Sel4SlaveByAdrNVM。預設:SelSlaveByCS。
- CS active high:SafeSPI 的晶片選擇是低電位有效。若擷取是經由反相探棒取得、或裝置使用相反極性,請勾選。預設:不勾選。
- SCK idle high (CPOL = 1):SafeSPI 的時脈閒置為低電位。若匯流排閒置為高電位請勾選,取樣邊緣會隨之調整。預設:不勾選。
- Verify CRC:校驗每個 frame 的 CRC。SafeSPI 有四種 CRC 變體——32 位元 out-of-frame、32 位元 in-frame 命令、32 位元 in-frame 回應、48 位元——涵蓋範圍各不相同,解碼會為每個 frame 挑選正確的那一個。校驗通過時 CRC 格為綠色,不通過為紅色。預設:勾選。
- All-zero MISO frame = no response:若某個回應 frame 的位元全是 0,就當作 slave 根本沒回應,報表直接標示「沒有回應」,不去把那串 0 解讀成資料(否則會解出一筆看起來正常、實際不存在的回應)。這條規則是推論出來的、規格沒有明文規定——它的前提是 Rev 2.0 要求 MISO 外接下拉,線路空著時會被拉成 0;Rev 1.0 沒有這個要求,前提就不成立。因此預設關閉,等你的實際擷取確認過再開。開啟後 Information 欄會標上
Assumed Hi-Z,說明這是推論而非量測。預設:不勾選。 - Decode FrTyp bit:把 FrTyp 這個位元解讀成「下一個 frame 是 32 還是 48 位元」。只有支援 32/48 混用、且用位址決定寬度的裝置才有這個意義;其他裝置的這一位是自由使用,不代表任何事。不管有沒有勾,FrTyp 欄位本身都會顯示它的值——這個選項只決定要不要在 Information 欄多寫一句解讀。預設:不勾選。
- Report both directions:在同一份報表中列出命令與回應,每個 frame 佔兩列,並以 Dir 欄標明是哪一邊。波形區仍然只顯示 Data Line 選定的那一條。若想要與波形區一致的單方向報表,請取消勾選。預設:勾選。
- Check bus timing:依規格的時序表量測匯流排——SCK 高低電位寬度、晶片選擇的前後緣間隔、連續傳輸間隔,以及兩條資料線的 setup、hold 與有效時間。有違規的話會列在報表最前面,格式是「規格條號 + 量到的最差值 + 規格極限 + 違規次數 + 發生時間」,可以直接對照規格書查。另外,規格的極限值小到 5 ns,若你的取樣率不夠細(例如 200 MS/s 時一格就是 5 ns),那一項會被跳過不判定,避免給出沒有意義的結論。預設:勾選。
Result
開啟 Report both directions 時,報表每個 frame 顯示兩列。Dir 標明該列是命令還是回應, 共用的欄位會依方向放不同的東西:Addr 在 MOSI 列是目標位址、在 MISO 列是來源位址, Data 放 DATAI 或 DATAO;Flags 在命令列放 CAP 與 FrTyp,在回應列放 IDS、CE 與 DCnt。 D 與 Status 只適用於回應。
Pairs 把命令與回應成對顯示,這個關係光看列的順序是看不出來的: out-of-frame 的回應晚一個 frame 才出現,所以同一個 frame 的那兩列並不是一對。 在命令列,這一格是回過來的那個回應的來源位址;在回應列,則是被回答的那個命令的目標位址。 空白代表沒有觀察到對應的一方——擷取尾端,或第一個命令之前——紅色的破折號則代表 確實觀察到該命令沒有得到回應。
報表第一列一定是從擷取本身量到的 SCK 頻率,接著是本次解碼所使用的設定。 CRC 校驗通過時該格為綠色,不通過為紅色。不屬於故障的訊息,例如感測器處於初始化狀態, 會放在 Information 欄而不是 Error 欄。
