一、前言
S32K144 擁有一個LPI2C(Low Power Inter-Integrated Circuit)模塊,本文章將基於SDK LPI2C 例程在S32DS上介紹 LPI2C 模塊多從機的使用。
二、LPI2C 模塊介紹
LPI2C 支持以下 I2C 規範功能:
- 支持標準、快速、快速+ 和超快模式。
- 從機模式支持 HS(High speed mode)模式。
- 支持多主機,包括同步與仲裁。
- 時鐘展寬。
- 通用調用,7 位和 10 位尋址。
- 軟體復位、START 字節和設備 ID 需要軟體支持。
LPI2C 主機支持以下功能:
- 命令/發送 4 字 FIFO。
- 命令 FIFO 將在啟動傳輸之前等待空閒 I2C 總線。
- 命令 FIFO 可以啟動(重複)START 和 STOP 條件以及一個或多個主接收機傳輸。
- STOP 條件可以從命令 FIFO 生成,或在傳輸 FIFO 為空時自動生成。
- 主機請求輸入可以用於控制 I2C 總線發送的開始時間。
- 靈活的接收數據匹配可以在數據匹配時產生中斷或者丟棄不需要的數據。
- 標誌和可選中斷,用以發送重複啟動條件、停止條件、仲裁丟失、意外 NACK 和命令字錯誤的信號。
LPI2C 從機支持以下功能:
- 單獨的 I2C 從機寄存器,可以做大限度地減少由主從機切換造成的軟體消耗。
- 支持 7 位或 10 位尋址、地址範圍、SMBus 警報和通用呼叫地址。
- 發送數據寄存器支持中斷或 DMA 請求。
- 接收數據寄存器支持中斷或 DMA 請求。
- 軟體可控制的 ACK 或 NACK,具有 ACK/NACK 位上的可選時鐘擴展。
- 可配置時鐘展寬,以避免傳輸 FIFO 不足和接收 FIFO 超時。
- 標誌和可選的數據包結束中斷、STOP 條件或位錯誤檢測。
LPI2C 框圖:
LPI2C 引腳說明:
在四線模式中,SCL、SDA 引腳作為輸入引腳,SCLS、SDAS 作為輸出引腳。傳統兩線式 I2C 中,只使用 SCL、SDA 作為時鐘線和數據線,SCLS、SDAS 未使用。本篇僅以兩線式 I2C 為例進行介紹。
如需了解更多,可查閱 S32K-Reference Manual 文檔。
三、硬體連接
本次將使用 S32K144EVB(LQFP-100) 評估板搭配 Mint Valley EVM Board 方案 Sensor 板進行演示,兩者通過 Arduino 接口連接。通過 LPI2C 接口驅動彩燈以及點亮 OLED。
- Sensor 板連接說明。
彩燈使用 5V 供電,I2C 地址為 0x38。
OLED 使用 3V 供電,I2C 地址為 0x3D。
- S32K144EVB(LQFP-100) 評估板連接說明。
S32K144EVB(LQFP-100) 評估板上進行下圖所示引腳的連接。
選用 PTA2 、PTA3 引腳作為 I2C 引腳,需要注意的是,J2 處原理圖中有說明,此處默認 R539、R540 不接,故此處與晶片 PTA2、PTA3 引腳不連通,使用前需將此處電阻焊接上。
四、例程導入與工程配置
- 例程導入。
本文使用 S32DS 內的庫函數例程 lpi2c_master_s32k144 進行介紹,打開S32 Design Studio,點擊:“File”->“New”->“S32DS Project from Example”。
接著按照下圖所示選擇 lpi2c_master_s32k144,為了工程的區分,可修改工程名。
- IO 口配置。
在 Components 窗口中選擇 pin_mux:PinSettings。
進行 SCL、SDA 引腳的配置,該例程中默認配置PTA3 、PTA2 引腳作為 I2C 的 SCL、SDA 引腳,保持默認即可。
- I2C 模塊配置。
在 Components 窗口中選擇 lpi2c1:lpi2c。
進行以下設置,S32K144 作為主機則設置對應多從機的地址及波特率速率,這裡不設置相關的回調函數。如下圖所示,進行 OLED、RGB 燈的設置。
- 生成外設代碼。
點擊 “Components” 窗口右上角 “Generate Processor Expert Code” 按鈕,生成外設代碼。
在 “Project Explorer” 中項目的 “Generated_Code” 文件夾下可以看到使用 PE 產生的代碼。
五、代碼編寫與演示
例程主函數中主要針對時鐘、Pin 腳以及 I2C 模塊進行了初始化。
接著進行收發測試,如下圖所示,此部分根據功能需求進行編寫。
下面進行代碼編寫。
- 在 Components 窗口中選擇 lpi2c1:lpi2c 模塊進行展開,如下圖所示,可看到關於 LPI2C 對應的 API,本此主要使用到 I2C 初始化、從機地址設置以及阻塞發送 API。
- 在完成時鐘、Pin 腳初始化後,進行 I2C 初始化,這裡一般是設置最先用到的外設,這裡設置為 RGB 的配置(如第四節的第3點配置)。
- 接著根據外設時序,編寫函數,發送對應數據,此處不具體說明外設驅動。
- 與新從機通訊前,需要重新設置從機地址。
- 主函數代碼調用情況如下所示。
- 進行編譯,編譯成功後如下圖所示。
- Debug 進行效果演示。
S32K144EVB(LQFP-100) 評估板與Sensor 板通過 Arduino 接口連接後,使用USB–microUSB 連接板子和電腦,連接示意圖如下圖所示:
接著點擊小甲蟲的展開按鍵,選擇 Debug Configurations。
如下圖所示,選擇 OpenSDA 接口進行 Debug 設置,如下圖所示。
接著進入 Debug 界面,點擊 “Resume” 按鍵,進行 Debug。
效果如下圖所示:
六、總結
關於 LPI2C 使用部分,大家可根據需要調用 LPI2C 模塊相應的 API 實現相應的功能,以上就是本篇博文的全部內容,感謝閱讀。
七、參考資料
[1] S32K144 Reference Manual.pdf,NXP
[2] S32K144EVB_Q100_RevB1_Schematic.pdf,NXP
[3] S32K144-EVB_QSG_REV4.3.pdf,NXP
[4] SCH - P15-094 OP-Aisa_V1.1 ( Mint Valley EVM Board 方案 Sensor 板)_Coco Ma_2016.04.19.pdf,NXP
[5] 【S32K 進階之旅】從零開始搭建 S32K 開發環境 - 大大通(簡體站) (wpgdadatong.com.cn)
評論