I2C MPC5478G

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

I2C MPC5478G

Jump to solution
481 Views
ALTUN
Contributor I

Hi, I want to communicate with an amplifier using the MPC5748G. I'm using the i2c_transfer_mpc5748g sample code from the Power Architecture. The amplifier's address is 0x70. What modifications do I need to make to achieve this? also i2c driver sends
adress->data  but i want to make it adress of amplifier(adress) ->amplifier register(subadress)-> data.

0 Kudos
Reply
1 Solution
441 Views
PetrS
NXP TechSupport
NXP TechSupport

Hi,

the Slave device address is set within Component inspector and it is automatically sent as first byte after START is issued.
The Slave’s register/memory address, must be stored into first byte(s) of the “txBuffer” depending on address size.
 
So assuming 16bit address is used and you want to write 8 bytes (1,2,3,..,8) to Slave address 0x000C, then prepare txBuffer as
 
txBuffer = {0x00, 0x0C, 1, 2, 3, 4, 5, 6, 7, 8};
 
and use I2C_DRV_MasterSendDataBlocking(instance, txBuffer, 10, true, timeout);
 
If you want to read 8 bytes from the same memory address then use this
 
I2C_DRV_MasterSendDataBlocking(instance, txBuffer, 2, false, timeout); // just memory/register address will be sent after Slave address so total 3 bytes, STOP is not generated
I2C_DRV_MasterReceiveDataBlocking(instance, rxBuffer, 8, true, timeout); // Repeat Start is issued following Slave address and waiting reading for 8 bytes

Hope it helps.

BR, Petr

View solution in original post

1 Reply
442 Views
PetrS
NXP TechSupport
NXP TechSupport

Hi,

the Slave device address is set within Component inspector and it is automatically sent as first byte after START is issued.
The Slave’s register/memory address, must be stored into first byte(s) of the “txBuffer” depending on address size.
 
So assuming 16bit address is used and you want to write 8 bytes (1,2,3,..,8) to Slave address 0x000C, then prepare txBuffer as
 
txBuffer = {0x00, 0x0C, 1, 2, 3, 4, 5, 6, 7, 8};
 
and use I2C_DRV_MasterSendDataBlocking(instance, txBuffer, 10, true, timeout);
 
If you want to read 8 bytes from the same memory address then use this
 
I2C_DRV_MasterSendDataBlocking(instance, txBuffer, 2, false, timeout); // just memory/register address will be sent after Slave address so total 3 bytes, STOP is not generated
I2C_DRV_MasterReceiveDataBlocking(instance, rxBuffer, 8, true, timeout); // Repeat Start is issued following Slave address and waiting reading for 8 bytes

Hope it helps.

BR, Petr