I2C связь в Arduino
В Arduino I2C у нас есть следующие строки кода:
wire. beginTransmission(slave addrress)
wire.write(the byte want to send)
wire. endTransmission()
Как мы знаем в I2C, ведущий должен проверить наличие подчиненного адреса и убедиться в этом, получив ack от ведомого устройства. Кто из трех перечисленных функций выполняет эту работу? Это проволока. Начать передачу? на их сайте только что упомянуто, что он инициализирует связь с подчиненным устройством. Я хочу знать, что происходит во время выполнения wire. beginTransmission с точки зрения I2C.
Также wire.endTransmission() освобождает буферные данные, созданные с помощью wire. пиши. Так кто же проверяет присутствие раба? Первая функция или 3-я?
@Sayan, 👍1
1 ответ
Лучший ответ:
Вся фактическая связь I2C выполняется в Wire.endTransmission()
. До этого на линиях I2C ничего не делается.
Wire.beginTransaction()
только инициализирует буфер библиотек и сохраняет подчиненный адрес во внутренней переменной. Wire.write()
помещает данные во внутренний буфер.
Wire.endTransmission()
затем может следовать протоколу I2C. Он генерирует условие запуска на шине, отправляет байт адреса, проверяет подтверждение ведомых байтов на адресном байте, затем отправляет байты данных, за каждым из которых следует подтверждение ведомых байтов. Наконец, он генерирует условие остановки.
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отправить строку на мастер с помощью i2c
- Как выбрать альтернативные контакты I2C на ESP32?
- Что означает в I2C «NACK получен»?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Несколько датчиков I2C с одинаковым адресом
это значит, предположим, я забыл написать wire. beginTransmission, значит ли это, что я не могу выполнить wire.endTransmission? Потому что, похоже, последнее зависит от первого? То есть проволока. Конечная передача не является независимой функцией., @Sayan
Wire.beginTransmission()
запускает библиотеку для главной транзакции записи. Поэтому он нужен вам перед вызовом функции Wire.endTransmission (). Что заставляет вас думать, что любая из этих функций независима? Они работают для одного и того же аппаратного интерфейса. Вы должны называть их так, как предполагает библиотека., @chrisl