Forgive me, I had originally misinterpreted what you're trying to do.
The TWI interface only allows responses of size 254 or less.
The good news is the you don't really need to dump the entire EEPROM if all
you need is a small subset.
You probably want something like:
bool readEeprom(int start_address, byte[] result) {
byte request[] = new byte[] { (byte) start_address };
return twi_.writeRead(0x50, false, request, 1, result, result.length);
}
Then, you can call for example:
byte[] result = new byte[2];
if (readEeprom(247, result)) {
// result[0] now contains the value in EEPROM address 247
// result[1] now contains the value in EEPROM address 248
}
etc...
If you need to dump the entire thing, just do two transactions of 128 bytes
or so.
Similarly, you can write a simple writeEeprom() function for calibration.
This would be a write-only operation (i.e. response is null and response
size is 0), where the start_address sites the first byte of the request
buffer, followed by the contents to be written starting at this address.
On Fri, Mar 21, 2014 at 1:23 PM, Santiago Alfaro <[email protected]>wrote:
> Hi,
>
> yes I have pull-ups to the 3.3 coming from the ioio and I have the sensor
> on a separate source at 2.6 with all grounds connected.
>
> so what you mean is I should do this...
>
> *try {*
> * Log.d(TAG, ":| Trying to read");*
> * if (port.writeRead(address, false,
> request,request.length,response,response.length)){*
> * Log.i(TAG, ":) Got Initial response"); *
> * for(int i=0; i<response.length; i++){*
> * Log.i(TAG, "EEPROM Dump "+i+" = "+ response[i]);*
> * if(i == 0xf7){*
> * Log.i(TAG, "Triming Value = "+ response[i]);*
> * }*
> * }*
> * }else{*
> * Log.i(TAG, ":( NO response"); *
> * }*
>
>
> ... right? But then again I have the problem that when *response.length =
> 255*, I get "*:( NO response"* but when *response.length = 120* I get a
> bunch of numbers but not the one I need which is 247. I'm not sure if that
> is part of the problem, but I'm curious since I don't know yet why that
> happens.
>
>
> On Thursday, March 20, 2014 8:12:44 PM UTC-4, Ytai wrote:
>
>> The writeRead() function returns a boolean that will be false in case
>> anything goes wrong (for example, failing to get an ACK from the device).
>> The contents of the response array do not matter, only its size.
>> Do you have pull-ups on SDA and SCL?
>>
>>
>> On Thu, Mar 20, 2014 at 2:29 PM, Santiago Alfaro <[email protected]>wrote:
>>
>>> Here is where I keep getting into trouble.
>>>
>>> I've tried with 0x00 meaning that
>>>
>>> byte[] request = new byte[] { 0x00 }; //Byte address to ask for sensor
>>> data
>>>
>>> but that gives me an EEPROM dump of 0 and I know that is not right.
>>>
>>> I added the "0x50" on the request byte because I figured I was doing
>>> something wrong and on the Datasheet it shows that EEPROM Dump has the
>>> Slave Address and a Write, then the command (0x00) and then the
>>> slaveaddress (again) and a Read so since just 0x00 was not working I tried
>>> that and won't work either.
>>>
>>> How do I check for the return value of writeRead? won't that be the
>>> actual EEPROM Dump that I get with the for loop?
>>>
>>> also, in the arduino code I can use this line i2c_start_wait(0xA0);
>>> which Issues a start condition and sends address and transfer direction. If
>>> device is busy, use ack polling to wait until device is ready is there
>>> a way to do this with the ioio?
>>>
>>> Lastly, in playing with variables and trying things I realized that if I
>>> have the response byte be { 0xFF } my EEPROM dump will be all 0. But if I
>>> change the response Byte to { 0x7F } then I get a bunch of numbers. I don't
>>> understand why the length of the response byte changes the values of the
>>> response.
>>>
>>> Thanks
>>> Santiago
>>>
>>>
>>> On Wednesday, March 19, 2014 5:58:11 PM UTC-4, Ytai wrote:
>>>
>>>> You only need your twi write to be one byte long (0x00).
>>>> Also make sure to check the return value of writeRead
>>>> On Mar 19, 2014 2:29 PM, "Santiago Alfaro" <[email protected]> wrote:
>>>>
>>>>> Hello All
>>>>>
>>>>> I'm starting to get a handle on TWI on the ioio but I have not been
>>>>> able to get an EEPROM dump from this sensor.
>>>>>
>>>>> The datasheet for the sensor can be found here http://www.melexis.com/
>>>>> MLX90620
>>>>>
>>>>> and what I think are the relevant parts of it are these:
>>>>>
>>>>>
>>>>> <https://lh4.googleusercontent.com/-DQO16I0bc_8/UyoLocosLAI/AAAAAAAAFU4/Df0qFbs20Xo/s1600/EEPROM.png>
>>>>>
>>>>> and
>>>>>
>>>>>
>>>>>
>>>>> <https://lh4.googleusercontent.com/-D2PP5yuAifY/UyoKBahwBOI/AAAAAAAAFUs/5NfmDToaRdc/s1600/ExportWholeEEPROM.png>
>>>>>
>>>>>
>>>>> The code I have so far is this:
>>>>>
>>>>>
>>>>> * twiEeprom = ioio_.openTwiMaster(0, TwiMaster.Rate.RATE_400KHz,
>>>>> false); *
>>>>>
>>>>> * ...*
>>>>>
>>>>> * ReadEeprom(0x50, twiEeprom);*
>>>>>
>>>>> * ...*
>>>>>
>>>>> * public void ReadEeprom(int address, TwiMaster port) {*
>>>>>
>>>>> * byte[] request = new byte[] { 0x00, 0x50 }; //Byte address to ask
>>>>> for sensor data*
>>>>>
>>>>> * byte[] response = new byte[ 0xFF ]; //Byte to save sensor data*
>>>>>
>>>>> * try {*
>>>>>
>>>>> * Log.d(TAG, ":| Trying to read");*
>>>>>
>>>>> * port.writeRead(address, false,
>>>>> request,request.length,response,response.length);*
>>>>>
>>>>> * for(int i=0; i<response.length; i++){*
>>>>>
>>>>> * Log.i(TAG, "EEPROM Dump "+i+" = "+ response[i]);*
>>>>>
>>>>> * }*
>>>>>
>>>>> * Log.d(TAG, ":) success reading");*
>>>>>
>>>>> * ...*
>>>>>
>>>>> My problem is that I keep getting all zeros on the EEPROM Dump. I know
>>>>> I'm correctly connected because it works on an Arduino. (also because I
>>>>> already burnt a IOIO trying to figure another thing out :D but now the new
>>>>> one is surviving )
>>>>>
>>>>>
>>>>> Is there anything that jumps out that I'm doing wrong? I can send more
>>>>> detail if needed.
>>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Santiago
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "ioio-users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>>
>>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "ioio-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/ioio-users.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "ioio-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/ioio-users.
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"ioio-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.