pub struct Probe { /* private fields */ }
Expand description
The Probe struct is a generic wrapper over the different probes supported.
§Examples
§Open the first probe found
The list_all
and from_probe_info
functions can be used
to create a new Probe
:
use probe_rs::probe::{Probe, list::Lister};
let lister = Lister::new();
let probe_list = lister.list_all();
let probe = probe_list[0].open();
Implementations§
source§impl Probe
impl Probe
sourcepub fn new(probe: impl DebugProbe + 'static) -> Self
pub fn new(probe: impl DebugProbe + 'static) -> Self
Create a new probe from a more specific probe driver.
sourcepub fn from_specific_probe(probe: Box<dyn DebugProbe>) -> Self
pub fn from_specific_probe(probe: Box<dyn DebugProbe>) -> Self
Same as Probe::new
but without automatic boxing in case you already have a box.
sourcepub fn attach(
self,
target: impl Into<TargetSelector>,
permissions: Permissions
) -> Result<Session, Error>
pub fn attach( self, target: impl Into<TargetSelector>, permissions: Permissions ) -> Result<Session, Error>
Attach to the chip.
This runs all the necessary protocol init routines.
If this doesn’t work, you might want to try Probe::attach_under_reset
sourcepub fn attach_to_unspecified(&mut self) -> Result<(), Error>
pub fn attach_to_unspecified(&mut self) -> Result<(), Error>
Attach to a target without knowing what target you have at hand. This can be used for automatic device discovery or performing operations on an unspecified target.
sourcepub fn attach_to_unspecified_under_reset(&mut self) -> Result<(), Error>
pub fn attach_to_unspecified_under_reset(&mut self) -> Result<(), Error>
A combination of Probe::attach_to_unspecified
and Probe::attach_under_reset
.
sourcepub fn attach_under_reset(
self,
target: impl Into<TargetSelector>,
permissions: Permissions
) -> Result<Session, Error>
pub fn attach_under_reset( self, target: impl Into<TargetSelector>, permissions: Permissions ) -> Result<Session, Error>
Attach to the chip under hard-reset.
This asserts the reset pin via the probe, plays the protocol init routines and deasserts the pin. This is necessary if the chip is not responding to the SWD reset sequence. For example this can happen if the chip has the SWDIO pin remapped.
sourcepub fn select_protocol(
&mut self,
protocol: WireProtocol
) -> Result<(), DebugProbeError>
pub fn select_protocol( &mut self, protocol: WireProtocol ) -> Result<(), DebugProbeError>
Selects the transport protocol to be used by the debug probe.
sourcepub fn protocol(&self) -> Option<WireProtocol>
pub fn protocol(&self) -> Option<WireProtocol>
Get the currently selected protocol
Depending on the probe, this might not be available.
sourcepub fn target_reset(&mut self) -> Result<(), DebugProbeError>
pub fn target_reset(&mut self) -> Result<(), DebugProbeError>
Resets the target device.
sourcepub fn target_reset_assert(&mut self) -> Result<(), DebugProbeError>
pub fn target_reset_assert(&mut self) -> Result<(), DebugProbeError>
Asserts the reset of the target. This is always the hard reset which means the reset wire has to be connected to work.
This is not supported on all probes.
sourcepub fn target_reset_deassert(&mut self) -> Result<(), DebugProbeError>
pub fn target_reset_deassert(&mut self) -> Result<(), DebugProbeError>
Deasserts the reset of the target. This is always the hard reset which means the reset wire has to be connected to work.
This is not supported on all probes.
sourcepub fn set_speed(&mut self, speed_khz: u32) -> Result<u32, DebugProbeError>
pub fn set_speed(&mut self, speed_khz: u32) -> Result<u32, DebugProbeError>
Configure protocol speed to use in kHz
sourcepub fn set_scan_chain(
&mut self,
scan_chain: Vec<ScanChainElement>
) -> Result<(), DebugProbeError>
pub fn set_scan_chain( &mut self, scan_chain: Vec<ScanChainElement> ) -> Result<(), DebugProbeError>
Configure the scan chain to use for the attached target.
See DebugProbe::set_scan_chain
for more information and usage
sourcepub fn scan_chain(&self) -> Result<&[ScanChainElement], DebugProbeError>
pub fn scan_chain(&self) -> Result<&[ScanChainElement], DebugProbeError>
Returns the JTAG scan chain
sourcepub fn select_jtag_tap(&mut self, index: usize) -> Result<(), DebugProbeError>
pub fn select_jtag_tap(&mut self, index: usize) -> Result<(), DebugProbeError>
Selects the JTAG TAP to be used for communication.
sourcepub fn speed_khz(&self) -> u32
pub fn speed_khz(&self) -> u32
Get the currently used maximum speed for the debug protocol in kHz.
Not all probes report which speed is used, meaning this value is not always the actual speed used. However, the speed should not be any higher than this value.
sourcepub fn has_xtensa_interface(&self) -> bool
pub fn has_xtensa_interface(&self) -> bool
Check if the probe has an interface to debug Xtensa chips.
sourcepub fn try_get_xtensa_interface<'probe>(
&'probe mut self,
state: &'probe mut XtensaDebugInterfaceState
) -> Result<XtensaCommunicationInterface<'probe>, DebugProbeError>
pub fn try_get_xtensa_interface<'probe>( &'probe mut self, state: &'probe mut XtensaDebugInterfaceState ) -> Result<XtensaCommunicationInterface<'probe>, DebugProbeError>
Try to get a XtensaCommunicationInterface
, which can
can be used to communicate with chips using the Xtensa
architecture.
The user is responsible for creating and managing the XtensaDebugInterfaceState
state
object.
If an error occurs while trying to connect, the probe is returned.
sourcepub fn has_arm_interface(&self) -> bool
pub fn has_arm_interface(&self) -> bool
Check if the probe has an interface to debug ARM chips.
sourcepub fn try_into_arm_interface<'probe>(
self
) -> Result<Box<dyn UninitializedArmProbe + 'probe>, (Self, DebugProbeError)>
pub fn try_into_arm_interface<'probe>( self ) -> Result<Box<dyn UninitializedArmProbe + 'probe>, (Self, DebugProbeError)>
Try to get a trait object implementing UninitializedArmProbe
, which can
can be used to communicate with chips using the ARM architecture.
If an error occurs while trying to connect, the probe is returned.
sourcepub fn has_riscv_interface(&self) -> bool
pub fn has_riscv_interface(&self) -> bool
Check if the probe has an interface to debug RISC-V chips.
sourcepub fn try_get_riscv_interface_builder<'probe>(
&'probe mut self
) -> Result<Box<dyn RiscvInterfaceBuilder<'probe> + 'probe>, DebugProbeError>
pub 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.
The returned object can be used to create the interface state, which is required to attach to the RISC-V target. The user is responsible for managing this state object.
If an error occurs while trying to connect, the probe is returned.
sourcepub fn get_swo_interface(&self) -> Option<&dyn SwoAccess>
pub fn get_swo_interface(&self) -> Option<&dyn SwoAccess>
Gets a SWO interface from the debug probe.
This does not work on all probes.
sourcepub fn get_swo_interface_mut(&mut self) -> Option<&mut dyn SwoAccess>
pub fn get_swo_interface_mut(&mut self) -> Option<&mut dyn SwoAccess>
Gets a mutable SWO interface from the debug probe.
This does not work on all probes.
sourcepub fn try_as_dap_probe(&mut self) -> Option<&mut dyn DapProbe>
pub fn try_as_dap_probe(&mut self) -> Option<&mut dyn DapProbe>
Gets a DAP interface from the debug probe.
This does not work on all probes.
sourcepub fn get_target_voltage(&mut self) -> Result<Option<f32>, DebugProbeError>
pub fn get_target_voltage(&mut self) -> Result<Option<f32>, DebugProbeError>
Try reading the target voltage of via the connected voltage pin.
This does not work on all probes.
sourcepub fn try_into_jlink(&mut self) -> Result<&mut JLink, DebugProbeError>
pub fn try_into_jlink(&mut self) -> Result<&mut JLink, DebugProbeError>
Try to get a J-Link interface from the debug probe.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Probe
impl !RefUnwindSafe for Probe
impl Send for Probe
impl !Sync for Probe
impl Unpin for Probe
impl !UnwindSafe for Probe
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moresource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.