parent
036902b032
commit
23b12eec6e
|
@ -312,6 +312,15 @@ void i2c_scan(I2CDriver *sd, uint8_t devices[128])
|
||||||
(void)readFromSerialPort(sd->port, devices + 8, 112);
|
(void)readFromSerialPort(sd->port, devices + 8, 112);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_reset(I2CDriver *sd)
|
||||||
|
{
|
||||||
|
charCommand(sd, 'x');
|
||||||
|
uint8_t a[1];
|
||||||
|
if (readFromSerialPort(sd->port, a, 1) != 1)
|
||||||
|
return 0;
|
||||||
|
return a[0];
|
||||||
|
}
|
||||||
|
|
||||||
int i2c_start(I2CDriver *sd, uint8_t dev, uint8_t op)
|
int i2c_start(I2CDriver *sd, uint8_t dev, uint8_t op)
|
||||||
{
|
{
|
||||||
uint8_t start[2] = {'s', (dev << 1) | op};
|
uint8_t start[2] = {'s', (dev << 1) | op};
|
||||||
|
@ -382,6 +391,15 @@ int i2c_commands(I2CDriver *sd, int argc, char *argv[])
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
{
|
||||||
|
uint8_t sda_scl = i2c_reset(sd);
|
||||||
|
printf("Bus reset. SDA = %d, SCL = %d\n",
|
||||||
|
1 & (sda_scl >> 1),
|
||||||
|
1 & sda_scl);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
{
|
{
|
||||||
uint8_t devices[128];
|
uint8_t devices[128];
|
||||||
|
@ -468,6 +486,7 @@ int i2c_commands(I2CDriver *sd, int argc, char *argv[])
|
||||||
fprintf(stderr, "Commands are:");
|
fprintf(stderr, "Commands are:");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, " i display status information (uptime, voltage, current, temperature)\n");
|
fprintf(stderr, " i display status information (uptime, voltage, current, temperature)\n");
|
||||||
|
fprintf(stderr, " x I2C bus reset\n");
|
||||||
fprintf(stderr, " d device scan\n");
|
fprintf(stderr, " d device scan\n");
|
||||||
fprintf(stderr, " w dev <bytes> write bytes to I2C device dev\n");
|
fprintf(stderr, " w dev <bytes> write bytes to I2C device dev\n");
|
||||||
fprintf(stderr, " p send a STOP\n");
|
fprintf(stderr, " p send a STOP\n");
|
||||||
|
|
Loading…
Reference in New Issue