Jak na: Sběrnice I²C
Je to hlavní sběrnice, přes kterou TOWER komunikuje s většinou senzorů a modulů. Každý z nich má svou adresu v adresním prostoru I²C platformy TOWER.
API pro I²C běžně nepotřebujete, protože všechny senzory mají své knihovny v SDK, které vám naměřená data předají. API pro I²C budete potřebovat, jen pokud chcete implementovat nový senzor nebo čip s rozhraním I²C.
Tato kapitola na příkladech kódu ukazuje, jak API pro I²C používat. Více o samotné sběrnici I²C se dočtete v kapitole Sběrnice I²C.
Odkazy
- Modul SDK pro I²C
- Příklad v repozitáři na GitHubu
Než se sběrnicí I²C začnete pracovat, musíte ji vždy inicializovat.
Například twr_i2c_init(TWR_I2C_I2C0, TWR_I2C_SPEED_400_KHZ); inicializuje I2C_0 na rychlost 400kHz.
Příklady
Čtení
Ke čtení 8 nebo 16 bitů slouží vestavěné funkce SDK:
bool twr_i2c_memory_read_8b (twr_i2c_channel_t channel, uint8_t device_address, uint32_t memory_address, uint8_t *data)
bool twr_i2c_memory_read_16b (twr_i2c_channel_t channel, uint8_t device_address, uint32_t memory_address, uint16_t *data)
Například můžete přečíst 8 bitů dat z adresy paměti 0x01 přes I2C_0 ze zařízení s adresou 0x48 a data uložit do proměnné reg_configuration.
Příklad kódu: čtení 8 bitů přes I²C
uint8_t reg_configuration;
twr_i2c_memory_read_8b(TWR_I2C_I2C0, 0x48, 0x01, ®_configuration);
Ke čtení většího množství dat přes I²C musíte vytvořit strukturu twr_i2c_memory_transfer_t.
Příklad kódu: čtení libovolného počtu bitů přes I²C
twr_i2c_memory_transfer_t transfer;
uint8_t rx_buffer[6];
transfer.device_address = 0x48;
transfer.memory_address = 0x28;
transfer.buffer = rx_buffer;
transfer.length = sizeof(rx_buffer);
twr_i2c_memory_read(TWR_I2C_I2C0, &transfer);
Zápis
K zápisu 8 nebo 16 bitů slouží vestavěné funkce SDK:
bool twr_i2c_memory_write_8b (twr_i2c_channel_t channel, uint8_t device_address, uint32_t memory_address, uint8_t data)
bool twr_i2c_memory_write_16b (twr_i2c_channel_t channel, uint8_t device_address, uint32_t memory_address, uint16_t data)
Například můžete zapsat 8 bitů dat, konkrétně 0x81, na adresu paměti 0x01 přes I2C_0 do zařízení s adresou 0x48.
Příklad kódu: zápis 8 bitů přes I²C
twr_i2c_memory_write_8b(TWR_I2C_I2C0, 0x48, 0x01, 0x81);
K zápisu většího množství dat přes I²C musíte vytvořit strukturu twr_i2c_memory_transfer_t.
Příklad kódu: zápis libovolného počtu bitů přes I²C
twr_i2c_memory_transfer_t transfer;
uint8_t tx_buffer[2] = { 0x20, 0x00 };
transfer.device_address = 0x48;
transfer.memory_address = 0x28;
transfer.buffer = tx_buffer;
transfer.length = sizeof(tx_buffer);
twr_i2c_memory_read(TWR_I2C_I2C0, &transfer);