在高階應用程式中使用I2C
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
Azure Sphere 支援主要模式中的整合式線路 (I2C)。 I2C 是一種序列總線,可將低速周邊連接到微控制器。 I2C 使用多宿主/多次級模型,其中主要裝置會控制一組次級裝置。 I2C 通常與只需要與微控制器進行簡單的輕量型通訊的外圍設備搭配使用,例如設定控件、電源開關和感測器。
應用程式可以透過 I2C 存取周邊,方法是呼叫 Applibs I2C API 以在 I2C 主要介面上執行作業。 LSM6DS3 I2C 範例說明如何在 MT3620 裝置上設定 I2C 的硬體,並在應用程式中使用 I2C。
I2C 需求
使用 I2C 的應用程式必須包含適用於 I2C 的適當標頭檔,並將 I2C 設定新增至 應用程式指令清單。
所有應用程式都必須 設定其目標硬體 ,並包含對應的硬體定義頭檔。
標頭檔
#define I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
I2C_STRUCTS_VERSION
先宣告預處理器定義,再包含頭檔。 這會指定應用程式所使用的結構版本。
將 「path-to-your-target-hardware.h」 取代為硬體頭文件的路徑。
應用程式指令清單設定
若要使用 I2C API,您必須將功能新增 I2cMaster
至應用程式指令清單,然後將每個 I2C 主要介面新增至功能。 這可讓應用程式存取介面。 Azure Sphere 應用程式指令清單 有更多應用程式指令清單的詳細數據。
在您的程式代碼中,使用為硬體定義的常數來識別 I2C 介面。 當您建置應用程式時,編譯程式會將這些值轉譯為原始值。
例如,以下是以 MT3620 參考開發板 (RDB) 為目標的應用程式指令清單摘錄,並設定兩個 I2C 主要介面:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
下列摘錄顯示如何在以Avnet MT3620 Starter Kit 為目標的應用程式中指定相同的 I2C 主要介面:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
開啟 I2C 主要介面
在 I2C 主要介面上執行作業之前,您必須呼叫 I2CMaster_Open 函式來開啟它。
更新 I2C 主要介面的設定
開啟主要介面之後,您可以變更設定:
- 若要變更主要介面上作業的總線速度,請呼叫 I2CMaster_SetBusSpeed
- 若要變更作業的逾時,請呼叫 I2CMaster_SetTimeout
在 I2C 主要介面上執行讀取和寫入作業
Azure Sphere 支援使用 I2C 執行讀取和寫入作業的數個選項。 這些選項全都是封鎖、同步作業。
針對單向寫入或讀取作業,您可以呼叫 I2CMaster_Write 或 I2CMaster_Read。 這是在 I2C 主要介面上執行作業的最簡單方式,因為它只會指定一個作業,而且它會在函數調用中包含次級裝置的位址。
您可以呼叫 I2CMaster_WriteThenRead ,在單一總線交易中執行合併的寫入作業,而不會中斷另一筆交易。
若要與某些 POSIX 介面的互操作性,您可以呼叫 POSIX read(2) 和 write(2) 函式來執行單向交易。 您必須呼叫 I2CMaster_SetDefaultTargetAddress ,才能呼叫 read(2) 或 write(2) 之前設定次級裝置的位址。
您可以呼叫這些函式來執行 0 位元組寫入作業,以確認次級裝置是否存在。 如果讀取或寫入作業失敗,您的應用程式必須處理重新發出要求。
關閉 I2C 介面
若要關閉介面,您必須呼叫標準 POSIX 函式 close()。
MT3620 支援
本節說明只有在 MT3620 上執行 Azure Sphere 時才適用的 I2C 選項。
MT3620 晶元的 I2C 規格會列在 MT3620 支援狀態中。 MT3620 開發板使用者指南說明線路的針腳配置和功能。
Microsoft Azure Sphere SDK 安裝目錄中的 HardwareDefinitions 資料夾包含一般 Azure Sphere 開發板、模組和晶片的定義。 其中包含標頭和 JSON 檔案,這些檔案會定義 MT3620、MT3620 RDB 和其他 MT3620 硬體的主要介面。 HardwareDefinitions 資料夾的預設位置位於 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
Windows 和 /opt/azurespheresdk/HardwareDefinitions
Linux 上。
GitHub 上的 Azure Sphere 範例存放庫包含標頭和 JSON 檔案,可定義 MT3620 晶片和 MT3620 RDB 的 SPI 主要介面,以及其他 MT3620 硬體。-->
- 當您設定 MT3620 開發面板時,可以使用任何 ISU 埠作為 I2C 主要介面。 當您使用 ISU 連接埠作為 I2C 主要介面時,您無法使用與 SPI 或 UART 介面相同的埠。
- MT3620 不支援 10 位次級裝置位址;僅支援 7 位位址。
- MT3620 支援 100 KHz、400 KHz 和 1 MHz 總線速度,但不支援 3.4 Mhz。
- MT3620 不支援0位元組 I2C 讀取。
- 在高階應用程式中使用I2C時,I2C周邊只會使用ISU周邊區塊中的 SCL 和 SDA 針腳,而其他針腳則可供同一個高階應用程式使用為 GPIO。 如需可用於 GPIO 的未使用 ISU 針腳清單,請參閱 I/O 周邊 。