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;
let probe_list = Probe::list_all();
let probe = Probe::open(&probe_list[0]);
Implementations
sourceimpl 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 list_all() -> Vec<DebugProbeInfo>
pub fn list_all() -> Vec<DebugProbeInfo>
Get a list of all debug probes found. This can be used to select the debug probe which should be used.
sourcepub fn open(
selector: impl Into<DebugProbeSelector> + Clone
) -> Result<Self, DebugProbeError>
pub fn open(
selector: impl Into<DebugProbeSelector> + Clone
) -> Result<Self, DebugProbeError>
Create a Probe
from DebugProbeInfo
. Use the
Probe::list_all()
function to get the information
about all probes available.
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 detach(&mut self) -> Result<(), DebugProbeError>
pub fn detach(&mut self) -> Result<(), DebugProbeError>
Leave debug mode
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 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_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 RISCV chips.
sourcepub fn try_into_riscv_interface(
self
) -> Result<RiscvCommunicationInterface, (Self, DebugProbeError)>
pub fn try_into_riscv_interface(
self
) -> Result<RiscvCommunicationInterface, (Self, DebugProbeError)>
Try to get a RiscvCommunicationInterface
, which can
can be used to communicate with chips using the RISCV
architecture.
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 volgate pin.
This does not work on all probes.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for Probe
impl Send for Probe
impl !Sync for Probe
impl Unpin for Probe
impl !UnwindSafe for Probe
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more