System: RPi # B OS: Ubuntu-16.04 Ma'te desktop environment Problem: i2cdetect -y 1 command response ultra-slow after running a program using the pigpio library in a program.
Since I've had no luck with the wiringPi library with talking to a MCP23017 IO expander I thought I'd try the pigpio library.
Well reading and writing the MCP23017 registers works. gpioInitialise(), i2cOpen(), i2cClose(), & gpioTerminate() functions along with register read/writes work properly.
If a read/write fails I'd use the i2cdetect tool to verify the MCP23017 id seated OK in the breadboard. It has a habit of unseating itself on the pins 1 ... 14 side.
When I execute the i2cdetect command after reseating the MC_23017 the command response is super slow. I also get a ton of messages in syslog transfer timeouts:
Jun 22 19:39:06 rpi3b2 kernel: [18443.461850] i2c i2c-1: transfer timed out
Jun 22 19:39:07 rpi3b2 kernel: [18444.461859] i2c i2c-1: transfer timed out
Jun 22 19:39:08 rpi3b2 kernel: [18445.461901] i2c i2c-1: transfer timed out
Jun 22 19:39:09 rpi3b2 kernel: [18446.461903] i2c i2c-1: transfer timed out
Jun 22 19:39:10 rpi3b2 kernel: [18447.461916] i2c i2c-1: transfer timed out
Jun 22 19:39:11 rpi3b2 kernel: [18448.461929] i2c i2c-1: transfer timed out
Jun 22 19:39:12 rpi3b2 kernel: [18449.461918] i2c i2c-1: transfer timed out
Jun 22 19:39:13 rpi3b2 kernel: [18450.461928] i2c i2c-1: transfer timed out
Jun 22 19:39:14 rpi3b2 kernel: [18451.461929] i2c i2c-1: transfer timed out
Jun 22 19:39:15 rpi3b2 kernel: [18452.461946] i2c i2c-1: transfer timed out
Jun 22 19:39:16 rpi3b2 kernel: [18453.461929] i2c i2c-1: transfer timed out
Jun 22 19:39:17 rpi3b2 kernel: [18454.461957] i2c i2c-1: transfer timed out
Jun 22 19:39:18 rpi3b2 kernel: [18455.461944] i2c i2c-1: transfer timed out
Jun 22 19:39:19 rpi3b2 kernel: [18456.461917] i2c i2c-1: transfer timed out
I have to reboot the Pi to get a normal i2cdetect command response. However if I run the pigpio program the same result occur.
Can anyone help/provide an explaination on this? Much appriciated.
/*-------------------------------------------------------------------------------
* pgbl_01.c
* pigpio library.
* Blink LEDs program #1.
*/
/*-------------------------------------------------------------------------------
* Includes.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pigpio.h>
/*-------------------------------------------------------------------------------
* Global constants & variables.
*/
#define NUM_PINS 5
unsigned pins[] = { 5, 6, 13, 19, 26 };
/*-------------------------------------------------------------------------------
* Helper functions.
*/
// Print an 8-bit register value in binary.
//
const char* printb8(int x) {
static char b[9];
b[0] = '\0';
int z;
for (z = 128; z > 0; z >>= 1) {
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
} /* End printb */
// Press Any Key To Continue.
//
void paktc(){
printf("Press any key to continue...\n");
getchar();
//printf("%c\n", ch);
} /* End paktc */
/*-------------------------------------------------------------------------------
* Main function.
*/
int main(int argc, char **argv) {
char *message = "HELLO WOILD from the C programming language!!\n\n";
printf("%s", message);
if (gpioInitialise() < 0) {
fprintf(stderr, "pigpio initialisation failed.\n");
return(1);
}
else {
printf("pigpio initialisation OK.\n");
}
// Set pins for output low, delay 1 min, then high.
//
for (int p = 0; p < NUM_PINS; p++) {
gpioSetMode(p, PI_OUTPUT);
gpioWrite(pins[p], 0x00);
sleep(1);
gpioWrite(pins[p], 0x01);
}
// Clean up and close pigpio.
//
gpioTerminate();
printf("Done.\n");
} /* End main() */