Crate mcp25xx[][src]

Expand description

no_std library for the MCP2510, MCP2515 and MCP25625 CAN controller chips.

API is implemented in terms of of the embedded_hal and embedded_can traits.

Activating the mcp2515 or mcp25625 feature will enable additional registers and instructions the MCP2510 does not support.

Example

use embedded_can::blocking::Can as _;
use embedded_can::{Can, Frame, StandardId};
use mcp25xx::bitrates::clock_16mhz::CNF_500K_BPS;
use mcp25xx::registers::{OperationMode, RXB0CTRL, RXM};
use mcp25xx::{CanFrame, Config, MCP25xx};

// spi, cs and timer are structs implementing their respective embedded_hal traits.

let mut mcp25xx = MCP25xx { spi, cs };

let config = Config::default()
    .mode(OperationMode::NormalOperation)
    .bitrate(CNF_500K_BPS)
    .receive_buffer_0(RXB0CTRL::default().with_rxm(RXM::ReceiveAny));

mcp25xx.apply_config(&config).unwrap();

// Send a frame
let can_id = StandardId::new(123).unwrap();
let data = [1, 2, 3, 4, 5, 6, 7, 8];
let frame = CanFrame::new(can_id, &data).unwrap();
mcp25xx.try_write(&frame).unwrap();

// Receive a frame
if let Ok(frame) = mcp25xx.try_receive() {
    let _can_id = frame.id();
    let _data = frame.data();
}

Re-exports

pub use embedded_can;

Modules

Preconfigured CNF registers for 8, 16 and 20 Mhz oscillators

Register bitfields

Structs

CAN frame with the same in memory representation as the registers of the CAN controller

Configuration for:

Id header used in filters and masks

Either a MCP2510, MCP2515 or MCP25625 CAN controller

Enums

Filters and Masks of the two receive buffers

Instruction supported by the CAN controller

Receive buffer

Transmit buffer

Traits

Convenience trait, reducing the amount of where bounds for generic code