示例#1
0
def _open_debugmbox(pass_obj: Dict) -> Iterator[DebugMailbox]:
    """Method opens DebugMailbox object based on input arguments.

    :param pass_obj: Input dictionary with arguments.
    :return: Active DebugMailbox object.
    :raises SPSDKError: Raised with any kind of problems with debug probe.
    """
    interface = pass_obj["interface"]
    serial_no = pass_obj["serial_no"]
    debug_probe_params = pass_obj["debug_probe_params"]
    timing = pass_obj["timing"]
    reset = pass_obj["reset"]
    operation_timeout = pass_obj["operation_timeout"]

    debug_probes = DebugProbeUtils.get_connected_probes(
        interface=interface, hardware_id=serial_no, user_params=debug_probe_params
    )
    selected_probe = debug_probes.select_probe()
    debug_probe = selected_probe.get_probe(debug_probe_params)
    debug_probe.open()

    dm = DebugMailbox(
        debug_probe=debug_probe, reset=reset, moredelay=timing, op_timeout=operation_timeout
    )
    try:
        yield dm
    except SPSDKError as exc:
        raise SPSDKError(f"Failed Debug Mailbox command:({str(exc)}).") from exc
    finally:
        dm.close()
示例#2
0
def main(ctx: click.Context, interface: str, protocol: str, log_level: str, timing: float,
         serial_no: str, ip_addr: str, reset: bool) -> int:
    """NXP Debug Mailbox Tool."""
    logging.basicConfig(level=log_level.upper())
    logger.setLevel(level=log_level.upper())

    # Get the Debug probe object
    try:
        #TODO solve following parameters:
        # ip_addr
        # tool
        debug_probes = DebugProbeUtils.get_connected_probes(interface=interface, hardware_id=serial_no)
        selected_probe = debug_probes.select_probe()
        debug_probe = DebugProbeUtils.get_probe(interface=selected_probe.interface,
                                                hardware_id=selected_probe.hardware_id)
        debug_probe.open()

        ctx.obj = {
            'protocol': protocol,
            'debug_mailbox':
                DebugMailbox(
                    debug_probe=debug_probe, reset=reset, moredelay=timing
                ) if '--help' not in click.get_os_args() else None,
        }

    except DebugProbeError as exc:
        logger.error(str(exc))

    return 0
示例#3
0
def enable_debug(probe: DebugProbe, ap_mem: int = 0) -> bool:
    """Function that enables debug access ports on devices with debug mailbox.

    :param probe: Initialized debug probe.
    :param ap_mem: Index of Debug access port for memory interface.
    :return: True if debug port is enabled, False otherwise
    :raises SPSDKError: Unlock method failed.
    """
    debug_enabled = False
    try:
        logger.debug("step 3: Check if AHB is enabled")

        if not test_ahb_access(probe, ap_mem):
            logger.debug("Locked Device. Launching unlock sequence.")

            # Start debug mailbox system
            StartDebugSession(dm=DebugMailbox(debug_probe=probe)).run()

            # Recheck the AHB access
            if test_ahb_access(probe, ap_mem):
                logger.debug("Access granted")
                debug_enabled = True
            else:
                logger.debug("Enable debug operation failed!")
        else:
            logger.debug("Unlocked Device")
            debug_enabled = True

    except AttributeError as exc:
        raise SPSDKError(f"Invalid input parameters({str(exc)})") from exc

    except SPSDKDebugProbeError as exc:
        raise SPSDKError(f"Can't unlock device ({str(exc)})") from exc

    return debug_enabled
示例#4
0
def main(ctx: click.Context, interface: str, protocol: str, log_level: str,
         timing: float, serial_no: str, debug_probe_option: List[str],
         reset: bool) -> int:
    """NXP Debug Mailbox Tool."""
    logging.basicConfig(level=log_level.upper())
    logger.setLevel(level=log_level.upper())

    if '--help' not in click.get_os_args():
        # Get the Debug probe object
        try:
            probe_user_params = {}
            for par in debug_probe_option:
                if par.count("=") != 1:
                    logger.warning(f"Invalid -o parameter {par}!")
                else:
                    par_splitted = par.split("=")
                    probe_user_params[par_splitted[0]] = par_splitted[1]

            debug_probes = DebugProbeUtils.get_connected_probes(
                interface=interface,
                hardware_id=serial_no,
                user_params=probe_user_params)
            selected_probe = debug_probes.select_probe()
            debug_probe = DebugProbeUtils.get_probe(
                interface=selected_probe.interface,
                hardware_id=selected_probe.hardware_id,
                user_params=probe_user_params)
            debug_probe.open()

            ctx.obj = {
                'protocol':
                protocol,
                'debug_mailbox':
                DebugMailbox(debug_probe=debug_probe,
                             reset=reset,
                             moredelay=timing),
            }

        except DebugProbeError as exc:
            logger.error(str(exc))

    return 0
示例#5
0
def main(ctx: click.Context, interface: str, protocol: str, log_level: str,
         timing: float, serial_no: int, ip_addr: str, hardware_id: str,
         reset: bool) -> int:
    """NXP Debug Mailbox Tool."""
    logging.basicConfig(level=log_level.upper())
    logger.setLevel(level=log_level.upper())

    ctx.obj = {
        'protocol':
        protocol,
        'debug_mailbox':
        DebugMailbox(debug_interface=interface,
                     reset=reset,
                     moredelay=timing,
                     serial_no=serial_no,
                     ip_addr=ip_addr,
                     tool=None,
                     hardware_id=hardware_id)
        if '--help' not in click.get_os_args() else None,
    }
    return 0
示例#6
0
def _open_debugmbox(pass_obj: Dict) -> DebugMailbox:
    """Method opens DebugMailbox object based on input arguments.

    :param pass_obj: Input dictionary with arguments.
    :return: Active DebugMailbox object.
    :raise SPSDKError: Raised with any kind of problems with debug probe.
    """
    interface = pass_obj['interface']
    serial_no = pass_obj['serial_no']
    debug_probe_params = pass_obj['debug_probe_params']
    timing = pass_obj['timing']
    reset = pass_obj['reset']

    debug_probes = DebugProbeUtils.get_connected_probes(
        interface=interface,
        hardware_id=serial_no,
        user_params=debug_probe_params)
    selected_probe = debug_probes.select_probe()
    debug_probe = selected_probe.get_probe(debug_probe_params)
    debug_probe.open()

    return DebugMailbox(debug_probe=debug_probe, reset=reset, moredelay=timing)
示例#7
0
def enable_debug(probe: DebugProbe, ap_mem: int = 0) -> bool:
    """Function that enables debug access ports on devices with debug mailbox.

    :param probe: Initialized debug probe.
    :param ap_mem: Index of Debug access port for memory interface.
    :return: True if debug port is enabled, False otherwise
    :raises SPSDKError: Unlock method failed.
    """
    debug_enabled = False
    try:
        def test_ahb_access(ap_mem: int) -> bool:
            logger.debug("step T.1: Activate the correct AP")
            probe.coresight_reg_write(access_port=False, addr=2*4, data=ap_mem)

            logger.debug("step T.2: Set the AP access size and address mode")
            probe.coresight_reg_write(access_port=True,
                                      addr=probe.get_coresight_ap_address(ap_mem, 0*4),
                                      data=0x22000012)

            logger.debug("step T.3: Set the initial AHB address to access")
            probe.coresight_reg_write(access_port=True,
                                      addr=probe.get_coresight_ap_address(ap_mem, 1*4),
                                      data=0xE000ED00)

            logger.debug("step T.4: Access the memory system at that address")
            try:
                chip_id = probe.coresight_reg_read(access_port=True,
                                                   addr=probe.get_coresight_ap_address(ap_mem, 3*4))
                logger.debug(f"ChipID={chip_id:08X}")
            except DebugProbeError:
                chip_id = 0xFFFFFFFF
                logger.debug(f"ChipID can't be read")

            # Check if the device is locked
            return chip_id not in (0xFFFFFFFF, 0)

        logger.debug("step 3: Check if AHB is enabled")

        if not test_ahb_access(ap_mem):
            logger.debug("Locked Device. Launching unlock sequence.")

            # Start debug mailbox system
            dbg_mlbx = DebugMailbox(debug_probe=probe)
            StartDebugSession(dm=dbg_mlbx).run()

            # Recheck the AHB access
            if test_ahb_access(ap_mem):
                logger.debug(f"Access granted")
                debug_enabled = True
            else:
                logger.debug(f"Enable debug operation failed!")
        else:
            logger.debug("Unlocked Device")
            debug_enabled = True

    except AttributeError as exc:
        raise SPSDKError(f"Invalid input parameters({str(exc)})")

    except DebugProbeError as exc:
        raise SPSDKError(f"Can't unlock device ({str(exc)})")

    return debug_enabled