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.
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();
}
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.