The espressif implementation sets the is_read flag always as true, which prevents the user from reading data as a target. https://github.com/adafruit/circuitpython/blob/90714c1ac120f5ad6804995b35ca80a9a55bab14/ports/espressif/common-hal/i2ctarget/I2CTarget.c#L104