我被困在lis3dh的i2c驱动程序中已经快一个星期了,我该怎么办

15个帖子/ 0新
最后一篇文章
夏季20100514
离线
最后一次见到:4年2个月前
格鲁鲁
已加入:2014-12-30 05:01
我被困在lis3dh的i2c驱动程序中已经快一个星期了,我该怎么办

大家好。最近我参与了一个使用lis3dh的项目。有一些限制,所以我不得不选择i2c驱动程序而不是spi。正如你所见,我测试了一次spi驱动程序,一切都很好。但当它变成i2c时,我被困在驱动程序中几乎一个星期没有任何进展。我在这里读了所有关于i2c的帖子,没有任何帮助。我只试着读回WHO-I-AM寄存器的内容,并使用一个逻辑分析器来监视i2c总线,结果是在一些建议的初始化过程之后,lis3dh没有应答ACK。有人能给我一些建议来帮我摆脱僵局吗?例如,我应该开发一些代码来模拟i2c总线吗?
谢谢。

维桑
离线
最后一次见到:5年4个月前
格鲁鲁 硕士
已加入:2014-06-26 08:49
你好夏天20100514!

你好夏天20100514!

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

维桑
离线
最后一次见到:5年4个月前
格鲁鲁 硕士
已加入:2014-06-26 08:49
一个有趣的事情

数据表中还有一件有趣的事:

与LIS3DH关联的从机地址是001100x。SDO/SA0 pad可用于修改设备地址的低有效位。如果SA0焊盘连接到电源,则LSb为1(地址0011001b);如果SA0焊盘连接到地,则LSb值为0(地址0011000b)。此解决方案允许将两个不同的加速计连接到同一I2C线路并寻址。

因此,检查您的从地址右,0011000或0011001

夏季20100514
离线
最后一次见到:4年2个月前
格鲁鲁
已加入:2014-12-30 05:01
谢谢你的回复。我有

谢谢你的回复。我已经检查了你上面提到的至少5次了,所以我想芯片里肯定有什么问题还是别的什么?此外,有没有任何演示项目或.c文件,已经过测试,在一些芯片上工作良好,例如,adxl345?

维桑
离线
最后一次见到:5年4个月前
格鲁鲁 硕士
已加入:2014-06-26 08:49
不幸的是我不知道

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

谢谢!

夏季20100514
离线
最后一次见到:4年2个月前
格鲁鲁
已加入:2014-12-30 05:01
在发布项目中

在对话框提供的智能标签的发布项目中,我发现用于一个I2C加速度计的驱动程序文件MC3410,也许会有所帮助。

JE\U对话框
离线
最后一次见到:5天8小时前
工作人员
已加入:2013-12-05 14:02
你好,summer20100514,是吗

你好,summer20100514,你有没有看一下Perhiperals项目中的i2c EEPROM驱动程序示例?虽然它不是传感器,但它是通用的i2c命令。

BR JE\u对话框

JE\U对话框
离线
最后一次见到:5天8小时前
工作人员
已加入:2013-12-05 14:02
你好夏天2014年,我

你好Summer20100514,我附上下面一个SE95 i2c温度传感器的例子供参考。i2c API相当强大:我们有几个客户正在生产i2c MEMS,没有报告i2c API的问题。

BR JE\u对话框

sdk ... \ peripheral_examples ... da14580_peripheral_setup.uvproj

第二步。请参阅:periph\u setup.h:
将硬件_configuration_index(。)更改为'1'。

/*测试定义-选择与硬件设置匹配的配置
*---------------------------------------------------------

  • (0)带UART的SPI闪存
  • (1)I2C EEPROM与UART
  • (2) 带蜂鸣器和UART的正交编码器
    *---------------------------------------------------------
    */
    // 硬件配置<0 => SPI闪存与UART <1 =>带有UART <2 =>正交编码器,定时器和蜂鸣器,带有UART
    #定义硬件配置索引(1)//1=>I2C

第三步。
在:eeprom\u test.c(文件开头)中添加新软件

挥发性int16_t温度;
挥发性int ii;

//测试外围SE95温度传感器
//地址= 1001 a2 a1 a0 r / w => 7bitaddress = 0x48 ... 0x48 + 7 = 0x4f

i2c_eeprom_init(0x48,i2c_标准,i2c_7BIT_ADDR,i2c_1BYTE_ADDR);

//读取内部ID号:
ii=i2c_eeprom_read_byte(0x05);//测试读取ID值=0xA1

//读数温度
btrd=i2c\ eeprom\读取\数据(rd\数据,0,2);

温度=256*rd\U数据[0]+rd\U数据[1];
temperature=temperature/8;//右移3位

夏季20100514
离线
最后一次见到:4年2个月前
格鲁鲁
已加入:2014-12-30 05:01
@谢谢你的对话

@谢谢你的关注和耐心。

Mohit3112.
离线
最后一次见到:6个月2周前
专家
已加入:2014-08-04 13:45
嘿Summer20100514,

嘿Summer20100514,

你的问题解决了吗,我面临着与adxl345相同的问题,我已经尝试了eeprom的例子代码,它陷入困境
wait_for_received_byte()?

谢谢

夏季20100514
离线
最后一次见到:4年2个月前
格鲁鲁
已加入:2014-12-30 05:01
你应该检查一下引体向上

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

Mohit3112.
离线
最后一次见到:6个月2周前
专家
已加入:2014-08-04 13:45
我用的是4.7k的引体向上

我正在使用4.7k的lis3dh引体向上,但它不适合我(让adxl工作的方式,谢谢!!)。如果SDO接地,您使用的是什么上拉电阻?7位从机地址是0x18(因为我们排除了读写位)?

夏季20100514
离线
最后一次见到:4年2个月前
格鲁鲁
已加入:2014-12-30 05:01
是的,还有一些东西

是的,我还是有点困惑。我的同事正在研究这个,他对我说,他在i2c函数之间添加了一些延迟,看起来效果不错,所以你可以试试这个。如果您有任何进展,请发到这里作为参考,谢谢。

Mohit Rai.
离线
最后一次见到:4年6个月前
已加入:2016-07-28 20:57
任何人都能得到

任何一个人都得到了这个问题的解决方案.........因为我也得到了同样的问题,我的代码也被困在ptri2c-> getstatus()的无限循环中。

Mohit Rai.
离线
最后一次见到:4年6个月前
已加入:2016-07-28 20:57
我也得到了相同的

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