Crates.io | mcp25xx |
lib.rs | mcp25xx |
version | 0.2.0 |
source | src |
created_at | 2021-12-15 13:48:41.926672 |
updated_at | 2024-08-04 10:55:27.460217 |
description | MCP2510, MCP2515 and MCP25625 CAN controller library |
homepage | |
repository | https://github.com/WMT-GmbH/mcp25xx |
max_upload_size | |
id | 498311 |
size | 64,821 |
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();
}