NXP NJJ29C2 SPI 通訊淺析

一、前言

       NJJ29C2 是集成了低頻驅動和接收的晶片,工作頻率是 125kHz,與主控制器通過 SPI 進行通訊,本文將跟大家分享如何通過主控制器與 NJJ29C2 進行 SPI 通訊,包括接口介紹、數據幀以及通訊流程的介紹。

 

二、SPI 接口說明

  1. 接口說明

       主控制器通過四線 SPI 接口與從設備 NJJ29C2 進行連接以及數據交互,包括片選 SCSN (Slave Chip Select Negative)、時鐘 SCLK (Serial Clock)、數據輸入 SDI (Serial Data In) 以及數據輸出 SDO (Serial Data Out)。

圖 1 SPI 接口

       需要說明的是,NJJ29C2 拓展了 IRQ 線以及 BUSY 線,具體說明如下:

             (1)IRQ 為中斷輸出線,高有效,表示 NJJ29C2 有數據需要發送給主機,請求 SPI 通訊;

             (2)BUSY 為輸出線,高有效,表示 NJJ29C2 正在忙,無法接收數據。

 

  1. SPI 模式說明

       NJJ29C2 始終作為 SPI 從機,其中片選引腳 SCSN 低電平有效。

       NJJ29C2 SPI 通訊模式說明如下:

            (1)時鐘極性 CPOL = 0,為空閒低電平,即 SCLK 第一個有效沿為上升沿;

            (2)時鐘相位 CPHA = 1,來自主控制器的數據(SDI)在時鐘下降沿採樣,發送到主控制器的數據(SDO)在時鐘上升沿後發生變化。

       需要注意 SPI 模式需設置正確,才可根據發送的命令以及獲取的回應信息得到設備的正確狀態,進行分析處理。

 

三、SPI 幀介紹及緩衝說明

  1. SPI 幀

                 SPI 傳輸有固定的幀長度,總是以 32 字節進行傳輸,根據傳輸方向分為命令(command,CMD)以及回應(response,RESP),兩個方向的每幀 SPI 數據最後兩個字節為 CRC 數據,第一個字節根據傳輸方向表示對應的命令集(CMD)或回應集(RESP),中間的數據即為
          參數,具體參數說明可參考 UM525836-NJJ29C2 Product User Manual(3.6).pdf 文檔,此處不展開說明。

         注意,在 SPI 幀 32 bytes 傳輸過程中 SCSN 需為低電平。當傳輸過程中檢測到 SCSN 的上升沿表示幀的結束,當檢測到幀結束且未接收到預期的 32 bytes 時,該數據會被丟棄,並通過 IRQ 中斷通知主機接收 RESP_GENERIC 響應。

  1. 緩衝說明

圖 2 SPI 幀

       NJJ29C2 在硬體上有兩個大小相同的 SDI buffer,允許發送連續的 SPI 幀,連續幀之間 SCSN 高電平時間需大於 tSCSN_HIGH 時間,該數值參見數據手冊。                                                                                                                                                 

       為了防止 SPI 數據幀的溢出,可選用拓展的 BUSY 線,如第二點所示,只需要檢測該線狀態從而判斷主控制器是否進行數據發送。



四、SPI 通訊流程說明

  1. 響應說明

        (1)直接響應:當命令從主機發送到 NJJ29C2 時,NJJ29C2 提供直接響應(與命令並行的響應),該響應不依賴於發送的命令。

        (2)相關響應:當 NJJ29C2 接收到命令後,開始執行命令,準備相關響應(由命令引起的響應),並通過 IRQ 中斷通知主機獲取相關響應。

       直接響應、相關響應可在命令幀中進行設置,此處不展開說明。

       當主機收到中斷請求,且無命令需要發送時,可發送 CMD_NOP 用於獲取響應。其中 CMD_NOP 命令 32 bytes 中命令代碼為 0x00,中間參數都為 0x00,最後 2 bytes 為 CRC 值。

       類似的,當 NJJ29C2 沒有數據需要回應時,它使用 RESP_NOP 作為直接響應。其中 RESP_NOP 命令 32 bytes 中命令代碼為 0x00,中間參數都為 0x00,最後 2 bytes 為 CRC 值。

 

  1. IRQ 中斷說明

圖 3  IRQ 中斷

       如上圖所示,當 NJJ29C2 有數據需要傳輸給主機時,將 IRQ 置高,這個僅發生在 SCSN 為高時。當 SDO buffer 可用時,在發送 2 bytes 字節後,IRQ 會恢復為低電平狀態。

  1. BUSY 線通訊說明

圖 4 BUSY 線通訊

               如上圖所示,當占用第二個 SDI buffer 的第二個字節後,會將 BUSY 線設置為高,表示 NJJ29C2 無法繼續緩衝接收數據, 當 NJJ29C2 在 BUSY 狀態,無法接收數據時,主機再繼續發送 SPI 幀(即上圖中的第 3 幀 SPI 數據),該數據會被丟棄,產生錯誤信息,該信息會通過 IRQ
        中斷通知主機獲取 RESP_GENERIC 回應。而當第一個 SDI 幀被讀取後,BUSY 會恢復低電平狀態,表示 NJJ29C2 可繼續接收數據。

               因此,為了防止 NJJ29C2 過載,建議選用拓展的 BUSY 線,判斷 NJJ29C2 狀態再進行數據交互。若不使用 BUSY 線,則必須遵照 datasheet 中定義的處理時間,根據實際使用情況進行調整。

 

五、結語

       以上就是本次分享的全部內容,如有相關需求,可以在評論區聯繫我們,感謝閱讀。

 

六、參考資料

  1. sd525920 - NJJ29C2A Preliminary Datasheet (2.0).pdf
  2. UM525836-NJJ29C2 Product User Manual(3.6).pdf

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論