Menggunakan I2C dalam aplikasi tingkat tinggi
Azure Sphere mendukung Inter-Integrated Circuit (I2C) dalam mode master. I2C adalah bus seri yang menghubungkan periferal kecepatan rendah ke mikrokontroler. I2C menggunakan model multi-master/multi-subordinat di mana perangkat master mengontrol sekumpulan perangkat subordinat. I2C sering digunakan dengan periferal yang hanya memerlukan komunikasi ringan sederhana dengan mikrokontroler, seperti kontrol pengaturan, sakelar daya, dan sensor.
Aplikasi dapat mengakses periferal melalui I2C dengan menghubungi API I2C Applibs untuk melakukan operasi pada antarmuka master I2C. Sampel I2C LSM6DS3 menjelaskan cara mengonfigurasi perangkat keras untuk I2C pada perangkat MT3620 dan menggunakan I2C dalam aplikasi.
Persyaratan I2C
Aplikasi yang menggunakan I2C harus menyertakan file header yang sesuai untuk I2C, dan menambahkan pengaturan I2C ke manifes aplikasi.
Semua aplikasi harus mengatur perangkat keras target mereka dan menyertakan file header definisi perangkat keras yang terkait.
File Header
#define I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
Deklarasi I2C_STRUCTS_VERSION
definisi preprocessor sebelum menyertakan file header. Ini menentukan versi struct yang digunakan oleh aplikasi.
Ganti "path-to-your-target-hardware.h" dengan jalur ke file header untuk perangkat keras Anda.
Pengaturan manifes aplikasi
Untuk menggunakan API I2C, Anda harus menambahkan I2cMaster
kapabilitas ke manifes aplikasi, lalu menambahkan setiap antarmuka master I2C ke kapabilitas tersebut. Ini memungkinkan aplikasi untuk mengakses antarmuka.
Manifes aplikasi Azure Sphere memiliki detail selengkapnya tentang manifes aplikasi.
Dalam kode Anda, gunakan konstanta yang ditentukan untuk perangkat keras Anda untuk mengidentifikasi antarmuka I2C. Kompiler akan menerjemahkan nilai ini ke nilai mentah saat Anda menyusun aplikasi.
Misalnya, berikut kutipan dari manifes aplikasi yang menargetkan papan pengembangan referensi MT3620 (RDB) dan mengonfigurasi dua antarmuka master I2C:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
Kutipan berikut ini memperlihatkan cara menentukan antarmuka master I2C yang sama dalam aplikasi yang menargetkan Avnet MT3620 Starter Kit:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
Membuka antarmuka master I2C
Sebelum Anda melakukan operasi pada antarmuka master I2C, Anda harus membukanya dengan memanggil fungsi I2CMaster_Open .
Memperbarui pengaturan untuk antarmuka master I2C
Setelah membuka antarmuka master, Anda dapat mengubah pengaturan:
- Untuk mengubah kecepatan bus untuk operasi pada antarmuka master, hubungi I2CMaster_SetBusSpeed
- Untuk mengubah waktu habis operasi, hubungi I2CMaster_SetTimeout
Melakukan operasi baca dan tulis pada antarmuka master I2C
Azure Sphere mendukung beberapa opsi untuk melakukan operasi baca dan tulis dengan I2C. Opsi ini semuanya memblokir, operasi yang sinkron.
Untuk operasi menulis atau membaca satu arah, Anda dapat menghubungi I2CMaster_Write atau I2CMaster_Read. Ini adalah cara paling sederhana untuk melakukan operasi pada antarmuka master I2C karena hanya menentukan satu operasi dan menyertakan alamat perangkat bawahan dalam panggilan fungsi.
Anda dapat menghubungi I2CMaster_WriteThenRead untuk melakukan gabungan tulis lalu membaca operasi dalam satu transaksi bus tanpa gangguan dari transaksi lain.
Untuk interoperabilitas dengan beberapa antarmuka POSIX, Anda dapat memanggil fungsi posix baca(2) dan menulis(2) untuk melakukan transaksi satu arah. Anda harus menghubungi I2CMaster_SetDefaultTargetAddress untuk mengatur alamat perangkat subordinat sebelum menelepon read(2) atau write(2).
Anda dapat memanggil fungsi ini untuk melakukan operasi penulisan 0-byte untuk memverifikasi keberadaan perangkat bawahan. Jika operasi baca atau tulis gagal, aplikasi Anda harus menangani penerbitan ulang permintaan.
Menutup antarmuka I2C
Untuk menutup antarmuka, Anda harus memanggil fungsi POSIX standar tutup().
Dukungan MT3620
Bagian ini menjelaskan opsi I2C yang hanya berlaku saat menjalankan Azure Sphere di MT3620.
Spesifikasi I2C untuk chip MT3620 tercantum dalam Status Dukungan MT3620. Panduan pengguna papan pengembangan MT3620 menjelaskan tata letak dan fungsi pin untuk kabel.
Folder HardwareDefinitions di direktori penginstalan SDK Microsoft Azure Sphere berisi definisi untuk papan pengembangan, modul, dan chip Azure Sphere yang umum. Ini berisi file header dan JSON yang menentukan antarmuka master untuk MT3620, MT3620 RDB, bersama dengan perangkat keras MT3620 lainnya. Lokasi default untuk folder HardwareDefinitions ada C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
di Windows dan /opt/azurespheresdk/HardwareDefinitions
Linux.
- Ketika mengonfigurasi papan dev MT3620, Anda dapat menggunakan port ISU apa pun sebagai antarmuka master I2C. Saat Anda menggunakan port ISU sebagai antarmuka master I2C, Anda tidak bisa menggunakan port yang sama seperti antarmuka SPI atau UART.
- Alamat perangkat subordinat 10-bit tidak didukung di MT3620; hanya alamat 7-bit yang didukung.
- MT3620 mendukung kecepatan bus 100 KHz, 400 KHz, dan 1 MHz, tetapi tidak 3,4 Mhz.
- Pembacaan I2C 0-byte tidak didukung di MT3620.
- Saat menggunakan I2C dalam aplikasi tingkat tinggi, hanya pin SCL dan SDA di blok periferal ISU yang digunakan oleh periferal I2C, dan pin lainnya yang dapat digunakan sebagai GPIO oleh aplikasi tingkat tinggi yang sama. Lihat periferal I/O untuk daftar pin ISU tak terpakai yang dapat digunakan kembali untuk GPIO.