added get_device_id function

This commit is contained in:
Philipp_EndevourOS 2025-08-05 01:27:14 +02:00
parent 8e7389085f
commit b94aafc820
2 changed files with 23 additions and 12 deletions

View File

@ -1,16 +1,16 @@
#![no_std]
#![no_main]
use embedded_hal_bus::i2c::RefCellDevice;
use esp_hal::main;
use esp_println::dbg;
use esp_println::logger::init_logger;
use core::cell::RefCell;
use core::default::Default;
use embedded_hal_bus::i2c::RefCellDevice;
use esp_hal::clock::CpuClock;
use esp_hal::main;
use esp_hal::peripherals::Peripherals;
use esp_hal::{delay::Delay, time::Duration};
use log::{debug, info, error};
use esp_println::dbg;
use esp_println::logger::init_logger;
use log::{debug, error, info};
use mb85rc::{self, MB85RC};
#[panic_handler]
@ -29,10 +29,11 @@ fn main() -> ! {
init_logger(log::LevelFilter::Debug);
let peripherals = unsafe { Peripherals::steal() };
let i2c = esp_hal::i2c::master::I2c::new(peripherals.I2C0, esp_hal::i2c::master::Config::default())
.unwrap()
.with_sda(peripherals.GPIO22)
.with_scl(peripherals.GPIO23);
let i2c =
esp_hal::i2c::master::I2c::new(peripherals.I2C0, esp_hal::i2c::master::Config::default())
.unwrap()
.with_sda(peripherals.GPIO22)
.with_scl(peripherals.GPIO23);
let delay = Delay::new();
delay.delay(Duration::from_millis(500));
@ -47,6 +48,10 @@ fn main() -> ! {
let mut mb85rc = MB85RC::new(display_refcell_device, 0x50);
debug!("read device id");
let device_id = mb85rc.get_device_id();
dbg!(device_id);
let memory_address = [0x00, 0x00];
let data = 0xFF;

View File

@ -1,7 +1,7 @@
#![no_std]
use core::{error::Error, result::Result};
use embedded_hal::i2c::{I2c, SevenBitAddress};
use core::result::Result;
const DEVICE_ADDRESS: u8 = 0b10100000;
const DEVICE_ADDRESS_CODE: u8 = 0b00000000;
@ -24,8 +24,14 @@ impl<T: I2c> MB85RC<T> {
/// * `self` - A mutable reference to the MB85RC instance.
/// # Returns
/// * `Result<[u8; 3], Infallible>` -
pub fn get_device_id(&mut self) -> [u8; 3] {
todo!()
pub fn get_device_id(&mut self) -> Result<[u8; 3], T::Error> {
let mut buffer: [u8; 3] = [0, 0, 0];
let reserved_slave_address = 0x7C; // Reserved Slave ID F9H without last bit, because wrte address adds this bit
let payload = [0xA0]; // Device Address + read bit (write bit works also, because R/W code are “Don't care” value)
self.i2c
.write_read(reserved_slave_address, &payload, &mut buffer)?;
Ok(buffer)
}
/// Write bit on the specified memory address