大家好,
我正在尝试使用I2C接口读取MPU 6050的Whoami寄存器的值。我无法直接找到函数R / W.所以,使用适配器,我使用了这个代码。
EEPROM_DATA_READER(EEPROM_24FC256,0x75,PAGE_BUFF);
Page_Buff为空,读取后会收到值。
Tyatic 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,
sizeof(e_addr_buff),buff,eeprom_24lc256_page_size,
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读取操作错误代码:%d \ n \ r”,
i2c_error_code);
}
/ *关闭设备* /
ad_i2c_close(dev_hdr,false);
/ *返回下一个EEPROM页面* /
返回pageaddr;
}
我无法读取传感器的正确值,但它一直呈现值0x72。如果我断开传感器,则程序能够检测到该传感器。
我怀疑地址被发送到I2C总线的方式。我错过了什么吗?
谢谢,
乡间。
嗨Sandeep,
请您还可以共享EEPROM_24FC256实例初始化数据。EEPROM_24LC256_PAGE_SIZE,这是重新批准到您的应用程序,或者这实际上是EEPROM页面大小。你能确认。
如果您有另一个传感器,可以使用不同的I2C传感器检查69倍,或用不同的设备读取此传感器。
此致,
lc_dialog
/ * EEPROM设备特定参数* /
#define eeprom_test_data_size(1)
#define 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这是定义所有适配器属性的结构的仪器。看着这会导致一些洞察力。
此外,在读者功能实现中也是一个观察sizeof(e_addr_buff)为您的用例提供2,也可以给您2,也可以是1。
我也试图复制我身边的问题,以检查任何固有问题。如果我找到了什么,请告诉你..
此致,
lc_dialog