Answers checklist.
IDF version.
v5.5.2
Espressif SoC revision.
ESP32-S3
Operating System used.
Linux
How did you build your project?
Command line with idf.py
If you are using Windows, please specify command line type.
None
Development Kit.
LilyGo T7 S3
Power Supply used.
USB
What is the expected behavior?
I use ulp_riscv_i2c_master_read_from_device to send an address+register pair:
ulp_riscv_i2c_master_set_slave_addr(address);
ulp_riscv_i2c_master_set_slave_reg_addr(send_buffer.at(0));
if((rv = ulp_riscv_i2c_master_read_from_device(receive_buffer.data(), receive_buffer.size())) != ESP_OK)
throw(transient_exception(this->log.esp_string_error(rv, "I2c::ULPModule::send_receive: ulp_riscv_i2c_master_write_to_device")));
This works when the slave responds with data and ACK.
What is the actual behavior?
If the slave responds with ACK after the address and then NAK after the data (which is a real possibility), the function or the ULP I2C module goes haywire. It repeats the sequence for 48 times, after that it keeps repeating with address 0x00 and register 0x00 64 times. After that the slave stops responding to the 0x00 address and it's NAKs. A bit liater the address and data sent become fairly random.
The whole "process stops" after 3684 ms at 100 kHz.
Steps to reproduce.
- Send something to a slave using the ULP IC2
- Have the slave ACK the address and NAK the data.
That's enough to reproduce.
Debug Logs.
Diagnostic report archive.
No response
More Information.

Answers checklist.
IDF version.
v5.5.2
Espressif SoC revision.
ESP32-S3
Operating System used.
Linux
How did you build your project?
Command line with idf.py
If you are using Windows, please specify command line type.
None
Development Kit.
LilyGo T7 S3
Power Supply used.
USB
What is the expected behavior?
I use ulp_riscv_i2c_master_read_from_device to send an address+register pair:
This works when the slave responds with data and ACK.
What is the actual behavior?
If the slave responds with ACK after the address and then NAK after the data (which is a real possibility), the function or the ULP I2C module goes haywire. It repeats the sequence for 48 times, after that it keeps repeating with address 0x00 and register 0x00 64 times. After that the slave stops responding to the 0x00 address and it's NAKs. A bit liater the address and data sent become fairly random.
The whole "process stops" after 3684 ms at 100 kHz.
Steps to reproduce.
That's enough to reproduce.
Debug Logs.
Diagnostic report archive.
No response
More Information.