Проблемы со связью в Linux I2C - PullRequest
0 голосов
/ 08 января 2019

Я работаю над пользовательской платой на базе процессора iMX6Q, которая использует ядро ​​linux-imx 4.9.11 (http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git/?h=imx_4.9.11_1.0.0_ga). Однако, когда я отправляю сообщение I2C на одну из периферийных устройств (у меня 4 подчиненные на шине i2c-2, процессор является единственным ведущим устройством) из контроллера возникает следующая ошибка:

[ 82.972843] i2c i2c-2: ioctl, cmd=0x703, arg=0x5c
[ 82.972854] i2c i2c-2: ioctl, cmd=0x720, arg=0x7ec06bbc
[ 82.972865] i2c i2c-2: master_xfer[0] R, addr=0x5c, len=1
[ 82.972871] i2c i2c-2: <i2c_imx_xfer>
[ 82.972877] i2c i2c-2: <i2c_imx_start>
[ 82.973053] i2c i2c-2: <i2c_imx_bus_busy>
[ 83.482804] i2c i2c-2: <i2c_imx_bus_busy> I2C bus is busy
[ 83.482810] i2c i2c-2: Trying i2c bus recovery
[ 83.482854] i2c i2c-2: <i2c_imx_start>
[ 83.483029] i2c i2c-2: <i2c_imx_bus_busy>
[ 83.992804] i2c i2c-2: <i2c_imx_bus_busy> I2C bus is busy
[ 83.992816] i2c i2c-2: <i2c_imx_xfer> exit with: error: -110

Взглянув на осциллограф, я вижу, что шина находится в высоком состоянии, когда находится в режиме ожидания (как и ожидалось). Тем не менее, когда я пытаюсь начать передачу, мастер устанавливает условие запуска на шине, затем, шина остается низкой (и SDA, и SCL) до истечения времени ожидания передачи, и драйвер предупреждает, что шина занята ошибкой тайм-аута. (хотя это действительно не так!). Я знаю, что это не проблема / ошибка HW, так как мне удается общаться через I2C через U-Boot (и более старые версии ядра, например, 4.1.15).

Я уже проверил конфигурацию ядра I2C, и, похоже, все в порядке. Кроме того, контроллер шины I2C правильно настроен в дереве устройств.

PD: конфигурация ядра по умолчанию (imx_v7_defconfig) не работает.

Спасибо!

Приветствия

Daniel

1 Ответ

0 голосов
/ 11 января 2019

Проблема исчезла. Мне просто нужно было изменить конфигурацию выводов i2c (в дереве устройств) с 0x1b8b0 на 0x4001b8b1 ... Это по-прежнему странно, потому что эти биты (маска 0xFFFE0000) помечены как зарезервированные в справочном руководстве iMX.6Q, хотя, похоже, они не так защищены. ... Кроме того, тот же самый файл Device Tree работал без проблем со старыми версиями ядра ...

В любом случае, он работает, как и ожидалось, прямо сейчас!

...