probe_rs::probe::jlink

Struct JLink

Source
pub struct JLink { /* private fields */ }
Expand description

A J-Link probe.

Implementations§

Source

pub fn read_swo_speeds(&self, mode: SwoMode) -> Result<SwoSpeedInfo, JlinkError>

Reads the probe’s SWO capture speed information.

This requires the probe to support Capability::Swo.

Source

pub fn swo_start( &mut self, mode: SwoMode, speed: u32, buf_size: u32, ) -> Result<(), JlinkError>

Starts capturing SWO data.

This will switch the probe to SWD interface mode if necessary (required for SWO capture).

Requires the probe to support Capability::Swo.

§Parameters
  • mode: The SWO data encoding mode to use.
  • speed: The data rate to capture at (when using SwoMode::Uart, this is the UART baud rate).
  • buf_size: The size (in Bytes) of the on-device buffer to allocate for the SWO data.
Source

pub fn swo_stop(&mut self) -> Result<(), JlinkError>

Stops capturing SWO data.

Source

pub fn swo_read<'a>( &self, data: &'a mut [u8], ) -> Result<SwoData<'a>, JlinkError>

Reads captured SWO data from the probe and writes it to data.

This needs to be called regularly after SWO capturing has been started. If it is not called often enough, the buffer on the probe will fill up and device data will be dropped. You can call SwoData::did_overrun to check for this condition.

Note: the probe firmware seems to dislike many short SWO reads (as in, the probe will fall off the bus and reset), so it is recommended to use a buffer that is the same size as the on-probe data buffer.

Source

pub fn capabilities(&self) -> Capabilities

Returns the supported J-Link capabilities.

Source

pub fn read_max_mem_block(&self) -> Result<u32, JlinkError>

Reads the maximum mem block size in Bytes.

This requires the probe to support Capability::GetMaxBlockSize.

Source

pub fn set_kickstart_power(&mut self, enable: bool) -> Result<(), JlinkError>

Enable/Disable the Target Power Supply of the probe.

This is not available on all J-Links.

Trait Implementations§

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

fn select_protocol( &mut self, protocol: WireProtocol, ) -> Result<(), DebugProbeError>

Selects the transport protocol to be used by the debug probe.
Source§

fn active_protocol(&self) -> Option<WireProtocol>

Get the transport protocol currently in active use by the debug probe.
Source§

fn get_name(&self) -> &'static str

Get human readable name for the probe.
Source§

fn speed_khz(&self) -> u32

Get the currently used maximum speed for the debug protocol in kHz. Read more
Source§

fn set_scan_chain( &mut self, scan_chain: Vec<ScanChainElement>, ) -> Result<(), DebugProbeError>

Set the JTAG scan chain information for the target under debug. Read more
Source§

fn set_speed(&mut self, speed_khz: u32) -> Result<u32, DebugProbeError>

Set the speed in kHz used for communication with the target device. Read more
Source§

fn attach(&mut self) -> Result<(), DebugProbeError>

Attach to the chip. Read more
Source§

fn select_jtag_tap(&mut self, index: usize) -> Result<(), DebugProbeError>

Selects the JTAG TAP to be used for communication.
Source§

fn scan_chain(&self) -> Result<&[ScanChainElement], DebugProbeError>

Returns the JTAG scan chain
Source§

fn detach(&mut self) -> Result<(), Error>

Detach from the chip. Read more
Source§

fn target_reset(&mut self) -> Result<(), DebugProbeError>

This should hard reset the target device.
Source§

fn target_reset_assert(&mut self) -> Result<(), DebugProbeError>

This should assert the reset pin of the target via debug probe.
Source§

fn target_reset_deassert(&mut self) -> Result<(), DebugProbeError>

This should deassert the reset pin of the target via debug probe.
Source§

fn try_get_riscv_interface_builder<'probe>( &'probe mut self, ) -> Result<Box<dyn RiscvInterfaceBuilder<'probe> + 'probe>, DebugProbeError>

Try to get a RiscvInterfaceBuilder object, which can be used to set up a communication interface with chips using the RISC-V architecture. Read more
Source§

fn get_swo_interface(&self) -> Option<&dyn SwoAccess>

Get a SWO interface from the debug probe. Read more
Source§

fn get_swo_interface_mut(&mut self) -> Option<&mut dyn SwoAccess>

Get a mutable SWO interface from the debug probe. Read more
Source§

fn has_arm_interface(&self) -> bool

Check if the probe offers an interface to debug ARM chips.
Source§

fn has_riscv_interface(&self) -> bool

Check if the probe offers an interface to debug RISC-V chips.
Source§

fn into_probe(self: Box<Self>) -> Box<dyn DebugProbe>

Boxes itself.
Source§

fn try_as_dap_probe(&mut self) -> Option<&mut dyn DapProbe>

Try creating a DAP interface for the given probe. Read more
Source§

fn try_get_arm_interface<'probe>( self: Box<Self>, ) -> Result<Box<dyn UninitializedArmProbe + 'probe>, (Box<dyn DebugProbe>, DebugProbeError)>

Get the dedicated interface to debug ARM chips. To check that the probe actually supports this, call DebugProbe::has_arm_interface first.
Source§

fn get_target_voltage(&mut self) -> Result<Option<f32>, DebugProbeError>

Reads the target voltage in Volts, if possible. Returns Ok(None) if the probe doesn’t support reading the target voltage.
Source§

fn try_get_xtensa_interface<'probe>( &'probe mut self, state: &'probe mut XtensaDebugInterfaceState, ) -> Result<XtensaCommunicationInterface<'probe>, DebugProbeError>

Get the dedicated interface to debug Xtensa chips. Ensure that the probe actually supports this by calling DebugProbe::has_xtensa_interface first.
Source§

fn has_xtensa_interface(&self) -> bool

Check if the probe offers an interface to debug Xtensa chips.
Try to get a J-Link interface from the debug probe.
Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn enable_swo(&mut self, config: &SwoConfig) -> Result<(), ArmError>

Configure a SwoAccess interface for reading SWO data.
Source§

fn disable_swo(&mut self) -> Result<(), ArmError>

Disable SWO reading on this SwoAccess interface.
Source§

fn swo_buffer_size(&mut self) -> Option<usize>

Request the probe SWO buffer size, if known.
Source§

fn read_swo_timeout(&mut self, timeout: Duration) -> Result<Vec<u8>, ArmError>

Read SWO data for up to timeout duration. Read more
Source§

fn read_swo(&mut self) -> Result<Vec<u8>, ArmError>

Read any available SWO data without waiting. Read more
Source§

fn swo_poll_interval_hint(&mut self, config: &SwoConfig) -> Option<Duration>

Request an estimated best time to wait between polls of read_swo. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Probe> JTAGAccess for Probe
where Probe: DebugProbe + RawJtagIo + 'static,

Source§

fn scan_chain(&mut self) -> Result<(), DebugProbeError>

Scans IDCODE and IR length information about the devices on the JTAG chain. Read more
Source§

fn tap_reset(&mut self) -> Result<(), DebugProbeError>

Executes a TAP reset.
Source§

fn set_idle_cycles(&mut self, idle_cycles: u8)

For RISC-V, and possibly other interfaces, the JTAG interface has to remain in the idle state for several cycles between consecutive accesses to the DR register. Read more
Source§

fn idle_cycles(&self) -> u8

Return the currently configured idle cycles.
Source§

fn read_register( &mut self, address: u32, len: u32, ) -> Result<Vec<u8>, DebugProbeError>

Read a JTAG register. Read more
Source§

fn write_register( &mut self, address: u32, data: &[u8], len: u32, ) -> Result<Vec<u8>, DebugProbeError>

Write to a JTAG register Read more
Source§

fn write_dr( &mut self, data: &[u8], len: u32, ) -> Result<Vec<u8>, DebugProbeError>

Shift a value into the DR JTAG register Read more
Source§

fn write_register_batch( &mut self, writes: &JtagCommandQueue, ) -> Result<DeferredResultSet, BatchExecutionError>

Executes a sequence of JTAG commands.
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<Probe> RawDapAccess for Probe
where Probe: DebugProbe + RawProtocolIo + JTAGAccess + 'static,

Source§

fn raw_read_register( &mut self, port: PortType, address: u8, ) -> Result<u32, ArmError>

Read a DAP register. Read more
Source§

fn raw_read_block( &mut self, port: PortType, address: u8, values: &mut [u32], ) -> Result<(), ArmError>

Read multiple values from the same DAP register. Read more
Source§

fn raw_write_register( &mut self, port: PortType, address: u8, value: u32, ) -> Result<(), ArmError>

Write a value to a DAP register. Read more
Source§

fn raw_write_block( &mut self, port: PortType, address: u8, values: &[u32], ) -> Result<(), ArmError>

Write multiple values to the same DAP register. Read more
Source§

fn swj_pins( &mut self, pin_out: u32, pin_select: u32, pin_wait: u32, ) -> Result<u32, DebugProbeError>

Set the state of debugger output pins directly. Read more
Source§

fn into_probe(self: Box<Probe>) -> Box<dyn DebugProbe>

Cast this interface into a generic DebugProbe.
Source§

fn jtag_sequence( &mut self, bit_len: u8, tms: bool, bits: u64, ) -> Result<(), DebugProbeError>

Send a specific output sequence over JTAG. Read more
Source§

fn swj_sequence( &mut self, bit_len: u8, bits: u64, ) -> Result<(), DebugProbeError>

Send a specific output sequence over JTAG or SWD. Read more
Source§

fn core_status_notification( &mut self, _: CoreStatus, ) -> Result<(), DebugProbeError>

Inform the probe of the CoreStatus of the chip attached to the probe.
Source§

fn raw_flush(&mut self) -> Result<(), ArmError>

Flush any outstanding writes. Read more
Source§

fn configure_jtag(&mut self, _skip_scan: bool) -> Result<(), DebugProbeError>

Configures the probe for JTAG use (specifying IR lengths of each DAP).
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T