byte[] request=new byte[]{0x01}; //data that I want to write
byte[] response = new byte[13];
In setup()( function:
i2c=ioio_.openTwiMaster(2, TwiMaster.Rate.RATE_100KHz, false);In loop() function:if(i2c.writeRead(0x63, false, request, request.length, null, 0)) { //Here, I only want to writeif (i2c.writeRead(0x63, false, null, 0, response, response.length))// Here, I only want to read
{
for (int i = 0; i < 13; i++) {
pw.print(String.format("%02X", response[i]));
pw.print(" ");
}}Both writeRead() functions return true.However, the data 0x01 in request array is interpreted as an internal address of a register in the device. I could not get 0x01 interpreted as data and written into external device register.This may not be very clear, but maybe there are some people who can already spot the problem.Thank you in advance,Regards.
Why are you separating this into two transactions? It is very uncommon.
--
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 ioio-users+...@googlegroups.com.
To post to this group, send email to ioio-...@googlegroups.com.
Visit this group at https://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.
byte[] request=new byte[]{0x01}; //data that I want to write
byte[] response = new byte[1];
In setup()( function:
i2c=ioio_.openTwiMaster(2, TwiMaster.Rate.RATE_100KHz, false);In loop() function:
if(i2c.writeRead(0x63, false, request, request.length, response, response.length)) //This call returns true
{
pw.print(String.format("%02X", response[0]));
pw.print(" ");
}
If you want to write a byte, you typically perform a write read operation that has 2 bytes (register, value) on the write buffer and an empty read buffer. Then you can read back using another transaction, like the one you have.
byte[] write_reg_data = {(byte)0x03, (byte)0x20};// write 0x20 into register 0x03
byte[] empty_read ={}; //empty buffer passed to first writeRead below (to enable write only)
byte[] read_reg ={(byte)0x01};//start address for reading data, used in second writeRead call
byte[] read_buffer = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00}; // buffer to keep read elements
if(i2c.writeRead(0x63, false, write_reg_data, write_reg_data.length, empty_read,0))
if(i2c.writeRead(0x63, false, read_reg, read_reg.length, read_buffer, read_buffer.length))
{
for (int i = 0; i < 3; i++) {
pw.print(String.format("%02X", read_buffer[i])); //print out first three elements of read_buffer
}
}
private byte[] measurementArray = {(byte) 0x0f};
byte[] distanceArray = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
private void read(byte address, boolean monitorBusyFlag, byte[] register, byte[] saveData) throws ConnectionLostException, InterruptedException
read(LIDAR_ADDRESS, measurementArray, distanceArray)