⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
10个帖子/ 0个新帖子
最后发表
Thanhtu131
离线
最后看到:6个月3个星期前
加入:2018-09-18 17:44
i2c奇怪的错误

嗨,我面临一个非常奇怪的错误与i2c设备。我使用eeprom AT24C02和实时计数器DS3231。因为他们有相同的i2c配置(地址模式,字地址大小),我不需要为ds3231开发库。我试图从AT24C02和DS3231读取7字节。在i2c eeprom示例(非BLE)中,我可以成功读取。但是在ble_sleepmode示例中,在回调函数user_app_init()中,我放了一行代码从AT24C02和DS3231读取7字节。我可以从AT24C02(地址0x50)读取7个字节。当我将地址更改为DS3231地址(0x68)——> debug——> Run时,ide跳转到文件nmi_handler.c并停留在第63行。我有一些捕获在PDF文件。

62 if ((GetWord16(SYS_STAT_REG) & DBG_IS_UP) == DBG_IS_UP
63年__asm(“BKPT # 0 \ n”);
其他64

我花了两天的时间,但是我找不到原因。请帮助我!

我期待着很快收到你的来信。

谢谢!

附件:
设备:
PM_Dialog
离线
最后看到:9小时30分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

我建议先检查一下教程8:调试方法以便开始调试应用程序代码。你能找出触发NMI的代码点是什么吗?

所以,如果我理解正确的话,它在非BLE项目中工作,但不在BLE项目中工作。

你有使用任何一种可用的睡眠模式吗?

谢谢,PM_Dialog

Thanhtu131
离线
最后看到:6个月3个星期前
加入:2018-09-18 17:44
嗨,你理解错了

嗨,你理解错了。在BLE和非BLE的例子中,我可以正常读取eeprom。但是我只能在非ble示例中从ds3231读取时间。在BLE睡眠模式的例子中,如果我将地址从0x50(eeprom)更改为0x68(ds3231),就会触发NMI。默认休眠模式为深度休眠模式。事情变得更神秘的:我要求董事会与RST按钮连接到RST销DA14580基本装备,如果我按,RST按钮,我可以运行代码并读取数据从ds3231和我要做的,每次我调试程序。

PM_Dialog
离线
最后看到:9小时30分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

>>>如果我将地址从0x50(eeprom)更改为0x68(ds3231),会触发NMI。

您将不得不开始调试您的项目。这就是为什么我之前的回答是遵循建议的教程。

请在调试模式下运行它,在read函数中添加一个断点,然后进入代码,这样您就可以发现哪里出错了。

谢谢,PM_Dialog

Thanhtu131
离线
最后看到:6个月3个星期前
加入:2018-09-18 17:44
你好,我跟踪了

你好,我已经遵循了建议的教程。DA14580的i2c_eepeom库驱动行出现硬故障。此外,当硬故障发生时,没有东西被记录。如果我找到的代码行触发了NMI,那么串行监视器中必须记录一些东西。我找不到放断点的地方。请查收附件的PDF文件。

附件:
PM_Dialog
离线
最后看到:9小时30分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

请问触发NMI的是哪个SDK功能?

谢谢,PM_Dialog

Thanhtu131
离线
最后看到:6个月3个星期前
加入:2018-09-18 17:44
正如您在i2c错误中所看到的

正如你在i2c bug pdf文件中看到的,触发NMI的SDK函数是WAIT_UNTIL_NO_MASTER_ACTIVEITY()(这是一个宏,用于检查涉及寄存器)。我想知道为什么如果我按下复位按钮(我做了一个适配器板有一个按钮连接到在DA14580 kit的RST引脚头),我可以运行和调试程序

PM_Dialog
离线
最后看到:9小时30分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

在两个I2C api中调用WAIT_UNTIL_NO_MASTER_ACTIVITY(),并让应用程序等待,直到主程序不再有活动。

从附加的文件中,我假设导致NMI的WAIT_UNTIL_NO_MASTER_ACTIVITY()是由i2c_wait_until_eeprom_ready()调用的。

i2c_wait_until_eeprom_ready()函数将轮询I2C,直到I2C就绪。首先,这个函数发送一个虚拟值,它一直等待,直到Tx的FIFO为空。我强烈建议您探测您的引脚(SCL、SDA和RDY)并尝试读取一个地址。如果你试一试,我想问题会更清楚。

你可以省略,因为这可以导致你问题i2c_wait_until_eeprom_ready(),因为这是发送一个额外的字节I2C设备来检查你的设备是否准备好互动,但除了i2c_eeprom_read_byte()函数得到你I2C总线的数据表的设备描述。

谢谢,PM_Dialog

Thanhtu131
离线
最后看到:6个月3个星期前
加入:2018-09-18 17:44
你好,非常感谢你

您好,非常感谢您的支持,我已经查明问题来自DS3231 PCB。更换另一个ds3231模块后,操作正常。

PM_Dialog
离线
最后看到:9小时30分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

很高兴你弄明白了!

谢谢,PM_Dialog