The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Device::BusPirate::Mode::I2C - use Device::BusPirate in I2C mode

SYNOPSIS

   use Device::BusPirate;

   my $pirate = Device::BusPirate->new;
   my $i2c = $pirate->enter_mode( "I2C" )->get;

   my $addr = 0x20;

   my $count = 0;
   while(1) {
      $i2c->send( $addr, chr $count )->get;
      my $in = ord $i2c->recv( $addr, 1 )->get;
      printf "Read %02x\n", $in;

      $count++; $count %= 255;
   }

DESCRIPTION

This object is returned by a Device::BusPirate instance when switching it into I2C mode. It provides methods to configure the hardware, and interact with one or more I2C-attached chips.

METHODS

The following methods documented with await expressions Future instances.

configure

   await $i2c->configure( %args );

Change configuration options. The following options exist:

speed

A string giving the clock speed to use for I2C. Must be one of the values:

   5k 50k 100k 400k

start_bit

   await $i2c->start_bit;

Sends an I2C START bit transition

stop_bit

   await $i2c->stop_bit;

Sends an I2C STOP bit transition

write

   await $i2c->write( $bytes );

Sends the given bytes over the I2C wire. This method does not send a preceding start or a following stop; you must do that yourself, or see the send and recv methods.

read

   $bytes = await $i2c->read( $length );

Receives the given number of bytes over the I2C wire, sending an ACK bit after each one but the final, to which is sent a NACK.

send

   await $i2c->send( $address, $bytes );

A convenient wrapper around start_bit, write and stop_bit. This method sends a START bit, then an initial byte to address the slave in WRITE mode, then the remaining bytes, followed finally by a STOP bit. This is performed atomically by using the enter_mutex method.

$address should be an integer, in the range 0 to 0x7f.

recv

   $bytes = await $i2c->recv( $address, $length );

A convenient wrapper around start_bit, write, read and stop_bit. This method sends a START bit, then an initial byte to address the slave in READ mode, then reads the given number of bytes, followed finally by a STOP bit. This is performed atomically by using the enter_mutex method.

$address should be an integer, in the range 0 to 0x7f.

send_then_recv

   $bytes_in = await $ic->send_then_recv( $address, $bytes_out, $read_len );

A convenient wrapper around start_bit, write, read and stop_bit. This method combines a send and recv operation, with a repeated START condition inbetween (not a STOP). It is useful when reading values from I2C slaves that implement numbered registers; sending the register number as a write, before requesting the read.

$address should be an integer, in the range 0 to 0x7f.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>