I'm working on a project where I need to use GPIO to toggle pins high and low as well as gather sensor data from an I2C peripheral. I have each component working separately, GPIO using wiringPi and I2C using open()
and ioctl()
. Separately they work great. When I run them together, the I2C bus gets in a state where i2cdetect
shows all possible address values, and I can't communicate with the I2C device again until I reboot. Has anyone seen this before or does anyone know what I can do to fix this? I've tried only using wiringPi as well, and it breaks using both GPIO and I2C at the same time.
1 Answer
Alright, I'm an idiot. I accidentally had my button pin set to the pin used for I2C communication, and when I set it up as an input, it crashed I2C. I changed the pin assignment to the correct pin and I2C doesn't crash anymore, all works as expected. If anyone else is having this problem, double check your pin assignments.
wiringPi
-- using the linux I2C interface (which isioctl()
based) and GPIOs via sysfs is not a problem. It does sound odd that you say wiringPi screws up I2C when used alone; doesn't it have it's own I2C interface? Probably you should include an SSCCE here if you want serious attention.