我已经被卡在lis3dh的i2c驱动将近一个星期了,我该怎么办

15个员额/ 0个新员额
最后发表
summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
我已经被卡在lis3dh的i2c驱动将近一个星期了,我该怎么办

嗨,每个人都在这里。最近我参与了一个使用lis3dh的项目。有一些限制,所以我不得不选择i2c驱动而不是spi。正如您所看到的,我测试了spi驱动一次,一切都工作得很好。但当它转到i2c时,我被困在司机几乎一个星期没有任何进展。我读了这里所有关于i2c的帖子,没有任何帮助。我只是试图回读WHO I AM寄存器的内容,并使用一个逻辑分析仪来监视i2c总线,结果是在一些建议的初始化过程之后,没有从lis3dh得到ACK响应。所以这里有人能给我一些建议来帮助我走出僵局吗?例如,我应该开发一些代码来模拟i2c总线吗?
谢谢。

VesaN
离线
最后看到:5年7个月前
大师 主
加入:2014-06-26 08:49
你好summer20100514 !

你好summer20100514 !

你可以尝试很多方法。到目前为止你尝试过什么?您可以双重检查引脚配置,您可以检查芯片选择(CS)引脚被拉高加速度计上选择I2C总线等。

VesaN
离线
最后看到:5年7个月前
大师 主
加入:2014-06-26 08:49
还有一件有趣的事

还有一件有趣的事

与LIS3DH相关联的Slave Address为001100x。SDO/SA0 pad可用于修改设备地址的较低有效位。如果SA0 pad接电压电源,LSb值为1(地址0011001b),如果SA0 pad接接地,LSb值为0(地址0011000b)。此解决方案允许将两个不同的加速度计连接到相同的I2C线路并进行寻址。

所以,检查你的从属地址是否正确,0011000或0011001

summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
谢谢你的回复。我有

谢谢你的回复。你上面提到的我已经检查了至少5次了,我想一定是芯片出了问题或者其他什么问题?更重要的是,是否有任何演示项目或.c文件已经测试过,在一些芯片上工作良好,例如adx1345 ?

VesaN
离线
最后看到:5年7个月前
大师 主
加入:2014-06-26 08:49
不幸的是,我不知道

不幸的是,我不知道会有任何DA1458x芯片。也许你可以分享一下你的驱动程序的代码?

谢谢!

summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
在发布项目

在Dialog提供的Smart Tag发布项目中,我发现了一个i2c加速计mc3410使用的驱动文件,可能会有帮助。

JE_Dialog
离线
最后看到:2天1小时前
工作人员
加入:2013-12-05 14:02
你好,夏天20100514,你

你好summer20100514,你看了i2c EEPROM驱动程序的外接项目的例子吗?虽然它不是一个传感器,但它是通用的i2c命令。

BR JE_Dialog

JE_Dialog
离线
最后看到:2天1小时前
工作人员
加入:2013-12-05 14:02
你好Summer20100514,我

你好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设置匹配的配置
*---------------------------------------------------------

  • spi闪存与uart
  • (1)带有uart的i2c eeprom
  • (2)带蜂鸣器和uart的正交编码器
    *---------------------------------------------------------
    */
    // Hardware Configuration <0=> SPI Flash with UART <1=> I2C EEPROM with UART <2=> Quadrature Encoder, Timers & Buzzer with UART
    #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位

summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
@BR JE_Dialog,谢谢

@BR JE_Dialog,谢谢你的关注和耐心。

mohit3112
离线
最后看到:9个月,3个星期前
专家
加入:2014-08-04一点
嘿,Summer20100514,

嘿,Summer20100514,

你的问题解决了吗,我正面临同样的问题与adx1345,我已经尝试了eeprom的例子代码,它卡住了
WAIT_FOR_RECEIVED_BYTE () ?

谢谢

summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
你应该检查下引体向上

你应该首先检查上拉电阻和从地址,最好使用逻辑分析仪。祝你好运

mohit3112
离线
最后看到:9个月,3个星期前
专家
加入:2014-08-04一点
我用4.7k引体向上

我在lis3dh上使用4.7k的下拉,但它对我不起作用(顺便说一下,adxl工作了,谢谢!!)如果SDO是接地的7位从位地址是0x18(因为我们排除了读-写位),您使用的上拉电阻是什么?

summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
是的,还有一些东西

是的,有些事我还是不明白。我的同事正在做这个,他告诉我他在i2c功能之间增加了一些延迟,看起来工作得很好,所以你可以试试这个。如果你有任何进展,请在这里发表,以供参考,谢谢。

mohit拉伊
离线
最后看到:4年9个月前
加入:2016-07-28 20:57
任意一个得到的解

谁能找到这个问题的答案.........因为我也得到相同的问题,我的代码也卡在无限循环在ptrI2C->GetStatus()。

mohit拉伊
离线
最后看到:4年9个月前
加入:2016-07-28 20:57
我也得到了同样的东西

我也遇到了同样的问题…我的代码也卡在“ptrI2C->GetStatus()”的无限循环中。忙 " .........这个问题的解决方法是什么?如果有谁解决了这个问题,请告诉我解决办法。提前谢谢。