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()
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
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
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
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
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)
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