| Crates.io | mcp25xx |
| lib.rs | mcp25xx |
| version | 0.4.0 |
| created_at | 2021-12-15 13:48:41.926672+00 |
| updated_at | 2025-09-09 08:50:52.487788+00 |
| description | MCP2510, MCP2515 and MCP25625 CAN controller library |
| homepage | |
| repository | https://github.com/WMT-GmbH/mcp25xx |
| max_upload_size | |
| id | 498311 |
| size | 71,188 |
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::nb::Can;
use embedded_can::{Frame, StandardId};
use mcp25xx::bitrates::clock_16mhz::CNF_500K_BPS;
use mcp25xx::registers::{OperationMode, RXB0CTRL, RXM};
use mcp25xx::{CanFrame, Config, MCP25xx};
// spi is a struct implementing embedded_hal::spi::SpiDevice.
let mut mcp25xx = MCP25xx { spi };
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.transmit(&frame).unwrap();
// Receive a frame
if let Ok(frame) = mcp25xx.try_receive() {
let _can_id = frame.id();
let _data = frame.data();
}