I2 C чтение с 2 8-байтовыми регистрами - PullRequest
0 голосов
/ 23 апреля 2020

введите описание изображения здесь

Я новичок в использовании I2 C, и я застрял при попытке прочитать значения, поскольку для большинства данных требуется несколько 8-байтовых пакетов данных для отправлено, то, что большинство документов и примеров, которые я нашел в Интернете, не отвечают. Специфическая формулировка c из таблицы данных:

"Мастеру доступны две структуры сообщений: команда записи и команда чтения. Команда записи используется для инициирования события, а команда чтения возвращает результат. Все команды начинаются с 7-битного подчиненного адреса и сопровождаются байтами данных. При чтении ответов все байты данных должны считываться вместе. Каждая команда имеет задержку, связанную с этим, это необходимо для того, чтобы время микроконтроллера обрабатывать каждый запрос. Во время этой задержки правильный ответ может не возвращаться, а команды, отправленные в течение периода, могут игнорироваться.

Для команды записи первый байт данных будет определять команду, которая должна быть инициирована. Байт содержит параметры, связанные с этой командой.Для команд, которые не требуют указания c параметра, второй байт данных должен быть установлен в 0x00.

Для команды чтения первый байт данных представляет наиболее значимый байт результата и второй байт данных представляет наименее значимый байт. "

Ниже показан поток команд.

Пример команды, который имеет таблица данных:" Чтобы извлечь данные, которые представляют состояние команда 0x01 должна быть отправлена, а затем 0x00. "

Я пытался использовать эту библиотеку здесь: http://blacklib.yigityuce.com/classBlackLib_1_1BlackI2C.html

Так как именно я бы реализовал этот код правильно. К сожалению, я не смогу провести тестирование оборудования некоторое время. Будет ли это выглядеть примерно так? (При условии, что адрес подчиненного устройства уже настроен)

uint8_t command = 0x01;
unit8_t parameter =  0x00;
uint8_t buffer = {command, parameter}


myi2c.writeLine(buffer,sizeof(buffer));
uint16_t data_output = myi2c.readWord(command);

Это так просто? Вызов функции writeLine для вызова команды и параметра данных, использование readWord для чтения 2 байтов, выводимых при вызове 7-битного адреса salve (команда в данном случае)?

...