08. Работа с I2C

Для работы с I2C (подробнее о шине можно посмотреть в stm32) используются пины 9 и 14 (GPIO14 и GPIO2)
На GPIO2 обычно установлен светодиод.

Максимальная скорость I2C 100кГц

Небольшая напоминалка:
В I2C используется 7 бит адреса и 8 бит чтения/записи
Проверяется 9 бит ACK/NACK позволяющий определить наличие (физическое или «доступность» программы у микросхемы)
ACK — низкий лог. уровень в 9 такте (устройство д.б. Open Drain)
NACK — высокий лог. уровень в 9 такте (т.к. никто не смог притянуть вывод к земле)

Добавляем #include "driver/i2c_master.h"
Макрос для «зануления SDA и CLK»:
I2C_MASTER_SDA_LOW_SCL_LOW()

Функция старта работы с I2C:
i2c_master_start();

Функция окончания работы с I2C:
i2c_master_stop();

Функция записи байта:
void i2c_master_writeByte(uint8 wrdata);

Функция чтения байта:
uint8 i2c_master_readByte(void);

Функция для получения бита подтверждения о принятии устройством данных:
по сути показывает, что шина не пустая
bool i2c_master_checkAck(void);

Функция формирования бита ACK:
void i2c_master_send_ack(void);

Функция формирования бита NACK:
void i2c_master_send_nack(void);

 

Как правило алгоритм записи выглядит как:

  1. Старт
  2. Проверка наличия приемника (передаем его адрес) и смотрим ACK
  3. Передача адреса записи
  4. Часто добавляется ACK
  5. Передача данных + м.б. ACK
  6. Передача NACK (смотреть даташит на приемник)
  7. Стоп

Как правило алгоритм чтения выглядит как:

  1. Старт
  2. Проверка наличия приемника (передаем его адрес) и смотрим ACK
  3. Передача адреса начала чтения (обычно с битом записи — т.к. записываем стартовый адрес для чтения)
  4. Часто добавляется ACK
  5. Старт — повторно запускаем I2C (не останавливая его до этого) т.е. рестарт
  6. Передача адреса приемника (обычно с битом чтения)  и смотрим ACK

    ВАЖНО!!!
  7. Принимаем байты (до предпоследнего) и отвечаем на них ACK
  8. Принимаем последний байт и отвечаем NACK
  9. Стоп

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *