top of page

I2C eTPU Driver

This driver has been released under the Eclipse Public License version 2.0!  It can be found on GitHub.

​

The ASH WARE I2C eTPU Driver allows the NXP eTPU to be connected to an I2C bus running in Standard-mode or Fast-mode, as either a master or slave node.  By using the output pin pad open drain capability, no external hardware is required for this connection other than a pullup.  This driver has been written to support both the eTPU and eTPU2 devices, and can run on any NXP or STMicro chip with the eTPU/eTPU2 peripheral.

Versions

2.00 - modernize the host API and structure and move to GitHub

1.11 - fix minor scripting issues

1.10 - modified to run under DevTool (the new IDE)

1.00 - initial version

I2C Master Features and Details

The I2C master driver supports the following features.

  • up to 400 KHz operation, or better.  The actual limit depends upon the eTPU clock rate and other functions in the eTPU.

  • read, write and combined format transfers

  • 7-bit addressing

  • START byte via combined format

  • unexpected NACKs reported

  • clock stretching (synchronization) by slave devices

  • interrupt on transfer completion

Arbitration (multi-master), high-speed mode, CBUS and 10-bit addressing are not currently supported. The I2C master solution uses 4 consecutive eTPU channels and their associated pins. The first two must be connected to the SCL wire, the second two to the SDA wire. They function as follows:

base channel: SCL_out

base channel+1: SCL_in

base channel+2: SDA_out

base channel+3: SDA_in

I2C_master_pin_connections.jpg

I2C Slave Features and Details

The I2C slave driver supports the following features.

  • up to 400 KHz operation, or better.  The actual limit depends upon the eTPU clock rate and other functions in the eTPU.

  • programmable 7-bit address

  • read, write and combined format transfers

  • programmable acceptance of general calls

  • handles START bytes

  • interrupt on read request and transfer completion

  • supports a wait-for-read-data mode wherein the slave driver holds the SCL wire low when a read request is received until the host has filled the read data buffer and alerted that eTPU that the data is ready.

The I2C slave solution uses 4 consecutive eTPU channels and their associated pins. The first two must be connected to the SCL wire, the second two to the SDA wire. They function as follows:

base channel: SCL_in

base channel+1: SCL_out

base channel+2: SDA_in

base channel+3: SDA_out

I2C_slave_pin_connections.jpg

Example Waveforms

The following waveforms show the SCL and SDA wires during a write and read transfer.  Both a master and slave have been instantiated on a single eTPU, and connected together.  Signal levels for all the master channels (write transfer), and all the slave channels (read transfer) are shown as well.

I2C_master_waveform.jpg
I2C_slave_waveform.jpg

Testing

Testing includes 100 % code and jump coverage of the eTPU software. All features described in the User Manual have been tested.

Project Artifacts

  • User Manual

  • I2C eTPU C source code files etec_i2c_master.[c,h] and etec_i2c_slave.[c,h] that implement the I2C driver functionality in the eTPU.  These are configured for use with the ETEC eTPU C Compiler, but can be configured to work with other compilers if necessary (ETEC yields the best performance).

  • eTPU Simulator test suite that tests all I2C master and slave features with 100% code and jump coverage.

  • Host-side I2C driver software that initializes and works with the eTPU.  This can be used as-is or modified for specific application requirements.

  • Test / example host-side application software.

  • eTPU System Simulator test suite for the I2C host software.

​​

ASH2 Logo.png
bottom of page