嗨,每个人都在这里。最近我参与了一个使用lis3dh的项目。有一些限制,所以我不得不选择i2c驱动而不是spi。正如您所看到的,我测试了spi驱动一次,一切都工作得很好。但当它转到i2c时,我被困在司机几乎一个星期没有任何进展。我读了这里所有关于i2c的帖子,没有任何帮助。我只是试图回读WHO I AM寄存器的内容,并使用一个逻辑分析仪来监视i2c总线,结果是在一些建议的初始化过程之后,没有从lis3dh得到ACK响应。所以这里有人能给我一些建议来帮助我走出僵局吗?例如,我应该开发一些代码来模拟i2c总线吗?
谢谢。
星期一,2015-01-12 07:40
#1
我已经被卡在lis3dh的i2c驱动将近一个星期了,我该怎么办
你好summer20100514 !
你可以尝试很多方法。到目前为止你尝试过什么?您可以双重检查引脚配置,您可以检查芯片选择(CS)引脚被拉高加速度计上选择I2C总线等。
还有一件有趣的事
所以,检查你的从属地址是否正确,0011000或0011001
谢谢你的回复。你上面提到的我已经检查了至少5次了,我想一定是芯片出了问题或者其他什么问题?更重要的是,是否有任何演示项目或.c文件已经测试过,在一些芯片上工作良好,例如adx1345 ?
不幸的是,我不知道会有任何DA1458x芯片。也许你可以分享一下你的驱动程序的代码?
谢谢!
在Dialog提供的Smart Tag发布项目中,我发现了一个i2c加速计mc3410使用的驱动文件,可能会有帮助。
你好summer20100514,你看了i2c EEPROM驱动程序的外接项目的例子吗?虽然它不是一个传感器,但它是通用的i2c命令。
BR JE_Dialog
你好Summer20100514,我在下面附上一个SE95 i2c温度传感器的例子作为参考。i2c API相当健壮:我们有几个客户在生产i2c MEMS,并且没有报告i2c API的问题。
BR JE_Dialog
DA14580_peripheral_setup.uvproj . SDK
步骤2。看到:periph_setup.h:
将HARDWARE_CONFIGURATION_INDEX(.)改为' 1 '。
/* Test Definition -选择与您的H/W设置匹配的配置
*---------------------------------------------------------
*---------------------------------------------------------
*/
//
#define HARDWARE_CONFIGURATION_INDEX (1) // 1 => I2C . I2C . I2C
步骤3。
在eeprom_test.c中添加新软件(在文件的开头)
挥发性int16_t温度;
不稳定的int二世;
//测试外围设备SE95温度传感器
// address = 1001 A2 A1 A0 R/W => 7bitaddress = 0x48…0x48 + 7 = 0x4F
i2c_eeprom_init(0x48, I2C_STANDARD, I2C_7BIT_ADDR, I2C_1BYTE_ADDR);
//读取内部ID-number:
2 = i2c_eeprom_read_byte (0 x05);//测试读取ID-value = 0xA1
/ /读取温度
BTRD = i2c_eeprom_read_data(rd_data, 0,2);
温度= 256 * rd_data[0]+ rd_data[1];
温度=温度/ 8;//右移3位
@BR JE_Dialog,谢谢你的关注和耐心。
嘿,Summer20100514,
你的问题解决了吗,我正面临同样的问题与adx1345,我已经尝试了eeprom的例子代码,它卡住了
WAIT_FOR_RECEIVED_BYTE () ?
谢谢
你应该首先检查上拉电阻和从地址,最好使用逻辑分析仪。祝你好运
我在lis3dh上使用4.7k的下拉,但它对我不起作用(顺便说一下,adxl工作了,谢谢!!)如果SDO是接地的7位从位地址是0x18(因为我们排除了读-写位),您使用的上拉电阻是什么?
是的,有些事我还是不明白。我的同事正在做这个,他告诉我他在i2c功能之间增加了一些延迟,看起来工作得很好,所以你可以试试这个。如果你有任何进展,请在这里发表,以供参考,谢谢。
谁能找到这个问题的答案.........因为我也得到相同的问题,我的代码也卡在无限循环在ptrI2C->GetStatus()。
我也遇到了同样的问题…我的代码也卡在“ptrI2C->GetStatus()”的无限循环中。忙 " .........这个问题的解决方法是什么?如果有谁解决了这个问题,请告诉我解决办法。提前谢谢。