I2C MPC5478G

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 
361件の閲覧回数
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 件の賞賛
返信
1 解決策
321件の閲覧回数
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

元の投稿で解決策を見る

1 返信
322件の閲覧回数
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