你好,
我正在使用I2C接口读取MPU 6050的WHOAMI寄存器的值。我无法找到一个函数直接登记R/W。因此,在使用适配器时,我使用了这段代码。
eeprom_data_reader (EEPROM_24FC256,0 x75 page_buff);
Page_buff为空,读取后将接收到这些值。
tatic uint16_t eeprom_data_reader(i2c_device dev, uint8_t pageAddr, uint8_t *buff)
{
uint8_t e_addr_buff [1];
/*填写地址字节*/
e_addr_buff [0] = pageAddr;
/ / e_addr_buff [1] = 0;
//e_addr_buff[1] = pageAddr >> 8;
/*打开设备*/
Ad_i2c_handle_t dev_hdr = ad_i2c_open((ad_i2c_controller_conf_t *)dev);
I2C_error_code = ad_i2c_write_read(dev_hdr, (const uint8_t *)e_addr_buff,
EEPROM_24LC256_PAGE_SIZE sizeof (e_addr_buff),浅黄色,
HW_I2C_F_ADD_STOP);
if (I2C_error_code == 0) {
/*
*当达到最大数据大小时,滚到开始
*地址。
* /
printf(“读成功\ n”);
// pageAddr = (pageAddr + EEPROM_24LC256_PAGE_SIZE) % EEPROM_TEST_DATA_SIZE;
其他}{
printf("\n\rUnsuccessful I2C read operation with error code: %d\n\r",
I2C_error_code);
}
/*关闭设备*/
ad_i2c_close (dev_hdr假);
/*返回下一个EEPROM页面*/
返回pageAddr;
}
我无法从传感器读取正确的值,但它始终给出的值是0x72。如果我断开传感器,程序就能检测到。
我怀疑是地址发送到I2C总线的方式。我错过了什么吗?
谢谢,
Sandeep。

嗨Sandeep,
也可以共享EEPROM_24FC256实例初始化数据。EEPROM_24LC256_PAGE_SIZE,这是针对你的应用程序的用途,还是这真的是一个EEPROM页面大小。请确认。
如果你手上有另一个传感器,你可以用不同的I2C传感器检查69x或者用不同的设备读取这个传感器。
最好的问候,
LC_Dialog
/* EEPROM设备特定参数*/
#定义EEPROM_TEST_DATA_SIZE (1)
#定义EEPROM_24LC256_PAGE_SIZE (1)
我把它定义为读取1字节。
#define EEPROM_24FC256_I2C_ADDRESS (0x68)
/ * *
* I2C 1配置
* /
#define EEPROM_24FC256_SCL_PORT (HW_GPIO_PORT_0)
#define EEPROM_24FC256_SCL_PIN (HW_GPIO_PIN_30)
#define EEPROM_24FC256_SDA_PORT (HW_GPIO_PORT_0)
#define EEPROM_24FC256_SDA_PIN (HW_GPIO_PIN_31)
I2C地址即设备地址。
我可以用Arduino正确读取这个传感器的值。
嗨Sandeep,
感谢分享以上代码。然而,我要求的是结构ad_i2c_controller_conf_t实例。你要传递给eeprom_data_reader ()函数是EEPROM_24FC256它是定义所有适配器属性的结构的一个工具。观察这些可以让我们有所领悟。
在reader函数实现中也有一个观察sizeof (e_addr_buff)会给你2,那应该是1,在你的用例中。
我也试图复制我这边的问题,以检查任何内在的问题。如果我找到了什么会告诉你的。。
最好的问候,
LC_Dialog