Отправка битов start и stop в шину i2c в Linux ..?

Я пишу API-оболочку в пользовательском пространстве для управления шиной I2C на C на платформе Embedded Linux. Я могу читать и записывать данные с датчика с помощью методов read () и write () и вызова ioctl () для выбора подчиненного устройства. Я знаю, что внутреннее чтение / запись выполняет следующие шаги:

  • Отправить бит Start
  • Отправьте адрес подчиненного устройства + бит чтения / записи и получите подтверждение
  • Отправка / получение данных
  • Отправить бит Stop

Я хочу создать отдельные функции, чтобы делать следующее:

  1. Чтобы отправить бит Start в шину I2C
  2. Чтобы отправить бит Stop в шину I2C
  3. Чтобы записать один байт в шину I2C. (Не родовой для раба)
  4. Чтобы прочитать один байт с шины I2C. (Не родовой для раба)

Существуют ли какие-либо функции Linux / API / вызовы ioctl, которые можно использовать из приложения C User для достижения вышеуказанных функций ..?


person Jose John Thottungal    schedule 12.10.2015    source источник
comment
Это плохая идея - шины I2C предназначены для нескольких ведомых устройств, и то, что вы описываете, будет связывать шину, не позволяя другим драйверам связываться с другими ведомыми устройствами, а также, вероятно, вызовет тайм-ауты шины. Используйте операции, которые проводят полную транзакцию.   -  person Ben Voigt    schedule 12.10.2015
comment
Кроме того, обычно контроллеры i2c просто не могут использовать стартовые / стоповые биты без отправки или получения данных.   -  person Alexandre Belloni    schedule 12.10.2015


Ответы (1)


Зачем вам это нужно? Было бы полезно, если бы вы могли пролить свет на эту потребность.

Обычно устройства I2C управляются драйвером ядра. Однако, если вы ищете доступ к устройству I2C из пользовательского пространства, вы можете сделать это через интерфейс / dev. Здесь вы можете получить доступ к адаптеру I2C из пользовательского пространства, используя i2c-dev.h из i2c-tools, для которых соответствующая информация находится по ссылке https://www.kernel.org/doc/Documentation/i2c/dev-interface. Также обратите внимание, что при использовании read () или write () весь поток вызовов I2C, основанный на стартовом бите / адресе / данных / остановке, выполняется соответственно.

person Karthik Balaguru    schedule 17.10.2015