![Infineon XDPP1100 Скачать руководство пользователя страница 505](http://html1.mh-extra.com/html/infineon/xdpp1100/xdpp1100_technical-reference-manual_2055193505.webp)
User Manual 505 of 562 V 1.0
2021-08-25
XDPP1100 technical reference manual
Digital power controller
Central processing unit subsystem
15.10.3.3
Read byte transaction
Here the process of managing an incoming READ_BYTE transaction (
) with and without PEC is
described, where the slave has to place data on the I
2
C bus following an initial sequence where the host sends
the read request.
•
Wait for PMB IRQ event and I_CODE == START_IRQ. This means there is an ongoing PMBus transaction.
•
Clear the interrupt event (write
“
1
”
into ISR.I_PMB).
•
Enable at least one control word in the ADR_LUT by setting the EN_ADDR field and the target slave address.
•
Select the ACK/NACK automatic detection on from ADR_LUT; that is, set CTRL_RX.ACK_SRC_SEL to 1.
•
Wait for PMB IRQ event and I_CODE == RX_ADR_W_IRQ.
•
Clear the interrupt event (write
“
1
”
into ISR.I_PMB).
•
Read the status of the ACK signal (STATUS_REG.ACK_STATUS).
•
If ACK_STATUS == 1, then the incoming address belongs to the device, hence load DATA_LUT with a valid
command mask table, read the data byte (this is the ADDRESS), select the proper ACK source for ACK/NACK
prediction (CTRL_RX.ACK_SRC_SEL to 2), trigger the FSM to move forward (write 1 into FSM_TRIGGER bit,
CTRL_RX.RX_TRIGGER = 1).
•
If ACK_STATUS == 0, drop transaction.
•
Wait for PMB IRQ event and I_CODE == RX_IRQ.
•
Clear the interrupt event (write
“
1
”
into ISR.I_PMB).
•
Read the status of the ACK signal (STATUS_REG.ACK_STATUS).
•
If ACK_STATUS == 1, command is valid, then depending on the received command, load DATA_LUT with a
valid data range mask, read the data byte (this is the CMD_BYTE), select the proper ACK source for
comparison (CTRL_RX.ACK_SRC_SEL to 2), trigger the FSM to move forward (write
“
1
”
into FSM_TRIGGER
bit, CTRL_RX.RX_TRIGGER = 1).
•
If ACK_STATUS == 0, drop transaction as command is not valid (NACK received).
•
Enable irq_rx_after_start.
•
Wait for irq_rx_after_start interrupt assertion.
•
Clear the interrupt event (write
“
1
”
into ISR.IFx).
•
Read the slave address.
•
Check for address consistency.
•
If the address belongs to the device, enable reception of irq_rx interrupt event to detect the next incoming
byte, set the ACK bit and trigger the FSM to move forward (write
“
3
”
into FSM_TRIGGER bit); otherwise
enable the reception of the irq_rx_after_start interrupt event again, set NACK (i.e., ~ACK) and trigger FSM to
move forward.
•
Wait for irq_rx interrupt assertion.
•
Clear the interrupt event (write
“
1
”
into ISR.IFx).
•
Read the data byte (this is the CMD_BYTE).
•
Check the validity of command.
•
If “valid” then set the expected number of bytes to be received with the comman
ds (0 in this case), enable
the reception of the irq_rx interrupt event, set ACK and trigger the FSM to mov
e forward. If “not valid”: drop
transaction, enable the reception of the irq_rx_after_start interrupt event again, set NACK (i.e., ~ACK) and
trigger FSM to move forward.
•
Wait for irq_tx_after_start interrupt assertion (other events will trigger different command interpretations).
•
Clear the interrupt event (write
“
1
”
into ISR.IFx).