你好,
我使用DA14531 TINY模块与Codeless SDK 6.380.10.4和工厂编译的codeless_531_standalone_set_two。十六进制图像以及TI的HDC1000传感器。读取或写入传感器寄存器时出现问题。
通过读取寄存器,命令如下(见附件控制台会话):
在+ IOCFG = 9, 7
8 + IOCFG = 8
在+ I2CCFG = 7100, 16岁
在+ I2CREAD = 0 x40,以0 xfe
这里0x40是传感器I2C地址,0xFE是传感器寄存器地址。这样就可以读取2字节传感器的制造商ID。然而,只有第一个ID字节被读取,通过读取第二个字节,模块仅向传感器发送8个SCL脉冲(而不是9个)并挂起。见所附的逻辑分析仪图像。上拉I2C电阻是4.7K,所以他们不是一个问题。大约3分钟后,模块复位并在终端窗口中打印+READY。所有I2C引脚之前的配置都被重置并忘记。
通过写入传感器配置寄存器,模块组成正确数量的SCL脉冲,但在通信结束时不构成STOP条件,并使SCL线处于低位。写入是由以下命令完成的,请参阅所附的逻辑分析器图像:
在+ I2CWRITE = 0 x40 2 0
其中2是传感器寄存器地址,0是要写入的值。
我还尝试了其他传感器和1字节和2字节寄存器的组合。一切都不像预期的那样。
问题:这是一个已知的模块问题,应该等待一个新的固件发布或有一个方法来修复它?
关键词:
你好,谢尔盖·贝兹鲁科夫,
谢谢你的跟进问题和反馈。让我查一下,然后给你答复。
谢谢,PM_Dialog
你好,谢尔盖·贝兹鲁科夫,
很抱歉耽搁了。所以,如果我目前的理解,这可以在~3分钟后复制,对吗?请问这个模块是连接了对端设备,还是只是在做广告?
在模块复位之前(3min之前),请问I2C命令是否正常?
谢谢,PM_Dialog
在所有I2C命令中,只有I2CCFG可以正常工作。我还没有设法使任何其他I2C命令工作。当我尝试I2C命令时,模块只是发布,没有连接到任何客户端。通过发送READ,模块通过读取最后一个字节只产生8个时钟并挂起(在终端上甚至没有说OK),并在3分钟后重置自己。通过发送WRITE,模块以OK响应,并且不重置自己。然而,在这种情况下,它不构成STOP条件,并通过接地时钟引脚保持I2C总线繁忙。
你好,谢尔盖·贝兹鲁科夫,
非常感谢您的额外投入。我将把这种行为上报给团队内部,我会尽快让你知道。
请尝试使用SET_TWO项目,而不是使用odeless_531_standalone_set_two。十六进制形象吗?
所以,从我们的网站下载无代码项目-DA14585-DA14531无码AT命令然后打开Keil项目projects\target_apps\codeless\codeless_5xx\Keil_5。
然后,请尝试启用开发调试- #define CFG_DEVELOPMENT_DEBUG in da1458x_config_basic.h -重新构建项目并在调试模式下运行。
在发送特定的I2C之后,项目是否正常运行,还是被卡在断言中?”
谢谢,PM_Dialog
我根据你的建议在Keil上从源代码重新编译了SET TWO项目。行为没有任何改变。通过发送READ命令,代码被卡在文件user_i2c.c的第89行(wait while-loop由宏WAIT_UNTIL_NO_MASTER_ACTIVITY()提供)。没有陷入断言。
他谢尔盖,
我已经在团队内部进行了升级,所以我一有消息就会马上通知你。
谢谢,PM_Dialog
嗨谢尔盖,
再次感谢您的反馈。请找到附件中的diff文件,并在projects/target_apps/codeless/codeless_5xx/src/user_i2c.c文件中执行建议的修改。
当最后一个命令被发送到从服务器时,您应该设置I2C_STOP位,如diff文件所示。
需要修改的相关函数有:user_i2c_read_byte(), user_i2c_read_word16(), user_i2c_write_byte(), user_i2c_write_16(), user_i2c_scan()
修改完成后,是否能够成功执行I2C AT命令?
谢谢,PM_Dialog
嗨谢尔盖,
请问建议的修改是否解决了I2C的问题?
谢谢,PM_Dialog
亲爱的对话团队:
对不起,我对其他事情太过分了……
不管怎样,我只是按照你的建议做了代码修改,重新编译了图片。
所有I2C读/写命令现在工作正常。
非常感谢您的支持!
嗨谢尔盖,
谢谢让我们知道。如果你有任何其他问题,请在论坛上发表新的帖子。欢迎您的反馈!
谢谢,PM_Dialog