I2C_TRIGGER_MSO2X
Download Flojoy Studio to try this app
  
 Set the MSO2XX I2C trigger settings. Requires a CONNECT_MSO2X block to create the connection.
Tested on MSO22 and MSO24.  Params:    connection : VisaConnection  The VISA address (requires the CONNECTION_MSO2X block).   bus_num : int, default=1  Bus number to use as the trigger.   condition : select, default=start  What to trigger on   addr_bits : select, default=10  The number of bits in the address to trigger on   addr : str, default=0101010010  The address to trigger on (binary only currently). Can use X (0 or 1).
Putting a lower number of bits: e.g. "1011" sets the address XXX1011.   data_direction : select, default=read  Trigger on read, write, or either data direction.   data_size : int, default=1  The data size, in bytes, to trigger on.   data_value : str, default=11001101  The data to trigger on (binary only currently).
Can use X for wildcard (e.g. XXXXXXXX).     Returns:    out : String  Trigger settings    
Python Code
from typing import Optional, Literal
from flojoy import VisaConnection, flojoy, DataContainer, String
@flojoy(inject_connection=True)
def I2C_TRIGGER_MSO2X(
    connection: VisaConnection,
    input: Optional[DataContainer] = None,
    bus_num: int = 1,
    condition: Literal[
        "start",
        "stop",
        "repeatstart",
        "ackmiss",
        "address",
        "data",
        "addranddata",
    ] = "start",
    addr_bits: Literal["7", "10"] = "10",
    addr: str = "0101010010",
    data_direction: Literal["read", "write", "nocare"] = "read",
    data_size: int = 1,
    data_value: str = "1100101",
) -> String:
    """Set the MSO2XX I2C trigger settings.
    Requires a CONNECT_MSO2X block to create the connection.
    Tested on MSO22 and MSO24.
    Parameters
    ----------
    connection : VisaConnection
        The VISA address (requires the CONNECTION_MSO2X block).
    bus_num : int, default=1
        Bus number to use as the trigger.
    condition : select, default=start
        What to trigger on
    addr_bits : select, default=10
        The number of bits in the address to trigger on
    addr : str, default=0101010010
        The address to trigger on (binary only currently). Can use X (0 or 1).
        Putting a lower number of bits: e.g. "1011" sets the address XXX1011.
    data_direction : select, default=read
        Trigger on read, write, or either data direction.
    data_size : int, default=1
        The data size, in bytes, to trigger on.
    data_value : str, default=11001101
        The data to trigger on (binary only currently).
        Can use X for wildcard (e.g. XXXXXXXX).
    Returns
    -------
    String
        Trigger settings
    """
    # Retrieve oscilloscope instrument connection
    scope = connection.get_handle()
    allowed = set("01Xx")
    assert set(addr) <= allowed, "addr must contain only 0, 1, or X"
    assert set(data_value) <= allowed, "addr must contain only 0, 1, or X"
    scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:CONDition {condition}")
    match condition:
        case "address":
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:ADDRess:MODe ADDR{addr_bits}")
            scope.write(f'TRIGger:A:BUS:B{bus_num}:I2C:ADDRess:VALue "{addr}"')
        case "data":
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:DIRection {data_direction}")
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:SIZe {data_size}")
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:VALue {data_value}")
        case "addranddata":
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:ADDRess:MODe ADDR{addr_bits}")
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:ADDRess:VALue {addr}")
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:DIRection {data_direction}")
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:SIZe {data_size}")
            scope.write(f"TRIGger:A:BUS:B{bus_num}:I2C:VALue {data_value}")
    return String(s="Trigger settings")
Example App
Having problems with this example app? Join our Discord community and we will help you out!
This app uses the Tektronix tm_measure library to decode I2C using a Tektronix MSO24 oscilloscope.
First the necessary blocks were added:
- 1 CONNECT_MSO2X
- 1 I2C_TRIGGER_MSO2X
- 1 SINGLE_TRIGGER_MSO2X
- 1 DECODE_I2C_MSO2X
- 1 TEXT_VIEW
Each of these blocks must change the connection parameter to the correct instrument. The parameters were changed to match the setup: the clock_channel and data_channel parameters were changed to the proper analog or digital channel. The I2C_TRIGGER_MSO2X parameters were changed to trigger on the corrent signal. For example:
- condition = address
- addr_bits = 7
- addr = 0010
therefore the actual address will be XXX0010 where X corresponds to a wildcard (0 or 1).
The blocks were connected as shown and the app was run.