1个不稳定版本
0.1.0 | 2019年1月4日 |
---|
#7 在 #bosch
12KB
140 行
Bosch BMA222E及其系列驱动程序
目前这仅支持I2C配置,因为我无法从PCB上的家中移除小巧的包装。如果您想玩一玩,您可以在Xfinity XR11遥控器中找到它们。😊
这个系列中的寄存器映射非常相似,因此应该可以通过对这里的代码进行最小修改来支持以下芯片
- BMA222 - 8位分辨率
- BMA250 - 10位分辨率
- BMA253 - 12位分辨率
- BMA255 - 12位分辨率
- BMA280 - 14位分辨率
具体来说,这些芯片现在应该与库兼容,但您不会从增强的分辨率中受益。
更多关于该产品线的信息请访问Bosch网站: https://www.bosch-sensortec.com/bst/products/all_products/bma222e
当前支持的功能
- 通过I2C访问芯片
- 读取X、Y、Z轴及其是否自上次轮询以来已更新
- 读取X、Y、Z轴的事件FIFO(#1的32元素深度队列版本)
- 更改FIFO模式(流、FIFO、旁路)并读取FIFO的满度
- 检查EEPROM中的数据及其剩余写入次数
- 软件复位
- 读取温度
当前不支持的功能
如果您觉得这里有任何功能有意义,请随时联系帮助实现这些功能。我只是个人不需要它们。
- 除BMA222E之外的任何芯片
- 通过SPI访问芯片
- 更改要抛到FIFO的轴
- 启用斜率、点击、FIFO满、方向等中断
- 点击检测
- 加速度数据滤波器
- 电源模式(正常、深度睡眠、低功耗、挂起)
- 低功耗睡眠持续时间
- 是否要阴影加速度数据
- 配置INT1和INT2引脚及其源
- 加速度、斜率等中断阈值
- FIFO水位中断级别
- 自检
- 实际上编程EEPROM或设置值
- 设置偏移补偿
- 偏移补偿
- 还有很多!
示例用法
fn main() {
// Get an instance of an i2c struct here with one of the [device crates](https://github.com/rust-embedded/awesome-embedded-rust#device-crates).
let mut accel = Bma222e::new(i2c);
accel.reset().unwrap();
examples(accel).unwrap();
}
fn examples(accel: Bma222e) -> Result<(), ()> {
let chip_id = accel.who_am_i()?;
println!("About to Begin. ID is {} and should be {}", chip_id, bma222e::IDENTIFIER)?;
let temp = accel.temperature()?;
println!("Temperature: {}", temp)?;
let writes_remaining = accel.eeprom_writes_remaining()?;
println!("EEPROM Writes Remaining: {}", writes_remaining)?;
let nvm_data = accel.eeprom_data()?;
hprint!("EEPROM Data: ")?;
for byte in &nvm_data {
hprint!("{:02X} ", byte)?;
}
println!()?;
// FIFO-related goodness!
// TODO: Find out why the output data wasn't consistent
let fifo_size = accel.fifo_size()?;
println!("Events in the FIFO: {}", fifo_size)?;
let mut events = [AxisData {value: 0, changed: false}; 3];
accel.fifo_set_mode(FIFOConfig::BYPASS)?;
accel.fifo_get(&mut events)?;
let x = accel.axis_x()?;
let y = accel.axis_y()?;
let z = accel.axis_z()?;
println!("X:{0:03} Y:{1:03} Z:{2:03}",
x.value,
y.value,
z.value)?;
Ok(())
}
依赖项
~71KB