10 releases

0.4.4 Dec 2, 2019
0.4.3 Nov 25, 2019
0.4.2 May 29, 2019
0.4.1 Nov 12, 2018
0.2.0 Oct 7, 2015
Download history 1157/week @ 2020-03-05 1224/week @ 2020-03-12 1091/week @ 2020-03-19 1113/week @ 2020-03-26 967/week @ 2020-04-02 1114/week @ 2020-04-09 1229/week @ 2020-04-16 1373/week @ 2020-04-23 1354/week @ 2020-04-30 1159/week @ 2020-05-07 1030/week @ 2020-05-14 1237/week @ 2020-05-21 1238/week @ 2020-05-28 1688/week @ 2020-06-04 931/week @ 2020-06-11 566/week @ 2020-06-18

4,615 downloads per month
Used in less than 43 crates


777 lines

Rust I2cdev

Build Status Version License


The Rust i2cdev crate seeks to provide full access to the Linux i2cdev driver interface in Rust without the need to wrap any C code or directly make low-level system calls. The documentation for the i2cdev interace can be found at https://www.kernel.org/doc/Documentation/i2c/dev-interface and in the lm-sensors projects.

Device driver developers should consider building on top of the embedded-hal traits rather than directly coupling to this library. An implementation of those generic traits for Linux can be found in linux-embedded-hal which, at present, uses this crate as the backend for I2C.


The source includes an example of using the library to talk to a Wii Nunchuck (which has an i2c interface). Go View the Example.

The Documentation contains a quick overview of how to get started with an i2c device.

In addition to the Read/Write traits, the following methods are available via the I2CDevice trait.


The following features are implemented and planned for the library:

  • Implement the Read trait
  • Implement the Write trait
  • Implement SMBus Methods
  • Add Tests/Example for SMBus Methods
  • Add sensor library for handy sensors (and examples)
  • Add higher-level APIs/Macros for simplifying access to devices with large register sets
  • Add Support for Non-SMBus ioctl methods
  • Add examples for non-smbus ioctl methods
  • Unit Testing

Cross Compiling

Most likely, the machine you are running on is not your development machine (although it could be). In those cases, you will need to cross-compile. See https://github.com/japaric/rust-cross for pointers.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Code of Conduct

Contribution to this crate is organized under the terms of the Rust Code of Conduct, the maintainer of this crate, the Embedded Linux Team, promises to intervene to uphold that code of conduct.


~20K SLoC