I3C FIFO 目标¶
PxI3CFifoTarget 模拟具有主机可访问 RX 与 TX FIFO 的 I3C 目标器件。控制器在总线上写入的数据进入 RX FIFO(以事件交给 Python);Python 将数据入队到 TX FIFO,供控制器在总线上读取。
此目标也支持标准 I3C CCC 处理、Dynamic Address Assignment、IBI 与 Hot-Join。
TX FIFO 深度固定为 2 KB(扣除 8 字节簿记开销后为 2040 字节),无法从 Python 配置。单次 enqueue 最多可传送当前可用的 TX FIFO 容量。当总线读取抽空 TX FIFO 时,sent 事件会回报从 TX FIFO 抽走的字节数。
收到的数据以 receive 事件交给 Python,每个 receive 事件最多交付 1 KB。若传输大于 1 KB,会拆成多个事件。
功能¶
- 2 KB TX FIFO,支持主机端入队与分组总线事件。
- CCC 处理,包含地址分配、MRL/MWL、GETCAPS、GETSTATUS、GETMXDS 与组地址。
- 通过 CCC 启用时支持 IBI 与 Hot-Join。
数据流¶
Controller WRITE → RX FIFO → fifo_target_recv events → Python
Python enqueue → TX FIFO → Controller READ
Controller READ → (drains TX FIFO) → fifo_target_sent events → Python
PxI3CFifoTarget
¶
PxI3CFifoTarget(
exerciser: AqProtocolExerciser,
*args,
pid: int | None = None,
bcr: int = 0,
dcr: int = 0,
config: PxI3CFifoTargetConfig | None = None,
static_addr: int = 0,
minimum_mrl: int | None = None,
minimum_mwl: int | None = None,
getcaps_std_value: bytes | None = None,
getcaps_usr_value: list[tuple[int, bytes]] | None = None,
getstatus_std_value: bytes | None = None,
getstatus_usr_value: list[tuple[int, bytes]] | None = None,
getmxds_std_value: bytes | None = None,
getmxds_usr_value: list[tuple[int, bytes]] | None = None,
supported_group_address_count: int = 3,
reset_actions: int | PxI3CTargetResetAction | None = None,
reset_pin: int | None = None,
**kwargs
)
Bases: PxAbstractTarget[PxI3CFifoTargetConfig, PxI3CFifoTargetState]
I3C FIFO target.
Emulates an I3C target with host-accessible RX and TX FIFOs. Bytes written by
a controller on the bus are delivered to Python as packeted
fifo_target_recv events. Bytes enqueued from Python are presented on
subsequent bus reads; completed bus reads are reported as fifo_target_sent
events with the byte count drained in each transaction.
The target also supports standard I3C CCC handling, IBI, and Hot-Join like other I3C targets.
| CLASS | DESCRIPTION |
|---|---|
IbiType |
IBI type enumeration. |
HotJoinType |
Hot-Join type enumeration. |
| METHOD | DESCRIPTION |
|---|---|
add_event_handler |
Add an event handler to the current device instance, by event class or event name. |
remove_event_handler |
Remove an event handler from the current device instance, by event class or event name. |
get_event_handlers |
Retreive handlers registerd on this device. |
on_event |
Add an event handler to the instance by decorator, by event class or event name. |
match |
Return whether a device config describes a device of this class. |
update_additional_data |
Atomically update additional_data with revision-aware retry. |
update_config |
Set the config of the target. |
set_config |
Set the config of the target. |
attach_to_bus |
Attach the target to a bus. |
detach_from_bus |
Detach the device from the bus. |
perform_operation |
Send an operation. |
enqueue |
Enqueue bytes into the host-side TX FIFO. |
ibi_request |
Initiate an IBI request from the current target. |
send_hotjoin |
Initiate a Hot-Join request from the current target. |
| ATTRIBUTE | DESCRIPTION |
|---|---|
available_events_map |
Map each available event name to its id in event topics. |
is_attached |
Check if the device is attached to a bus.
TYPE:
|
state |
Get the state of the device.
TYPE:
|
name |
Get the name of the device.
TYPE:
|
cts_op_name |
Get the name of CTS operation. Currently not available now.
TYPE:
|
additional_data |
Get the opaque additional data blob associated with this device.
TYPE:
|
config |
Get the config of the device.
TYPE:
|
static_address |
Static address of the I3C FIFO target.
TYPE:
|
assigned_address |
Get the assigned address of the target.
TYPE:
|
event_state |
Get the event state of the target.
TYPE:
|
group_addresses |
Get the group addresses assigned to the target. |
mrl |
Get the maximum read length of the target.
TYPE:
|
mwl |
Get the maximum write length of the target.
TYPE:
|
tx_capacity |
Get the capacity of the FIFO.
TYPE:
|
tx_fill |
Number of bytes currently in the TX FIFO.
TYPE:
|
total_read |
Total bytes read by the controller from the target since configuration.
TYPE:
|
total_written |
Total bytes written by the controller to the target since configuration.
TYPE:
|
available_events_map
¶
Map each available event name to its id in event topics.
additional_data
¶
additional_data: bytes
Get the opaque additional data blob associated with this device.
total_read
¶
total_read: int
Total bytes read by the controller from the target since configuration.
total_written
¶
total_written: int
Total bytes written by the controller to the target since configuration.
add_event_handler
¶
Add an event handler to the current device instance, by event class or event name.
remove_event_handler
¶
remove_event_handler(
event: str | type[PxAbstractEvent], handler: Callable[[Any], Any] | None = None
) -> None
Remove an event handler from the current device instance, by event class or event name.
get_event_handlers
¶
get_event_handlers(
filter_by: Callable[[str], bool] | None = None,
) -> dict[str, list[Callable[[Any], Any]]]
Retreive handlers registerd on this device.
Handlers are always scoped to this device; an optional filter_by is
applied on friendly event names.
on_event
¶
on_event(
event_type: str | type[PxAbstractEvent],
) -> Callable[[Callable[..., Any]], Callable[..., Any]]
Add an event handler to the instance by decorator, by event class or event name.
match
¶
match(config: PxAbstractDeviceConfig) -> bool
Return whether a device config describes a device of this class.
update_additional_data
¶
Atomically update additional_data with revision-aware retry.
attach_to_bus
¶
Attach the target to a bus.
This method is used to make the device aware of the bus it is connected to. It is used to set the bus attribute of the device.
Note
This method will not automatically create an actual instance on
the Protocol Exerciser until user call the attach_to_bus method.
| PARAMETER | DESCRIPTION |
|---|---|
|
The bus to attach the device to
TYPE:
|
| RAISES | DESCRIPTION |
|---|---|
ValueError
|
If the device is already attached to a bus |
detach_from_bus
¶
Detach the device from the bus.
The opposite of the attach_to_bus method.
perform_operation
¶
perform_operation(
operation: PxDeviceOperation, *, timeout: int | None = None
) -> PxDeviceOperation
ibi_request
¶
ibi_request(
ibi_type: IbiType = IMMEDIATE,
mdb_value: bytes = b"",
additional_data: bytes = b"",
skip_bcr_check: bool = False,
) -> None
Initiate an IBI request from the current target.
send_hotjoin
¶
Initiate a Hot-Join request from the current target.