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::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.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