Для проекта я продолжаю работать, я должен говорить с многофункциональной микросхемой через I2C. Я могу сделать, это от пространства пользователя Linux через I2C/dev/i2c-1 взаимодействует через интерфейс.
Однако кажется, что драйвер говорит с той же микросхемой одновременно. Это приводит к моим доступам I2C_SLAVE для сбоя с errno-значением EBUSY. Хорошо - я могу переопределить это через ioctl I2C_SLAVE_FORCE. Я попробовал его, и это работает. Мои команды достигают микросхемы.
Вопрос: действительно ли безопасно сделать это? Я знаю наверняка, что к диапазонам адресов, которые я, никогда пишу не получает доступ никакой драйвер ядра. Однако я не уверен при принуждении коммуникации I2C, тот путь может перепутать некоторый внутренний конечный автомат или около этого. (Я не то, что в I2C, я просто использую его...),
Для ссылки, аппаратных фактов:
OS: Linux Architecture: TI OMAP3 3530 I2C-Chip: TWL4030 (does power, audio, usb and lots of other things..)
Не знаю, что это за микросхема, но часто бывают команды, требующие последовательность записей, сначала по одному адресу, чтобы установить определенный режим, потом читаешь или записываешь по другому адресу - где функция второго адреса меняется в зависимости от того, что ты записал по первому адресу. Таким образом, если драйвер находится в середине одной из этих операций, и Вы прерываете ее (или наоборот), то у Вас возникает состояние гонки, которое будет трудно отлаживать. Для надежного решения, вам лучше общаться через драйвер чипа...
.