This is just a heads-up about the I2CPacket.read(i2c_flags_t flags, uint16_t 
addr, uint8_t length, uint8_t* data) function in the Atm128I2CMasterC component.
 
To read n bytes from a slave, the parameter length must be set to (n+1). In the 
returned function, async event void readDone(error_t error, uint16_t addr, 
uint8_t length, uint8_t* data), the first bytes read will be in data[1]; second 
byte in data[2] and so on. The byte in data[0] will contain the slave address 
and the R/notW bit.
 
I don't know if that was done on purpose as I couldn't find any of that 
mentionned in the comments.
 
If someone does want to fix this, the source of the problem is in the 
Atm128I2CMasterPacketP component (I have version 1.7 2007/11/01 18:10:36 
fredjiang Exp). More specifically, in the I2C.commandComplete() function. The 
problem is that the index value is incremented before the first byte is read 
from the slave. Therefore, at line 260 when the contents of the 
Two-Wire-Interface buffer is read and stored, the function is actually storing 
the byte it last sent. That is, it is reading the address and the R/notW bit it 
just wrote onto the I2C bus.
 
Chris

_______________________________________________
Tinyos-help mailing list
Tinyos-help@millennium.berkeley.edu
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to