-->
Page 1 of 2

Wire.requestFrom(0x28,0,true) gets a panic

PostPosted: Mon Jan 09, 2017 10:34 pm
by mnewman401
I am using version Arduino15, ESP8266 1.6.2.

I am attempting to read data from an All Sensors DLVR-L05D. This device starts its data capture and conversion when it gets a read request with a stop bit after the ACK to the address byte.

I expected Wire.requestFrom(0x28,0,true) to perform this operation. With the device unplugged it works as expected and I see what I expect on the logic analyzer. With the device plugged in if I read 1 byte it works correctly. If I read 0 bytes I get a panic (dump below lots more fffffffffff ffffffffff lines follow).

On the logic analyzer the read triggered by this call shows 49 bytes of data following the address byte. This seems inconsistent with my (0 length) read request.

The panic does not seem to be related to my device. I get a similar panic when I try to read 0 bytes from a MAX11615 ADC.

I took a look at the library code and at first glance it looks like it should handle this case:

size_t ICACHE_FLASH_ATTR i2c_master_read_from(int address, uint8_t* data, size_t size, bool sendStop) {
i2c_start();
i2c_write(address << 1 | 1);
int ack = i2c_get_ack();
uint8_t* end = data + size;
for(; data != end; ++data) {
i2c_set_sda(1);
pinMode(ESP_PINS_OFFSET + s_sda_pin, INPUT);
*data = i2c_read();
pinMode(ESP_PINS_OFFSET + s_sda_pin, OUTPUT_OPEN_DRAIN);
if(data == end - 1)
i2c_set_ack(0);
else
i2c_set_ack(1);
}
if(sendStop)
i2c_stop();
return size;
}




LOGGER> ! EXECUTING: iread 1 0x28
Read 1 bytes from I2C device at address 0x28
0xC0
LOGGER> ! EXECUTING: iread 0 0x28
Read 0 bytes from I2C device at address 0x28

Panic :32571151

ctx: cont
sp: 3fff3bc0 end: ffffffff offset: 01b0

>>>stack>>>
3fff3d70: ffffffff ffffffff ffffffff ffffffff
3fff3d80: ffffffff ffffffff ffffffff ffffffff
3fff3d90: 3fff2d84 0000001f 0000534d 40201a87
3fff3da0: ffffffff 00000003 ffffffff ffffffff
3fff3db0: ffffffff ffffffff ffffffff ffffffff
3fff3dc0: ffffffff ffffffff ffffffff ffffffff
3fff3dd0: ffffffff ffffffff ffffffff ffffffff
3fff3de0: ffffffff ffffffff ffffffff ffffffff
3fff3df0: ffffffff ffffffff ffffffff ffffffff
3fff3e00: ffffffff ffffffff ffffffff ffffffff
3fff3e10: ffffffff ffffffff ffffffff ffffffff
3fff3e20: ffffffff ffffffff ffffffff ffffffff
3fff3e30: ffffffff ffffffff ffffffff ffffffff
3fff3e40: ffffffff ffffffff ffffffff ffffffff
3fff3e50: ffffffff ffffffff ffffffff ffffffff
3fff3e60: ffffffff ffffffff ffffffff ffffffff
3fff3e70: ffffffff ffffffff ffffffff ffffffff
3fff3e80: ffffffff ffffffff ffffffff ffffffff
3fff3e90: ffffffff ffffffff ffffffff ffffffff
3fff3ea0: ffffffff ffffffff ffffffff ffffffff
3fff3eb0: ffffffff ffffffff ffffffff ffffffff
3fff3ec0: ffffffff ffffffff ffffffff ffffffff
3fff3ed0: ffffffff ffffffff ffffffff ffffffff
3fff3ee0: ffffffff ffffffff ffffffff ffffffff
3fff3ef0: ffffffff ffffffff ffffffff ffffffff
3fff3f00: ffffffff ffffffff ffffffff ffffffff
3fff3f10: ffffffff ffffffff ffffffff ffffffff
3fff3f20: ffffffff ffffffff ffffffff ffffffff
3fff3f30: ffffffff ffffffff ffffffff ffffffff
3fff3f40: ffffffff ffffffff ffffffff ffffffff
3fff3f50: ffffffff ffffffff ffffffff ffffffff
3fff3f60: ffffffff ffffffff ffffffff ffffffff
3fff3f70: ffffffff ffffffff ffffffff ffffffff
3fff3f80: ffffffff ffffffff ffffffff ffffffff
3fff3f90: ffffffff ffffffff ffffffff ffffffff
3fff3fa0: ffffffff ffffffff ffffffff ffffffff
3fff3fb0: ffffffff ffffffff ffffffff ffffffff
3fff3fc0: ffffffff ffffffff ffffffff ffffffff
3fff3fd0: ffffffff ffffffff ffffffff ffffffff
3fff3fe0: ffffffff ffffffff ffffffff ffffffff
3fff3ff0: ffffffff ffffffff ffffffff ffffffff
3fff4000: ffffffff ffffffff ffffffff ffffffff
3fff4010: ffffffff ffffffff ffffffff ffffffff
3fff4020: ffffffff ffffffff ffffffff ffffffff
3fff4030: ffffffff ffffffff ffffffff ffffffff
3fff4040: ffffffff ffffffff ffffffff ffffffff
3fff4050: ffffffff ffffffff ffffffff ffffffff
3fff4060: ffffffff ffffffff ffffffff ffffffff
3fff4070: ffffffff ffffffff ffffffff ffffffff
3fff4080: ffffffff ffffffff ffffffff ffffffff
3fff4090: ffffffff ffffffff ffffffff ffffffff
3fff40a0: ffffffff ffffffff ffffffff ffffffff
3fff40b0: ffffffff ffffffff ffffffff ffffffff
3fff40c0: ffffffff ffffffff ffffffff ffffffff
3fff40d0: ffffffff ffffffff ffffffff ffffffff
3fff40e0: ffffffff ffffffff ffffffff ffffffff
3fff40f0: ffffffff ffffffff ffffffff ffffffff
3fff4100: ffffffff ffffffff ffffffff ffffffff
3fff4110: ffffffff ffffffff ffffffff ffffffff
3fff4120: ffffffff ffffffff ffffffff ffffffff
3fff4130: ffffffff ffffffff ffffffff ffffffff
3fff4140: ffffffff ffffffff ffffffff ffffffff
3fff4150: ffffffff ffffffff ffffffff ffffffff
3fff4160: ffffffff ffffffff ffffffff ffffffff
3fff4170: ffffffff ffffffff ffffffff ffffffff
3fff4180: ffffffff ffffffff ffffffff ffffffff
3fff4190: ffffffff ffffffff ffffffff ffffffff
3fff41a0: ffffffff ffffffff ffffffff ffffffff
3fff41b0: ffffffff ffffffff ffffffff ffffffff
3fff41c0: ffffffff ffffffff ffffffff ffffffff
3fff41d0: ffffffff ffffffff ffffffff ffffffff
3fff41e0: ffffffff ffffffff ffffffff ffffffff
3fff41f0: ffffffff ffffffff ffffffff ffffffff
3fff4200: ffffffff ffffffff ffffffff ffffffff
3fff4210: ffffffff ffffffff ffffffff ffffffff
3fff4220: ffffffff ffffffff ffffffff ffffffff
3fff4230: ffffffff ffffffff ffffffff ffffffff
3fff4240: ffffffff ffffffff ffffffff ffffffff
3fff4250: ffffffff ffffffff ffffffff ffffffff
3fff4260: ffffffff ffffffff ffffffff ffffffff
3fff4270: ffffffff ffffffff ffffffff ffffffff
3fff4280: ffffffff ffffffff ffffffff ffffffff
3fff4290: ffffffff ffffffff ffffffff ffffffff
3fff42a0: ffffffff ffffffff ffffffff ffffffff
3fff42b0: ffffffff ffffffff ffffffff ffffffff
3fff42c0: ffffffff ffffffff ffffffff ffffffff
3fff42d0: ffffffff ffffffff ffffffff ffffffff
3fff42e0: ffffffff ffffffff ffffffff ffffffff
3fff42f0: ffffffff ffffffff ffffffff ffffffff
3fff4300: ffffffff ffffffff ffffffff ffffffff
3fff4310: ffffffff ffffffff ffffffff ffffffff
3fff4320: ffffffff ffffffff ffffffff ffffffff
3fff4330: ffffffff ffffffff ffffffff ffffffff
3fff4340: ffffffff ffffffff ffffffff ffffffff
3fff4350: ffffffff ffffffff ffffffff ffffffff
3fff4360: ffffffff ffffffff ffffffff ffffffff
3fff4370: ffffffff ffffffff ffffffff ffffffff
3fff4380: ffffffff ffffffff ffffffff ffffffff
3fff4390: ffffffff ffffffff ffffffff ffffffff
3fff43a0: ffffffff ffffffff ffffffff ffffffff
3fff43b0: ffffffff ffffffff ffffffff ffffffff
3fff43c0: ffffffff ffffffff ffffffff ffffffff
3fff43d0: ffffffff ffffffff ffffffff ffffffff
3fff43e0: ffffffff ffffffff ffffffff ffffffff
3fff43f0: ffffffff ffffffff ffffffff ffffffff
3fff4400: ffffffff ffffffff ffffffff ffffffff
3fff4410: ffffffff ffffffff ffffffff ffffffff
3fff4420: ffffffff ffffffff ffffffff ffffffff
3fff4430: ffffffff ffffffff ffffffff ffffffff
3fff4440: ffffffff ffffffff ffffffff ffffffff
3fff4450: ffffffff ffffffff ffffffff ffffffff
3fff4460: ffffffff ffffffff ffffffff ffffffff
3fff4470: ffffffff ffffffff ffffffff ffffffff
3fff4480: ffffffff ffffffff ffffffff ffffffff
3fff4490: ffffffff ffffffff ffffffff ffffffff
3fff44a0: ffffffff ffffffff ffffffff ffffffff

Re: Wire.requestFrom(0x28,0,true) gets a panic

PostPosted: Tue Jan 10, 2017 11:28 am
by martinayotte
Although I don't see where is the error, this code is not the one coming from ArduinoESP framework.
Where did you took it ?

Re: Wire.requestFrom(0x28,0,true) gets a panic

PostPosted: Tue Jan 10, 2017 12:00 pm
by mnewman401
The code fragment came from

c:\Users\mnewman\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.2\cores\esp8266\i2c.cpp

which appears to be used by

c:\Users\mnewman\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.2\libraries\Wire\Wire.cpp

I would actually be happy to learn that I did not locate the code in use and that the code actually in use has a bug that can be fixed.

The symptoms suggest that the code does not check for a 0 length request and that it starts counting down from (0 - 1) and overruns some buffer because the count is too large....

Re: Wire.requestFrom(0x28,0,true) gets a panic

PostPosted: Wed Jan 11, 2017 9:05 am
by martinayotte
1.6.2 framework is way too old, we are currently at 2.3.0.
Maybe you should try to upgrade to see if the issue still there.