Embedded Rust Microchip MCP2003A/B LIN transceiver driver with embedded-hal traits for no-std
environments.
Warning
This crate is still in development and may not be suitable for production use.
Full Documentation: https://docs.rs/mcp2003a/latest/mcp2003a/
Tested on:
- MCP2003A (No Longer Recommended for New Designs)
- MCP2003E
Should also work with:
- MCP2003B (functional drop-in replacement for MCP2003A)
- MCP2003A Product Page
- MCP2003/4/3A/4A Datasheet
- MCP2003A to MCP2003B Migration Guide
- MCP2003B Datasheet
Uses embedded-hal
digital traits for GPIO and embedded-hal-nb
Serial traits for UART.
embedded-hal = "1.0.0"
- Major breaking changes versus 0.2.x implementations.embedded-hal-nb = "1.0.0"
- Additional non-blocking traits usingnb
crate underneath.
Add the crate to your Cargo.toml
:
cargo add mcp2003a
let mut mcp2003a = Mcp2003a::new(uart2_driver, break_pin_driver, delay);
let lin_bus_config = LinBusConfig {
speed: LinBusSpeed::Baud19200,
break_duration: LinBreakDuration::Minimum13Bits, // Test for your application
wakeup_duration: LinWakeupDuration::Minimum250Microseconds, // Test for your application
read_device_response_timeout: LinReadDeviceResponseTimeout::DelayMilliseconds(15), // Test for your application
inter_frame_space: LinInterFrameSpace::DelayMilliseconds(1), // Test for your application
};
mcp2003a.init(lin_bus_config);
mcp2003a.send_wakeup();
mc2003a.send_frame(0x01, &[0x02, 0x03], 0x05).unwrap();
let mut read_buffer = [0u8; 8]; // Initialize the buffer to the frame's known size
let checksum = mcp2003a.read_frame(0xC1, &mut read_buffer).unwrap();
(More coming soon)
- ESP-32 via ESP-RS - Example using the MCP2003A with an ESP-32 microcontroller using the ESP-RS HAL.