Skip to content

tomtor/ulp-i2c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5fd4251 · Jul 29, 2021

History

32 Commits
Oct 26, 2020
Oct 26, 2020
Jun 10, 2020
Oct 9, 2017
Jul 29, 2021
Oct 10, 2017

Repository files navigation

ULP I2C demo application

Example of ESP-32 ULP I2C application which reads a sensor (BMP-180) and wakes up the main processors after a significant change of the measured values.

Note that the ULP is quite limited in program size and IO options. An alternative is to use an ATTiny as ULP processor, see:

https://github.com/tomtor/ESPTiny

IDF requirements

Tested on IDF 4.1 with CMake build system

I2C bit banged support

Note that this example uses a bit-banged I2C implementation, because the hardware ULP I2C support cannot read 16 bit values. This is not essential for the BMP-180, but some sensors like the ADS-1015 DO require 16-bit readouts.

Example of Macro usage and ULP stack/subroutines

In additon this example shows ULP stack handling and reusable subroutines examples, like

waitMs

Wait some milliseconds

abs

Compute abs value of register

Credits

Parts of the original C code from

https://github.com/adafruit/Adafruit-BMP085-Library

were translated to ESP assembly.

Warning

Be aware of an assembler bug:

https://www.esp32.com/viewtopic.php?f=2&t=3228